var wlock   = 1;             // 常に全面表示の場合は 1、そうでない場合は 0
var clear_f = 0;             // 1:クリアボタン表示、0:非表示
var c_body  = '#ffffff';     // ボディの背景
var c_table = '#dddddd';     // カレンダーの背景
var c_month = '#ffcc66';     // 月の背景
var f_month = '#336666';     // 月の文字
var c_week  = '#e6e6e6';     // 週の背景
var f_week  = '#336666';     // 週の文字
var c_date  = '#ffffff';     // 日の背景
var c_datex = '#999999';     // 日の背景(先月・来月部分)
var c_dateo = '#a6c2ff';     // 日の背景(本日部分)
var f_date  = '#000000';     // 日の文字
var s_date  = '#ffccff';     // 休祝日の背景
var t_date  = '#ccffff';     // 土曜日の背景


var now    = new Date();
var absnow = now;
var Win=navigator.userAgent.indexOf('Win')!=-1;
var Mac=navigator.userAgent.indexOf('Mac')!=-1;
var X11=navigator.userAgent.indexOf('X11')!=-1;
var Moz=navigator.userAgent.indexOf('Gecko')!=-1;
var Fir=navigator.userAgent.indexOf('Firefox')!=-1;
var Opera=!!window.opera;
var winflg=1;

