/* 2007～2099年対応 JavaScriptカレンダー予定帳 ver. 1.5
                Copyright (c) Kumiko Maeda 2004 - 2008/09/05 */

var url_flg = true;
if(location.href.indexOf("event", 0) < 0){
	url_flg = false;
}


monthTable= new Array(31,28,31,30,31,30,31,31,30,31,30,31); //いじるな危険
baseDate = new Date();
//祝日いじるときはフォーマットは以下のような感じで
//case 月-1:
//  Holiday( year, 月, 日, "祝日名<br>" );
//  Holiday( year, 月, calDate(year, 月, 週, 曜日0(sun)..6(sat)), "祝日名<br>" );
//  break;
function setHolliday( year, month, len ){
/*  var i, tmp;

  //振替休日，国民の休日計算用領域確保
  holDate  = new Array(MAXEVENT);
  hi = 0;
  
  for(i=0; i<=len; i++){
    switch( month ){
    case  0:
      Holiday( year, 1, 1, "元日<br>" );
      Holiday( year, 1, calDate(year, 1, 2, 1), "成人の日<br>" ); //1月第2月曜日
      break;
    case  1:
      Holiday( year, 2, 11, "建国記念の日<br>" );
      break;
    case  2:
      Holiday( year, 3, vernal(year), "春分の日<br>" );
      break;
    case  3:
      Holiday( year, 4, 29, "昭和の日<br>" );
      break;
    case  4:
      Holiday( year, 5, 3, "憲法記念日<br>" );
      Holiday( year, 5, 4, "みどりの日<br>" );
      Holiday( year, 5, 5, "こどもの日<br>" );
      break;
    case  6:
      Holiday( year, 7, calDate(year, 7, 3, 1), "海の日<br>" ); //7月第3月曜日
      break;
    case  8:
      Holiday( year, 9, calDate(year, 9, 3, 1), "敬老の日<br>" ); //9月第3月曜日
      Holiday( year, 9, autumn(year), "秋分の日<br>" );
      break;
    case  9:
      Holiday( year, 10, calDate(year, 10, 2, 1), "体育の日<br>" ); //10月第2月曜日
      break;
    case 10:
      Holiday( year, 11,  3, "文化の日<br>" );
      Holiday( year, 11, 23, "勤労感謝の日<br>" );
      break;
    case 11:
      Holiday( year, 12, 23, "天皇誕生日<br>" );
      break;
    }
    year = year + Math.floor((month+1)/12);
    month = (month+1)%12;
  }
  
  for(i=0; i<hi; i++){
    if( holDate[i].getDay() == 0 ){
       tmp = moveDate(holDate[i],1);
       i++;
       while( i<hi && 
              tmp.getDate()  == holDate[i].getDate()  &&
              tmp.getMonth() == holDate[i].getMonth() &&
              tmp.getYear()  == holDate[i].getYear()  ){
         tmp = moveDate(tmp,1);
         i++;
       }
       newEvent( tmp, HOLIDAY, "振替休日<br>" );
       i--;
    }
  }
  
  for(i=1; i<hi; i++){
    tmp = moveDate(holDate[i-1], 2);
    if( tmp.getDate()  == holDate[i].getDate()  &&
        tmp.getMonth() == holDate[i].getMonth() &&
        tmp.getYear()  == holDate[i].getYear()  ){
      tmp = tmp.getDay();
      if( tmp!=1 && tmp!=2 ){
        tmp = moveDate(holDate[i-1], 1);
        newEvent( tmp, HOLIDAY, "国民の休日<br>" );
      }
    }
  }
*/
}

//year年month月 第week day曜日の計算
function calDate( year, month, week, day ){
 var tmp, day1;
 
 tmp = new Date(year, month-1, 1);
 day1 = tmp.getDay();
 tmp = 1 + day - day1 + week*7;
 if( day - day1 >= 0 ) tmp = tmp - 7;
 return tmp;
}

// 春分の日を求める(2000～2099) 確実である保証はないと思う
function vernal( year ){
 var tmp = Math.floor( 20.69115 + 0.242194 * (year - 2000)
                       - Math.floor((year - 2000)/4) );
 return tmp;
}

// 秋分の日を求める(2000～2099) 確実である保証はないと思う
function autumn( year ){
 var tmp = Math.floor( 23.09 + 0.242194 * (year - 2000)
                       - Math.floor((year - 2000)/4) );
 return tmp;
}

function newEvent( date, sel, name ){
  if( si >= MAXEVENT ) return;
  sdlDate[si]  = date;
  sdlSel[si]   = sel;
  sdlName[si]  = name;
  si++;
}

function newSchedule( year, month, date, sel, name ){
  newEvent( new Date( year, month-1, date ), sel, name );
}

