//siteurl = "http://localhost/son-osaka.jp/";
siteurl = "http://son-osaka.jp/";

// 非同期通信の準備
if (window.ActiveXObject && !window.XMLHttpRequest) {
	window.XMLHttpRequest = function() {
		try {
			return (new ActiveXObject("Msxml2.XMLHTTP"));
		} catch (e) {
		}

		try {

		} catch (e) {
			return (new ActiveXObject("Microsoft.XMLHTTP"))
		}
		return (null);
	}
}

// 初期表示イベント
window.onload = function() {
	var year = null;
	var month = null;
	var params = get_request_param();

	if (params == null) {
		execute();
		return;
	}

	for (var i = 0; i < params.length; i++) {
		if (params[i][0] == 'y') {
			year = parseInt(params[i][1], 10);
		}
		if (params[i][0] == 'm') {
			month = parseInt(params[i][1], 10);;
		}
	}
	if (year == null || month == null) {
		year = null;
		month = null;
	}
	execute(year, month);

}

/**
 * 実行
 */
function execute(year, month) {
	var today = new Date();
	if (year == null || year == '') {
		year = today.getFullYear();
	}
	if (month == null || month == '') {
		month = today.getMonth() + 1;
	}

	get_posts(year, month);
}

/**
 * 記事情報取得
 */
function get_posts(year, month) {
	var posts = null;
	xmlhttp = new XMLHttpRequest();
	var url = siteurl + "calendar/js-index.php?inYear=" + year + "&inMonth=" + month;
	xmlhttp.open('GET', url, true);
	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
			posts = analyze(xmlhttp.responseText);
			make_calendar(year, month, posts);
		}
	}
	xmlhttp.send(null);
	return posts;
}

/**
 * 記事情報解析
 */
function analyze(text) {
	if (text == null || text.lenght <= 0) {
		return null;
	}
	var lines = text.split("\n");
	if (lines.length <= 0) {
		return null;
	}
	var posts = [];
	var postsIndex = 0;
	var values = null;
	for (var i = 0; i < lines.length; i++) {
		if (lines[i] == null || lines[i].length <= 0) {
			continue;
		}
		values = lines[i].split("\t")
		if (values== null || values.length <= 0) {
			continue;
		}
		posts[postsIndex] = { day:values[0], pno:values[1], title:values[2], body:values[3], entry:values[4], last:values[5], status:values[6] };
		postsIndex++;
	}
	return posts;
}

/**
 * カレンダー作成
 */
function make_calendar(year, month, posts) {
	var obj = document.getElementById("cs_calendar");

	var html = "<p class='title'>イベントカレンダー</p>";
	html += "<table class='cs-cal'>";
	html += "<caption>";
	html += "<a href='javascript:void(0)' onclick='execute(" + get_previousmonath_year(year, month) + "," + get_previousmonath_month(month) + ")'>&lt;</a>";
	html += " " + year + "<span>年</span>" + month + "<span>月</span> ";
	html += "<a href='javascript:void(0)' onclick='execute(" + get_nextmonth_year(year, month) + "," + get_nextmonth_month(month) + ")'>&gt;</a>";
	html += "</caption>";
	html += "<tr><th>日</th><th>月</th><th>火</th><th>水</th><th>木</th><th>金</th><th>土</th></tr>";
	var lastday = get_lastday(year, month);
	var wday = 0;
	var i;
	for (i = 1; i <= lastday; i++) {
		if (wday == 0) {
			html += "<tr>";
		}
		html += "<td>";
		if (wday == get_weekday(year, month - 1, i)) {
			var postCount = 0;
			if (posts != null && posts.length > 0) {
				for (var postsIndex = 0; postsIndex < posts.length; postsIndex++) {
					if (posts[postsIndex].day == i) {
						postCount++;
					}
				}
			}
			if (postCount > 0) {
				html += "<a href='" + siteurl + "calendar/?inYear=" + year + "&inMonth=" + month + "&y=" + year + "&m=" + month + "#" + i + "'>" + i + "</a>";
			} else {
				html += i;
			}

		} else {
			i--;
		}
		html += "</td>";
		if (i == lastday) {
			for (; wday < 6; wday++) {
				html += "<td></td>";
			}
		}
		if (wday == 6) {
			html += "</tr>";
			wday = 0;
		} else {
			wday++;
		}
	}

	html += "</table>";


//	html += "";
	obj.innerHTML = html;
}

/**
 * リクエストパラメータを取得
 */
function get_request_param() {
	var req =  window.location.search.replace(/^\?(.*)$/, '$1');
	if (req.length <= 0) {
		return null;
	}
	var parms = req.split('&');
	var temp = null;
	var result = new Array();
	for (var i = 0; i < parms.length; i++) {
		temp = parms[i].split('=');
		if (temp.length == 2) {
			result[i] = new Array(temp[0], temp[1]);
		}
		temp = null;
	}
	if (result.length <= 0) {
		return null;
	}
	return result;
}


// 内部処理 -----------------------------------------------------------------

/**
 * 0～6で曜日を取得
 */
function get_weekday(y, m, d) {
	date = new Date(y, m, d);
	return date.getDay();
}

/**
 * 月末日を取得
 */
function get_lastday(y, m) {
	var last = new Date(get_nextmonth_year(y, m), get_nextmonth_month(m) - 1, 0);
	return last.getDate();
}

/**
 * 次月の年を取得
 */
function get_nextmonth_year(y, m) {
	if (m == 12){
		return y + 1;
	}
	return y;
}

/**
 * 次月の月を取得
 */
function get_nextmonth_month(m) {
	if (m == 12){
		return 1;
	}
	return m + 1;
}

/**
 * 前月の年を取得
 */
function get_previousmonath_year(y, m) {
	if (m == 1){
		return y - 1;
	}
	return y;
}

/**
 * 前月の月を取得
 */
function get_previousmonath_month(m) {
	if (m == 1){
		return 12;
	}
	return m - 1;
}