function wrtCalendar(e,oj,flg,arg1,arg2){

  if(Opera)return;
  oj.blur();

  if(!arguments[2]) flg  = 'yyyy/mm/dd';
  if(!arguments[3]) arg1 = 0;
  if(!Moz)
  if(arguments[4]||arguments[4]==0) winflg = 0;

  //-初期化
  if(arg1==0)now = new Date();
  //-ｶﾚﾝﾀﾞｰ用表示月日
  cal = new Date();

  //-初期表示する日付に入力された日付をセット  20090415 S.Yamamoto
  if(oj.value!=0){
    absnow = new Date(oj.value);
  }

  //-年月日取得
  nowdate  = now.getDate();
  nowmonth = now.getMonth();
  nowyear  = now.getYear();

  //-月移動処理
  if(arg1 == 12){                        //arg1が12なら
    nowyear++;                                //1年加算
  } else if(arg1 == -12){                 //arg1が-12なら
    nowyear--;                                //1年減算
  } else if(nowmonth == 11 && arg1 > 0){ //12月でarg1が+なら
    nowmonth = -1 + arg1; nowyear++;          //月はarg1-1;1年加算
  } else if(nowmonth == 0 && arg1 < 0){  //1月でarg1が-なら
    nowmonth = 12 + arg1; nowyear--;          //月はarg1+12;1年減算
  } else {                               //2-11月なら
    nowmonth +=  arg1;                        //月は+arg1
  }

  //-2000年問題対応
  if(nowyear < 1900) nowyear = 1900 + nowyear;

  //-現在月を確定
  now = new Date(nowyear,nowmonth,1);

  //-YYYYMM作成
  nowyyyymm = nowyear * 100 + nowmonth;

  //-YYYY/MM作成
  nowcalmonth =  cal.getMonth() + 1;
  nowcalyear = cal.getFullYear();
  chk = new Date(nowcalyear,nowcalmonth,1);
  chk1 = new Date(nowcalyear,nowcalmonth + 5,1);
 // alert(chk1);
//  alert(now);
  if(nowcalmonth < 10) nowcalmonth = '0' + nowcalmonth ;
  
  nowtitlemonth = nowmonth + 1;
  if(nowtitlemonth < 10) nowtitlemonth = '0' + nowtitlemonth
  nowtitleyyyymm = nowyear + ' / ' + nowtitlemonth;

  //-週設定
  week = new Array('日','月','火','水','木','金','土');

  //-カレンダー表示用サブウインドウオープン
  if(winflg){

   // var w = 210;
    var w = 420;
    var h = 196;
    if(clear_f) h = 160;

    //-calendar用OS別サイズ微調整
    if(Fir)     { w += 60; h += 15; }
    else if(Moz){ w += 25; h += 30; }
    else if(Win){ w +=  0; h +=  0; }
    else if(Mac){ w +=  8; h += 22; }
    else if(X11){ w +=  5; h += 46; }

    var x = 100;
    var y = 20;

    //-表示位置調整
    if(document.all){
        //e4,e5,e6
        x = window.event.screenX + 15;
        if(x + w > screen.width){ x = window.event.screenX - 180; }
        y = window.event.screenY - 180;
        if(y < 0){y = window.event.screenY}

    } else if (document.layers || document.getElementById){
        //n4,n6,n7,m1,o6
        x = e.screenX + 10;
        if(x + w > screen.width){ x = e.screenX - 200; }
        y = e.screenY - 200;
        if(y < 0){y = e.screenY; }
    }

//------comment by ou -----スクリプト遅く対応------
    //-カレンダーウィンドウを表示
    //mkSubWin('#','calendar',x,y,w,h);
//------comment by ou -----スクリプト遅く対応------    

  }
  //-カレンダー構築用基準日の取得
  fstday   = now;                                                 //今月の1日
  startday = fstday - ( fstday.getDay() * 1000 * 60 * 60 * 24 );  //最初の日曜日
  startday = new Date(startday);

  //-現在以前に行かせない制御用文字列変数
  seigyo = '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
  
  //-カレンダー構築用HTML
  ddata = '';
  ddata += '<html>\n';
  ddata += '<head>';
  ddata += '<meta http-equiv="Content-Type" content="text/html;charset=SHIFT_JIS">\n';
  ddata += '<title>CALENDAR</title>\n';
  ddata += '<style>\n';
  ddata += '  body { font:14px ; line-height:14px ; margin:7px }\n';
  ddata += '  th   { font:14px ; line-height:14px ; font-weight:900 }\n';
  ddata += '  td   { font:14px ; font-family:Arial; line-height:14px }\n';
  ddata += '  a    { text-decoration:none; color:#000000; font:12px; font-family:Arial; line-height:12px }\n';
if(!Moz || Fir){
  ddata += '  input{ font:10px ; font-family:Arial; line-height:10px ; padding:0px }\n';
}
  ddata += '</style>\n';
  ddata += '</head>\n';
  if(wlock){
    ddata += '<body bgcolor="' + c_body + '" onBlur="window.focus()">\n';
  }else{
    ddata += '<body bgcolor="' + c_body + '">\n';
  }

  ddata += '<form>\n';
  
  //---add by ou start
  ddata += '  <table border="0" bgcolor="' + c_table + '" bordercolor="' + c_table + '" width="400" height="180">\n';
  ddata += '  <tr><td>\n';
  //---add by ou end 
  ddata += '  <table border="0" bgcolor="' + c_table + '" bordercolor="' + c_table + '" width="200" height="180">\n';

//alert(now.getMonth());
//alert(chk1.getMonth());
  //-YEAR/MONTH
  if(nowcalmonth == nowtitlemonth)
  {
	ddata += '    <tr id="trmonth" bgcolor="' + c_month + '" bordercolor="' + c_month + '" width="200" height="20">\n';
	ddata += '      <th colspan="7" width="140" height="23" align="center"><nobr>';
	ddata +=        seigyo + seigyo + '&nbsp;&nbsp;&nbsp;<font color="' + f_month + '">';
	ddata +=          nowtitleyyyymm + '\n';
/*	ddata +=               seigyo + '<input type=Image src="http://tabiself.com/Images/btn/btn_next_sb.gif" align="center"';
	ddata +=                'onClick="self.opener.wrtCalendar(0,self.opener.document.';
	ddata +=                 oj.form.name+'.'+oj.name+',\''+flg+'\',1,0)">\n';*/
	ddata += '      </font></nobr></th>\n';
	ddata += '    </tr>\n';
  }else if(now.getMonth() == chk1.getMonth()){
 // alert(chk1);
	ddata += '    <tr id="trmonth" bgcolor="' + c_month + '" bordercolor="' + c_month + '" width="200" height="20">\n';
	ddata += '      <th colspan="7" width="140" height="23" align="center"><nobr>';
	ddata += '          <input type=Image src="http://tabiself.com/Images/btn/btn_back_sb.gif" align="center"';
	ddata +=                'onClick="self.opener.wrtCalendar(0,self.opener.document.';
	ddata +=                 oj.form.name+'.'+oj.name+',\''+flg+'\',-1,0)">\n';
	ddata += '     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="' + f_month + '">';
	ddata +=          nowtitleyyyymm + '\n';
	ddata += '      </font></nobr></th>\n';
	ddata += '    </tr>\n';
  }else{
	//alert(now);
	ddata += '    <tr id="trmonth" bgcolor="' + c_month + '" bordercolor="' + c_month + '" width="200" height="20">\n';
	ddata += '      <th colspan="7" width="140" height="23" align="center"><nobr>';
	ddata += '          <input type=Image src="http://tabiself.com/Images/btn/btn_back_sb.gif" align="center"';
	ddata +=                'onClick="self.opener.wrtCalendar(0,self.opener.document.';
	ddata +=                 oj.form.name+'.'+oj.name+',\''+flg+'\',-1,0)">\n';
	ddata += '     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="' + f_month + '">';
	ddata +=          nowtitleyyyymm + '\n';
//2007/11/12 ou
/*	ddata += '              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type=Image src="http://tabiself.com/Images/btn/btn_next_sb.gif" align="center"';
	ddata +=                'onClick="self.opener.wrtCalendar(0,self.opener.document.';
	ddata +=                 oj.form.name+'.'+oj.name+',\''+flg+'\',1,0)">\n';
	ddata += '      </font></nobr></th>\n';  */
//2007/11/12 	
	ddata += '    </tr>\n';
  }
	
  
  
/*
  //-YEAR/MONTH
//  ddata += '    <tr id="trmonth" bgcolor="' + c_month + '" bordercolor="' + c_month + '" width="200" height="14">\n';
  ddata += '    <tr id="trmonth" bgcolor="' + c_month + '" bordercolor="' + c_month + '" width="200" height="20">\n';
  ddata += '      <th colspan="7" width="140" height="18" align="right"><nobr><font color="' + f_month + '">';
  ddata +=          nowtitleyyyymm + '\n';
//  ddata += '          <input type=button value="prev" ';
  ddata += '          <input type=Image src="Images/btn/btn_cale_back.gif" ';
  ddata +=                'onClick="self.opener.wrtCalendar(0,self.opener.document.';
  ddata +=                 oj.form.name+'.'+oj.name+',\''+flg+'\',-1,0)"><input \n';
   ddata += '               type=button VALUE="' + cal.getFullYear() + '/' + nowcalmonth + '" ';
  ddata +=                'onClick="self.opener.wrtCalendar(0,self.opener.document.';
  ddata +=                 oj.form.name+'.'+oj.name+',\''+flg+'\',0,0)"><input \n';

  ddata += '               type=button VALUE="next" ';
  ddata +=                'onClick="self.opener.wrtCalendar(0,self.opener.document.';
  ddata +=                 oj.form.name+'.'+oj.name+',\''+flg+'\',1,0)">\n';

  ddata += '      </font></nobr></th>\n';
  ddata += '    </tr>\n';
*/  

 //-WEEK
  ddata += '    <tr bgcolor="' + c_week + '" width="140" height="14">\n';

  for (i=0;i<7;i++){
	if(i==0)
	{
		ddata += '      <th width="14" height="14"><font color="#ff0000">';
	}else if(i==6){
		ddata += '      <th width="14" height="14"><font color="#0000ff">';
	}else{
		ddata += '      <th width="14" height="14"><font color="#000000">';
	}
    ddata +=          week[i];
    ddata +=       '</font></th>\n';
  }
  ddata += '    </tr>\n';
  
  //-DATE
  for(j=0;j<6;j++){
    ddata += '    <tr bgcolor="' + c_date + '">\n';
    for(i=0;i<7;i++){
      nextday = startday.getTime() + (i * 1000 * 60 * 60 * 24);
      wrtday  = new Date(nextday);
      wrtdate     = wrtday.getDate();
      wrtmonth    = wrtday.getMonth();
      wrtyear     = wrtday.getYear();
      if(wrtyear < 1900) wrtyear = 1900 + wrtyear;
      wrtyyyymm   = wrtyear * 100 + wrtmonth;

      wrtyyyymmdd = makeDate(flg,wrtyear,wrtmonth,wrtdate,i);

      wrtdateA  = '<a href="javascript:function v(){';
      wrtdateA += '   self.opener.document.' + oj.form.name;
      wrtdateA += '.' + oj.name + '.value=(\'' + wrtyyyymmdd + '\'); self.close()}; v()"';
      wrtdateA += '>';
      wrtdateA += '<font color="' + f_date + '">';
      wrtdateA += wrtdate;
      wrtdateA += '</font>';
      wrtdateA += '</a>';

      if(wrtyyyymm != nowyyyymm){
        ddata += '      <td bgcolor="' + c_datex + '" width="14" height="14" align="center" valign="middle">';
        ddata += wrtdateA;

      } else if( wrtdate  == absnow.getDate()  &&
                 wrtmonth == absnow.getMonth() &&
                 wrtday.getYear() == absnow.getYear()){
        ddata += '      <td bgcolor="' + c_dateo + '" width="14" height="14" align="center" valign="middle">';
        ddata += wrtdateA;
        if(i == 1) ++moncnt;    // 月曜日をカウントする

      } else {
        // 祝日の取得
        syuku = getNationalHoliday(wrtyear,wrtmonth + 1,wrtdate,i);
        ddata += '      <td ';
        if(syuku || !i) ddata += 'bgcolor="'+s_date+'" ';       // 日祝日
        if(!syuku && i == 6) ddata += 'bgcolor="'+t_date+'" ';  // 土曜日
        ddata += 'width="14" height="14" align="center" valign="middle">';
        if(syuku){
          ddata += '<span title="'+ syuku + '">' + wrtdateA + '</span>';
        }else{
          ddata += wrtdateA;
        }
      }
      ddata += '</td>\n';
    }
    ddata += '    </tr>\n';

    startday = new Date(nextday);
    startday = startday.getTime() + (1000 * 60 * 60 * 24);
    startday = new Date(startday);
  }

  //-mac用クローズボタン
  if(Mac){
    ddata += '    <tr>\n';
    ddata += '      <td colspan="7" align="center">';
    ddata +=         '<input type="button" value="CLOSE" ';
    ddata +=                'onClick="self.close();return false">';
    ddata +=       '</td>\n';
    ddata += '    </tr>\n';
  }

  ddata += '  </table>';
  
  //--add by ou
  ddata += '  </td>\n';
  //--add by ou
  
  //===========================================二ヶ月表示対応--start======================================
  
  //**********************************パラメータ設定*******************************
  arg1 = 1;
  //-月移動処理
  if(arg1 == 12){                        //arg1が12なら
    nowyear++;                                //1年加算
  } else if(arg1 == -12){                 //arg1が-12なら
    nowyear--;                                //1年減算
  } else if(nowmonth == 11 && arg1 > 0){ //12月でarg1が+なら
    nowmonth = -1 + arg1; nowyear++;          //月はarg1-1;1年加算
  } else if(nowmonth == 0 && arg1 < 0){  //1月でarg1が-なら
    nowmonth = 12 + arg1; nowyear--;          //月はarg1+12;1年減算
  } else {                               //2-11月なら
    nowmonth +=  arg1;                        //月は+arg1
  }
  
  //-2000年問題対応
  if(nowyear < 1900) nowyear = 1900 + nowyear;

  //-現在月を確定
  var now_2 = new Date(nowyear,nowmonth,1);

  //-YYYYMM作成
  nowyyyymm = nowyear * 100 + nowmonth;

  //-YYYY/MM作成
  nowcalmonth =  cal.getMonth() + 1;
  nowcalyear = cal.getFullYear();
  chk = new Date(nowcalyear,nowcalmonth,1);
  chk1 = new Date(nowcalyear,nowcalmonth + 5,1);
 // alert(chk1);
//  alert(now);
  if(nowcalmonth < 10) nowcalmonth = '0' + nowcalmonth ;
  
  nowtitlemonth = nowmonth + 1;
  if(nowtitlemonth < 10) nowtitlemonth = '0' + nowtitlemonth
  nowtitleyyyymm = nowyear + ' / ' + nowtitlemonth;
  
  //-カレンダー構築用基準日の取得
  fstday   = now_2;                                                 //今月の1日
  startday = fstday - ( fstday.getDay() * 1000 * 60 * 60 * 24 );  //最初の日曜日
  startday = new Date(startday);
  
   //***************************************パラメータ設定  end****************************
   
  ddata += '  <td>\n';
   
  ddata += '  <table border="0" bgcolor="' + c_table + '" bordercolor="' + c_table + '" width="200" height="180">\n';
   if(nowcalmonth == nowtitlemonth)
  {
	ddata += '    <tr id="trmonth" bgcolor="' + c_month + '" bordercolor="' + c_month + '" width="200" height="20">\n';
	ddata += '      <th colspan="7" width="140" height="23" align="center"><nobr>';
	ddata +=        seigyo + seigyo + '&nbsp;&nbsp;&nbsp;<font color="' + f_month + '">';
	ddata +=          nowtitleyyyymm + '\n';
	ddata +=               seigyo + '<input type=Image src="http://tabiself.com/Images/btn/btn_next_sb.gif" align="center"';
	ddata +=                'onClick="self.opener.wrtCalendar(0,self.opener.document.';
	ddata +=                 oj.form.name+'.'+oj.name+',\''+flg+'\',1,0)">\n';
	ddata += '      </font></nobr></th>\n';
	ddata += '    </tr>\n';
  }else if(now_2.getMonth() == chk1.getMonth()){
 // alert(chk1);
	ddata += '    <tr id="trmonth" bgcolor="' + c_month + '" bordercolor="' + c_month + '" width="200" height="20">\n';
	ddata += '      <th colspan="7" width="140" height="23" align="center"><nobr>';
/*	ddata += '          <input type=Image src="http://tabiself.com/Images/btn/btn_back_sb.gif" align="center"';
	ddata +=                'onClick="self.opener.wrtCalendar(0,self.opener.document.';
	ddata +=                 oj.form.name+'.'+oj.name+',\''+flg+'\',-1,0)">\n';*/
	ddata +=			seigyo + seigyo + '&nbsp;&nbsp;&nbsp;<font color="' + f_month + '">';
	ddata +=          nowtitleyyyymm + '\n';
	ddata +=       seigyo ;
	ddata += '      </font></nobr></th>\n';
	ddata += '    </tr>\n';
  }else{
	//alert(now_2);
	ddata += '    <tr id="trmonth" bgcolor="' + c_month + '" bordercolor="' + c_month + '" width="200" height="20">\n';
	ddata += '      <th colspan="7" width="140" height="23" align="center"><nobr>';
/*	ddata += '          <input type=Image src="http://tabiself.com/Images/btn/btn_back_sb.gif" align="center"';
	ddata +=                'onClick="self.opener.wrtCalendar(0,self.opener.document.';
	ddata +=                 oj.form.name+'.'+oj.name+',\''+flg+'\',-1,0)">\n';*/
	ddata +=			seigyo + seigyo + '&nbsp;&nbsp;&nbsp;<font color="' + f_month + '">';
	ddata +=          nowtitleyyyymm + '\n';
//2007/11/12 ou
	ddata +=				seigyo + '<input type=Image src="http://tabiself.com/Images/btn/btn_next_sb.gif" align="center"';
	ddata +=                'onClick="self.opener.wrtCalendar(0,self.opener.document.';
	ddata +=                 oj.form.name+'.'+oj.name+',\''+flg+'\',1,0)">\n';
	ddata += '      </font></nobr></th>\n';
//2007/11/12 	
	ddata += '    </tr>\n';
  }
   //-WEEK
  ddata += '    <tr bgcolor="' + c_week + '" width="140" height="14">\n';

  for (i=0;i<7;i++){
	if(i==0)
	{
		ddata += '      <th width="14" height="14"><font color="#ff0000">';
	}else if(i==6){
		ddata += '      <th width="14" height="14"><font color="#0000ff">';
	}else{
		ddata += '      <th width="14" height="14"><font color="#000000">';
	}
    ddata +=          week[i];
    ddata +=       '</font></th>\n';
  }
  ddata += '    </tr>\n';
  
  //-DATE
  for(j=0;j<6;j++){
    ddata += '    <tr bgcolor="' + c_date + '">\n';
    for(i=0;i<7;i++){
      nextday = startday.getTime() + (i * 1000 * 60 * 60 * 24);
      wrtday  = new Date(nextday);
      wrtdate     = wrtday.getDate();
      wrtmonth    = wrtday.getMonth();
      wrtyear     = wrtday.getYear();
      if(wrtyear < 1900) wrtyear = 1900 + wrtyear;
      wrtyyyymm   = wrtyear * 100 + wrtmonth;

      wrtyyyymmdd = makeDate(flg,wrtyear,wrtmonth,wrtdate,i);

      wrtdateA  = '<a href="javascript:function v(){';
      wrtdateA += '   self.opener.document.' + oj.form.name;
      wrtdateA += '.' + oj.name + '.value=(\'' + wrtyyyymmdd + '\'); self.close()}; v()"';
      wrtdateA += '>';
      wrtdateA += '<font color="' + f_date + '">';
      wrtdateA += wrtdate;
      wrtdateA += '</font>';
      wrtdateA += '</a>';

      if(wrtyyyymm != nowyyyymm){
        ddata += '      <td bgcolor="' + c_datex + '" width="14" height="14" align="center" valign="middle">';
        ddata += wrtdateA;

      } else if( wrtdate  == absnow.getDate()  &&
                 wrtmonth == absnow.getMonth() &&
                 wrtday.getYear() == absnow.getYear()){
        ddata += '      <td bgcolor="' + c_dateo + '" width="14" height="14" align="center" valign="middle">';
        ddata += wrtdateA;
        if(i == 1) ++moncnt;    // 月曜日をカウントする

      } else {
        // 祝日の取得
        syuku = getNationalHoliday(wrtyear,wrtmonth + 1,wrtdate,i);
        ddata += '      <td ';
        if(syuku || !i) ddata += 'bgcolor="'+s_date+'" ';       // 日祝日
        if(!syuku && i == 6) ddata += 'bgcolor="'+t_date+'" ';  // 土曜日
        ddata += 'width="14" height="14" align="center" valign="middle">';
        if(syuku){
          ddata += '<span title="'+ syuku + '">' + wrtdateA + '</span>';
        }else{
          ddata += wrtdateA;
        }
      }
      ddata += '</td>\n';
    }
    ddata += '    </tr>\n';

    startday = new Date(nextday);
    startday = startday.getTime() + (1000 * 60 * 60 * 24);
    startday = new Date(startday);
  }

  //-mac用クローズボタン
  if(Mac){
    ddata += '    <tr>\n';
    ddata += '      <td colspan="7" align="center">';
    ddata +=         '<input type="button" value="CLOSE" ';
    ddata +=                'onClick="self.close();return false">';
    ddata +=       '</td>\n';
    ddata += '    </tr>\n';
  }

  ddata += '  </table>';
  
  ddata += '  </td></tr>\n';
  ddata += ' </table>\n';
  
//===========================================二ヶ月表示対応--end======================================

  if(clear_f){
// sasaki add start 2005/07/15
      ddata += '<a href="javascript:function v(){';
      ddata += '   self.opener.document.' + oj.form.name;
      ddata += '.' + oj.name + '.value=(\'' + '\'); self.close()}; v()"';
      ddata += '>';
      ddata += '[CLEAR]';
      ddata += '</a>';
// sasaki add end 2005/07/15
  }
  ddata += '</form>\n';

  ddata += '</body>\n';
  ddata += '</html>\n';

//------add by ou -----スクリプト遅く対応------
//-カレンダーウィンドウを表示
  mkSubWin('#','calendar',x,y,w,h);
//------add by ou -----スクリプト遅く対応------

  calendarwin.document.write(ddata);
  calendarwin.document.close();
  calendarwin.focus();

  winflg=1;
}