function makeArray(weekVal,colorVal,bodyVal){
  global_arr_week[global_xml_count] = weekVal;
  global_arr_color[global_xml_count] = colorVal;
  global_arr_body[global_xml_count] = bodyVal;
  global_xml_count++;
alert(global_xml_count);
}

function Holiday( year, month, date, name ){
  var i, tmp;
  month--;
  tmp = new Date( year, month, date );
  newEvent( tmp, HOLIDAY, name );
  
  //振替休日、国民の休日計算用データ登録
  if( hi >= MAXEVENT ) return;
  //インサーションソート
  for( i=hi-1;
       i>=0 && holDate[i].getMonth() == month && holDate[i].getDate() > date;
       i-- ){
    holDate[i+1]  =  holDate[i];
  }
  holDate[i+1]  =  tmp;
  hi++;
}

//dateを基準にdis日動かした日を返す
function moveDate( date, dis ){
  var d, m, y;
  
  d = date.getDate();
  m = date.getMonth();
  y = date.getFullYear();
  if ( ((y%4)==0 && (y%100)!=0) || (y%400)==0 ) //うるうの判定(2000～)
        monthTable[1] = 29;
  else  monthTable[1] = 28;
  
  d = d + dis;
  while( d > monthTable[m]){
    d = d - monthTable[m];
    m++;
    if( m > 11 ){
      m=0;
      y++;
      if ( ((y%4)==0 && (y%100)!=0) || (y%400)==0 ) //うるうの判定(2000～)
            monthTable[1] = 29;
      else  monthTable[1] = 28;
    }
  }
  while( d < 0 ){
    m--;
    if( m < 0 ){
      m=11;
      y--;
      if ( ((y%4)==0 && (y%100)!=0) || (y%400)==0 ) //うるうの判定(2000～)
            monthTable[1] = 29;
      else  monthTable[1] = 28;
    }
    d = d + monthTable[m];
  }
  return (new Date(y,m,d));
}

//初期の月
var default_monthView;


