// 祝日1：何月の何日か？
var Holidays1 = new Array(1,1, 2,11, 3,21, 4,29, 5,3, 5,4, 5,5, 9,23, 11,3, 11,23, 12,23);
// 祝日2：何月の第何月曜日か？
var Holidays2 = new Array(1,2, 7,3, 9,3, 10,2);

// 現在の年、月、日の取得
var now = new Date();
var thisYear = now.getFullYear();
var thisMonth = now.getMonth() + 1;
var today = now.getDate();

// 表示年月の記憶
var year = thisYear;
var month = thisMonth;

//今日のイベント
var today_com="";

//今日のタイトル
today_title="";

// ブログのディレクトリ
var g_dir="";
//テンプレートディレクトリ
var img_dir="";

var monthdays = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var days = new Array("日", "月", "火", "水", "木", "金", "土");
var monthNames = new Array("January","February","March","April","May","June","July","August","September","October","November","December");

function showCalen(n,dir,t_word,i_dir){
	if(dir)g_dir = dir;
	if(i_dir)img_dir = i_dir;
	month += n;
	if(t_word){
		totay_title = t_word;
	}else{
		totay_title = "";
	}
	var offset = Math.floor((month-1)/12);
	year += offset;
	month = Math.floor((month-1)%12)+1;
	if(month <= 0){month += 12;/*year--;*/}
	var flag = ((year == thisYear) && (month == thisMonth))? 1: 0;

	var date = new Date(year, month-1, 1);
	var startDay = date.getDay();

	var dateMax = monthdays[month - 1];
	if (month == 2 && ((year%4 == 0 && year%100 != 0) || year%400 == 0)) dateMax = 29;

	// 休日配列の初期化
	var holidays = new Array();
	for (var i=0; i<=dateMax; i++) holidays[i] = 0;
	
	//今表示している日付を取得
	var que = document.location.href;
	var que = que.split("?")[1];
	var lightup_date = "";
	if(que){
		var que_ary = que.split("&");
		for(var i=0;i<que_ary.length;i++){
			var item_ary = que_ary[i].split("=");
			if(item_ary[0] == "m"){
				lightup_date = item_ary[1].substr(6,2);
			}
		}
	}

	// 祝日1 の処理
	var firstSunday = (startDay == 0)? 1: 8 - startDay;
	for (i=0; i<Holidays1.length; i+=2) {
		if (Holidays1[i] == month) {
			holidays[Holidays1[i+1]] = 1;
			for (var j=firstSunday; j<dateMax; j+=7)
			if (Holidays1[i+1] == j) holidays[j+1] = 1;  // 振替休日
		}
	}
	// 祝日2 の処理
	var firstMonday = (startDay < 2)? 2 - startDay: 9 - startDay;
	for (i=0; i<Holidays2.length; i+=2)
	if (Holidays2[i] == month) holidays[(Holidays2[i+1] - 1) * 7 + firstMonday] = 1;
    
	var symMon = month;
	if(symMon <= 9)symMon = "0"+symMon;
	var htmlStr = "<div class='calen'>"
	+ "<div id='symbol_month'>" + "<p><img src='" + img_dir + "/images/num" + symMon +".gif' title='"+symMon+"'></p>"
    + "<input type='image' class='bk_month' src='"+img_dir+"/images/btn_bk_month.gif' value='<' onclick='showCalen(-1)'>" 
    + "<div id='month_year'>" + monthNames[month-1] +" : "+ year +"</div>"
    + "<input type='image' class='go_month' src='"+img_dir+"/images/btn_go_month.gif' value='>' onclick='showCalen(1)'></div>";

	var col=0;
	if (startDay > 0) {
		for ( ; col<startDay; col++){}
	}
	
	//休日チェックフラグ(today用)
	var t_flg = false;
	
	//祝日で休み繰り越しフラグ
	var buff_sunday = false;//TODO:月初めに対応できてない
	
	htmlStr += "<div id='cal_date'>";
	for (i=1; i<=dateMax; i++) {
		if (flag == 1 && i == today) {
			if (holidays[i] == 1 || col == 0){ 
				if(i == parseInt(lightup_date)){
					htmlStr += "<span class='today sun lightup'>";
				}else{
					htmlStr += "<span class='today sun'>";
				}
				if(col == 1)buff_sunday = true;
			}else if (col == 1){ 
				if(i == parseInt(lightup_date)){
					htmlStr += "<span class='today mon lightup'>";
				}else{
					htmlStr += "<span class='today mon'>";
				}
				t_flg = true;
				if(buff_sunday == true) buff_sunday = false;
			}else if (col == 6) {
				if(buff_sunday == true){
					if(i == parseInt(lightup_date)){
						htmlStr += "<span class='today mon lightup'>";
					}else{
						htmlStr += "<span class='today mon'>";
					}
					t_flg = true;
					buff_sunday = false; 
				}
				else {
					if(i == parseInt(lightup_date)){
						htmlStr += "<span class='today sat lightup'>";
					}else{
						htmlStr += "<span class='today sat'>";
					}
				}
			}else {
				if(buff_sunday == true){
					if(i == parseInt(lightup_date)){
						htmlStr += "<span class='today mon lightup'>";
					}else{
						htmlStr += "<span class='today mon'>";
					}
					t_flg = true;
					buff_sunday = false;
				}
				else {
					if(i == parseInt(lightup_date)){
						htmlStr += "<span class='today lightup'>";
					}else{
						htmlStr += "<span class='today'>";
					}
				}
			}
		}
		else if (holidays[i] == 1 || col == 0) {
			if(i == parseInt(lightup_date)){
				htmlStr += "<span class='sun lightup'>";
			}else{
				htmlStr += "<span class='sun'>";
			}
			if(col == 1)buff_sunday = true;
    	}else if (col == 1) {
    		if(i == parseInt(lightup_date)){
    			htmlStr += "<span class='mon lightup'>";
    		}else{
    			htmlStr += "<span class='mon'>";
    		}
    		t_flg = true;
    		if(buff_sunday == true) buff_sunday = false;
    	}else if (col == 6) {
    		if(buff_sunday == true){
    			if(i == parseInt(lightup_date)){
    				htmlStr += "<span class='today mon lightup'>";
    			}else{
    				htmlStr += "<span class='today mon'>";
    			}
    			t_flg = true;
    			buff_sunday = false;
    		}else {
    			if(i == parseInt(lightup_date)){
    				htmlStr += "<span class='sat lightup'>";
    			}else{
    				htmlStr += "<span class='sat'>";
    			}
    		}
    	}else {
    		if(buff_sunday == true){
    			if(i == parseInt(lightup_date)){
    				htmlStr += "<span class='today mon lightup'>";
    			}else{
    				htmlStr += "<span class='today mon'>";
    			}
    			t_flg = true;
    			buff_sunday = false;
    		}else {
    			if(i == parseInt(lightup_date)){
    				htmlStr += "<span class='lightup'>";
    			}else{
    				htmlStr += "<span>";
    			}
    		}
    	}
    	
    	//クエリの取得
		var que_ary = new Array();
		if (location.search.length > 1){
			var m_Array = location.search.substr(1).split("&");
			for (var idx in m_Array) {
				var split_que = m_Array[idx].split("=");
				//ページは1ページ目に戻す
				if(split_que[0] == "paged"){
					que_ary[split_que[0]] = "1";
				}else{
					que_ary[split_que[0]] = split_que[1];
				}
			}
		} 
    
    	//リンクの設定
    	var m_num = month;
    	if(month<=9)m_num = "0"+month;
    	var d_num = i;
    	if(i<=9)d_num = "0"+i;
    	//クエリーをurlに復元
    	var que_str = "";
    	que_ary["m"] = String(year)+String(m_num)+String(d_num);
    	for(var prop in que_ary) {
    		que_str += prop+"="+que_ary[prop]+"&";
    	}
    	if(que_str != "")que_str = que_str.substr(0,que_str.length-1);
    	htmlStr += "<a href='"+g_dir+"/?"+que_str+"'>";
    
    	//日付の設定
    	var num = i;
    	if(i<=9)num = "0"+i;
    	if(i<dateMax){num = num + "</a>.</span>"}
    	else{num = num + "</a></span>"};
    	htmlStr += num;
    
    	if (col == 6) { col=0; } else col++;
	}
	htmlStr += "</div></div>";
	//今日の表示
	if(t_flg == true && totay_title == "")
	{
		totay_title = "本日は定休日です";
	}
	
	today_com = totay_title;
	if(year == thisYear && month == thisMonth)
	{
		htmlStr += "<div id='today_obj'>"+
						"<div id='arrow_today'><img src='"+img_dir+"/images/arrow_up.gif'></div>" +
						"<div id='today_com'><img src='"+img_dir+"/images/text_today.gif'><span>" + 
						today_com + "</span></div>" +
					"</div>";
	}
	document.getElementById("lineCalendar").innerHTML = htmlStr;
	
	var spanWid = jQuery('#cal_date span').width() + 7;//7はマージン
	//today = 26;
	if(year == thisYear && month == thisMonth)
	{
		var mov_px = 0;
		jQuery('#today_obj').css("margin-top","5px");
		if(today <= 15){
			
			mov_px = spanWid*(today-1) + 8;
		}else{
			var t_wid = jQuery('#today_com span').width();
			var img_wid = 26;
			mov_px = (spanWid*(today-1)) - (t_wid + img_wid) + (spanWid/2);
			jQuery('#today_obj').width(t_wid + img_wid);
			jQuery('#arrow_today').css("float","right");
			jQuery('#today_com').css("clear","both");
		}
		//jQuery('#today_obj').css("opacity","0.0");
		//var s_id = setInterval(function(){jQuery('#today_obj').animate({marginLeft:(mov_px + "px"),opacity:1},1500,"easeOutQuart");clearInterval(s_id);},300);
		jQuery('#today_obj').css("margin-left",(mov_px + "px"));
	}
}