var calendarwin;

function mkSubWin(URL,winName,x,y,w,h){

    var para = ""
             + " left="        +x
             + ",screenX="     +x
             + ",top="         +y
             + ",screenY="     +y
             + ",toolbar="     +0
             + ",location="    +0
             + ",directories=" +0
             + ",status="      +0
             + ",menubar="     +0
             + ",scrollbars="  +0
             + ",resizable="   +1
             + ",innerWidth="  +w
             + ",innerHeight=" +h
             + ",width="       +w
             + ",height="      +h;

    calendarwin=window.open(URL,winName,para);
    calendarwin.focus();

}


var moncnt = 0;
var furi   = 0;
var ck     = 0;
var Syunbunpar1 = new Array(19.8277,20.8357,20.8431,21.8510);  // 春分・秋分の日付計算用1980-2099
var Syunbunpar2 = new Array(22.2588,23.2588,23.2488,24.2488);  // 春分・秋分の日付計算用1980-2099

function getNationalHoliday(year,month,day,week){
  // 変数の初期化
  syuku = '';
  if(day == 1 && moncnt > 0 && !ck) moncnt = 0;

  // ハッピーマンデーと振替休日
  if(week == 1){
    if(!ck) ++moncnt;
    // 振替休日
    // (2006年まで)「国民の祝日」が日曜日にあたるときは、その翌日を休日とする。
    if(furi == 1 && year <= 2006){
      syuku = '振替休日';   // 振替フラグが立っていたら休み
      furi = 0;
    }
    // 第2月曜
    if(moncnt == 2){
      if(month ==  1){ syuku = '成人の日'; }    // 1月
      if(month == 10){ syuku = '体育の日'; }    // 10月
    }
    // 第3月曜
    if(moncnt == 3){
      if(year >= 2003 && month == 7){ syuku = '海の日'; }   // 7月(2003〜)
      if(year >= 2003 && month == 9){ syuku = '敬老の日'; } // 9月(2003〜)
    }
  }

  // 春分の日・秋分の日
  var i,tyear;
  if ((year >= 1851) && (year <= 1899)) i = 0;
  else if ((year >= 1900) && (year <= 1979)) i = 1;
  else if ((year >= 1980) && (year <= 2099)) i = 2;
  else if ((year >= 2100) && (year <= 2150)) i = 3;
  else i = 4;   // 範囲外
  if(i < 4){
    if(i < 2) tyear = 1983; else tyear = 1980;
    tyear = (year - tyear);
    if(month == 3){      // 春分の日
      if(day == Math.floor(Syunbunpar1[i] + 0.242194 * tyear - Math.floor((tyear + 0.1)/4))) syuku = '春分の日';
    }else if(month == 9){ // 秋分の日
      if(day == Math.floor(Syunbunpar2[i] + 0.242194 * tyear - Math.floor((tyear + 0.1)/4))) syuku = '秋分の日';
    }
  }

  // その他の祝日
  if(month == 1 && day ==  1){ syuku = '元日' ;}            //  1月 1日
  if(month == 2 && day == 11){ syuku = '建国記念の日'; }    //  2月11日
  if(month == 4 && day == 29 && year <= 2006){ syuku = 'みどりの日'; }      //  4月29日(2006年まで)
  if(month == 4 && day == 29 && year >= 2007){ syuku = '昭和の日'; }        //  4月29日(2007年から)
  if(month == 5 && day ==  3){ syuku = '憲法記念日'; }      //  5月 3日
  if(month == 5 && day ==  4 && year >= 2007){ syuku = 'みどりの日'; }      //  5月 4日(2007年から)
  if(month == 5 && day ==  5){ syuku = 'こどもの日'; }      //  5月 5日
  if(month == 11 && day ==  3){ syuku = '文化の日'; }       // 11月 3日
  if(month == 11 && day == 23){ syuku = '勤労感謝の日'; }   // 11月23日
  if(month == 12 && day == 23){ syuku = '天皇誕生日'; }     // 12月23日
  if(year < 2003 && month == 7 && day == 20){ syuku = '海の日'; }   // 7月20日(〜2002)
  if(year < 2003 && month == 9 && day == 15){ syuku = '敬老の日'; } //  9月15日(〜2002)

  // 振替休日
  // (2007年から)「国民の祝日」が日曜日に当たるときは、その日後においてその日に最も近い「国民の祝日」でない日を休日とする。
  if(furi == 1 && syuku == '' && year >= 2007){
    syuku = '振替休日';   // 振替フラグが立っていたら休み
    furi = 0;
  }else if(furi == 1 && syuku != '' && year >= 2007){
    furi = 1;             // 振替フラグが立っていて祝日の場合は振替フラグを立てる
  }else if(week == 0 && syuku != ''){
    furi = 1;             // 日曜で祝日の場合は振替フラグを立てる
  }else{
    furi = 0;
  }

  // 国民の休日(祝日に挟まれた平日)
  // (2006年まで)その前日及び翌日が「国民の祝日」である日（日曜日にあたる日及び前項に規定する休日にあたる日を除く。）は、休日とする。
  // (2007年から)その前日及び翌日が「国民の祝日」である日（「国民の祝日」でない日に限る。）は、休日とする。
  if((week > 0 && syuku == '' && !ck && year <= 2006) || (syuku == '' && !ck && syuku != '振替休日' && year >= 2007)){
    ck = 1;  //再帰呼び出しでここを通らないようにする
    // 前日と次日が祝日か確認
    // １日と末日が祝日の場合はないので日にちは単純に１を増減する
    // 曜日の設定
    bweek = week - 1; if(bweek < 0) bweek = 6;
    aweek = week + 1; if(bweek > 6) bweek = 0;
    if(getNationalHoliday(year,month,day - 1,bweek) && getNationalHoliday(year,month,day + 1,aweek)){
      syuku = '国民の休日';
    }
    ck = 0;  // フラグの初期化
  }

  return syuku;
}