//Main関数
function showCalendar( argDate ){

  document.getElementById("divSdlCal").innerHTML = "読み込み中・・・";

  var i, j, k, tmpDate;
  
  tmp = argDate.getMonth() + 1;
  document.formSdlCal.dateInput.value = argDate.getFullYear() + "/" + tmp + "/" + argDate.getDate();
  
  //スケジュール登録用領域確保
  sdlDate  = new Array(MAXEVENT);
  sdlSel   = new Array(MAXEVENT);
  sdlName  = new Array(MAXEVENT);
  si = 0;
  
  //覚えとく
  baseDate = argDate;
  //argDateの週の日曜日から表示する
  tmpDate = moveDate( argDate, -argDate.getDay() );
  //"今日"を記憶
  toDate = new Date();
  
  //表示する可能性のある (SHOWWEEK/4)+2ヶ月先まで祝日を登録
  setHolliday( tmpDate.getFullYear(), tmpDate.getMonth(), Math.floor(SHOWWEEK/4)+2 );
  
  //スケジュールを登録
  setSchedules();
 
var global_count = 0;
var global_arr_week = new Array;
var global_arr_color = new Array;
var global_arr_body = new Array;

  var hdn_csvVal = document.getElementById("hdn_csv").innerHTML;
  var arr_hdn_csvVal = hdn_csvVal.split("\n");
  for(iii=0;iii<arr_hdn_csvVal.length;iii++){
	  var arr_arr_hdn_csvVal = arr_hdn_csvVal[iii].split(",");
	  var arr_arr_arr_hdn_csvVal = arr_arr_hdn_csvVal[0].split("|");
	  for(iiii=0;iiii<arr_arr_arr_hdn_csvVal.length;iiii++){
		  global_arr_week[global_count] = arr_arr_arr_hdn_csvVal[iiii];
		  global_arr_color[global_count] = arr_arr_hdn_csvVal[1];
	  	  global_arr_body[global_count] = arr_arr_hdn_csvVal[2];
		  global_count++;
	  }
  }


  //描画用コード開始
  docubuf = "<table class='event_table' cellspacing='0' cellpadding='0'>";

  //初期月
  default_monthView = tmpDate.getMonth();

  if(url_flg){
	  docubuf += "<tr class='event_table_tr'><td class='event_table_month' colspan='7'>" + (tmpDate.getMonth()+1) + "月</td></tr>";
  }else{
	  docubuf += "<tr class='event_table_tr'><td onclick=\"showCalendar(moveDate(baseDate,-7*(SHOWWEEK-1)))\" colspan=\"2\" style=\"text-align: left; padding-left: 5px; cursor: pointer;\"><img src=\"/wp-content/plugins/Custom_Calendar/images/arrow_left.gif\" alt=\"前月へ戻る\" /></td><td class='event_table_month' colspan='3'>" + (tmpDate.getMonth()+1) + "月</td><td onclick=\"showCalendar(moveDate(baseDate,7*(SHOWWEEK-1)))\" colspan=\"2\" style=\"text-align: right; padding-right: 5px; cursor: pointer;\"><img src=\"/wp-content/plugins/Custom_Calendar/images/arrow_right.gif\" alt=\"次月へ進む\" /></td><td class='event_table_month' colspan='3'></tr>";
  }


  //曜日
  //STERFIELD
  docubuf += "<tr>";
  for(i=0; i<7; i++){
    docubuf += "<th>";
    if(i==0)      docubuf += weekTable[i];
    else if(i==6) docubuf += weekTable[i];
    else          docubuf += weekTable[i];
    docubuf += "<\/th>";
  }
  docubuf += "<\/tr>";
  
  //マンスリーデータを追加
  //日付
  for(i=0; i<SHOWWEEK; i++){
    docubuf += "<tr valign='top' height='" + HEIGHT + "'>";
    for(j=0; j<7; j++){

	if(default_monthView == tmpDate.getMonth()){
	      docubuf += "<td";
	}else{
	      docubuf += "<td style=\"color: #888888\"";
	}

	if( tmpDate.getDate() == toDate.getDate() && tmpDate.getMonth() == toDate.getMonth()){
	      docubuf += " class=\"td_today\"><p ";
	}else if( tmpDate.getDate() == toDate.getDate() + 1 && tmpDate.getMonth() == toDate.getMonth()){
	      docubuf += " class=\"td_nextday\"><p ";
	}else{
	      docubuf += "><p ";
	}


      
      //セル色は最後に登録したの優先．
      for(k=si-1; k>=0; k--)
        if( sdlDate[k].getDate()  == tmpDate.getDate()  &&
            sdlDate[k].getMonth() == tmpDate.getMonth() &&
            sdlDate[k].getYear()  == tmpDate.getYear() &&
            sdlSel[k] != ""
          )
          break;
      //セル色設定
//      if( tmpDate.getDate()  == toDate.getDate()  &&
//          tmpDate.getMonth() == toDate.getMonth() )
//                        docubuf += ">"; // TODAY     + を削除
//                        //別に１年前の今日に色付けてもいいか
//      else if( k >= 0 ) docubuf += ">";// sdlSel[k] + を削除
//      else if(j==0)     docubuf += ">";
//      else if(j==6)     docubuf += ">";
//      else              docubuf += ">";


//テキストファイルに変更
	  var p_fin_color = "";
	  var global_str_body = "";

	  if(url_flg){

		  if(hdn_csvVal != ""){
			  for(ii=0;ii<global_arr_week.length;ii++){
				  if(global_arr_week[ii] == j){
					  p_fin_color = "style=\"background-color: " + global_arr_color[ii] + "\">";
					  global_str_body += global_arr_body[ii] + "<br />";
				  }
			  }
			  if(p_fin_color == ""){
				  docubuf += ">" + (tmpDate.getMonth() + 1) + "月" + tmpDate.getDate() + "日" + "</p>";
			  }else{
				  docubuf += p_fin_color + (tmpDate.getMonth() + 1) + "月" + tmpDate.getDate() + "日" + "</p>";
			  }
		  }else{
			    docubuf += ">" + (tmpDate.getMonth() + 1) + "月" + tmpDate.getDate() + "日" + "</p>";
		  }
	  }
      //日付表示
      //年初めは年から表示
	  var div_flg = true;
	  var str_divColor = "";
      //スケジュール埋め込み．複数あったら全部．登録順．
      for(k=0; k<si; k++){
        if( sdlDate[k].getDate()  == tmpDate.getDate()
            && sdlDate[k].getMonth() == tmpDate.getMonth()
            && sdlDate[k].getYear()  == tmpDate.getYear()
          ){
			  global_str_body += sdlName[k] + "<br />";
			  str_divColor = sdlSel[k];
		  }
      }

	  if(url_flg){
	      docubuf += "<div " + str_divColor +">" + global_str_body + "</div>";
	  }else{
		  if(global_str_body != ""){
			  docubuf += " onmouseout=\"hidetrail()\" onmouseover=\"showtrail(0,0,'【" + (tmpDate.getMonth() + 1) + "月" + tmpDate.getDate() + "日】<br />" + global_str_body.replace(/(\n|\r)+/g, "<br />") + "')\" style=\"color: #9b0010;\">" + tmpDate.getDate() + "</p>";
		  }else{
			  docubuf += ">" + tmpDate.getDate() + "</p>";
		  }
	  }

	  global_str_body = "";

      //日を進める
      tmpDate = moveDate( tmpDate, 1 );
      
      docubuf += "<\/td>";
    }
    docubuf += "<\/tr>";
  }
  docubuf += "<\/table>";
  document.getElementById("divSdlCal").innerHTML = docubuf;

}