function makeDate(inpt,year,month,day,i){
  month++;
  week1 = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
  week2 = new Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
  week3 = new Array('日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日');
  week4 = new Array('日','月','火','水','木','金','土');

  // 年
  if(inpt.match(/g/i)){
    if(year > 1988 && (month + '/' + day) > '1/7'){
      year = year - 1988;
      if(year == 1) year = '元';
      if     (inpt.match(/ggg/i)) year = '平成'+ year;
      else if(inpt.match(/gg/i))  year = '平'+ year;
      else if(inpt.match(/g/i))   year = 'H'+ year;
    }else if(year > 1925 && (month + '/' + day) > '12/24'){
      year = year - 1925;
      if(year == 1) year = '元';
      if     (inpt.match(/ggg/i)) year = '昭和'+ year;
      else if(inpt.match(/gg/i))  year = '昭'+ year;
      else if(inpt.match(/g/i))   year = 'S'+ year;
    }else if(year > 1911 && (month + '/' + day) > '7/29'){
      year = year - 1911;
      if(year == 1) year = '元';
      if     (inpt.match(/ggg/i)) year = '大正'+ year;
      else if(inpt.match(/gg/i))  year = '大'+ year;
      else if(inpt.match(/g/i))   year = 'T'+ year;
    }else if(year > 1867 && (month + '/' + day) > '9/7'){
      year = year - 1867;
      if(year == 1) year = '元';
      if     (inpt.match(/ggg/i)) year = '明治'+ year;
      else if(inpt.match(/gg/i))  year = '明'+ year;
      else if(inpt.match(/g/i))   year = 'M'+ year;
    }
    // 年の置き換え
    inpt = inpt.replace('ggg', year); inpt = inpt.replace('gg', year); inpt = inpt.replace('g', year);

  }else{
    // 年の置き換え
    inpt = inpt.replace('yyyy', year);
    inpt = inpt.replace('yy', (year+'').substr(2, 2));
  }

  // 月
  if(inpt.match(/mm/i)){
    if(month < 10) month = '0' + month;
  }
  // 月の置き換え
  inpt = inpt.replace('mm', month); inpt = inpt.replace('m', month);

  // 日
  if(inpt.match(/dd/i)){
    if(day < 10)   day   = '0' + day;
  }
  // 日の置き換え
  inpt = inpt.replace('dd', day); inpt = inpt.replace('d', day);

  // 曜日の置き換え
  if     (inpt.match(/ww/i)) inpt = inpt.replace('ww', week1[i]);
  else if(inpt.match(/w/i))  inpt = inpt.replace('w',  week2[i]);
  else if(inpt.match(/aa/i)) inpt = inpt.replace('aa', week3[i]);
  else if(inpt.match(/a/i))  inpt = inpt.replace('a',  week4[i]);

  return inpt;
}


