var site_index_url = 'http://dobon.net';
var tips_index_dir = '/vb/dotnet/';
var script_url = site_index_url + '/cgi-bin/pc/pc.php';
var tb_script_url = site_index_url + '/cgi-bin/pc/tb.php';
var json_dir = site_index_url + '/cgi-bin/pc/vbjson/';

var rate_element, comments_element, trackbacks_element;

/*
if (window.addEventListener)
{
	window.addEventListener("load", startShowComments, false);
}
else if (window.attachEvent)
{
	window.attachEvent("onload", startShowComments);
}
else
{
	window.onload = startShowComments;
}
*/

function startShowComments()
{
	if (typeof(decodeURIComponent) == "undefined")
	{
		return;
	}
	
	rate_element = document.getElementById("tips_vote_explanation");
	if (!rate_element) { return; }
	comments_element = document.getElementById("tips_comment_explanation");
	if (!comments_element) { return; }
	trackbacks_element = document.getElementById("tips_tb_explanation");
	if (!trackbacks_element) { return; }
	/*
	rate_element.innerHTML = '[ <a href="javascript:loadComments()">表示する</a> ]';
	comments_element.innerHTML = '[ <a href="javascript:loadComments()">表示する</a> ]';
	trackbacks_element.innerHTML = '[ <a href="javascript:loadComments()">表示する</a> ]';
	*/
	loadComments();
}

//コメントを読み込む
function loadComments()
{
	var pos;
	
	if (location.href.indexOf(site_index_url + tips_index_dir) != 0)
	{
		return;
	}
	//ページのIDを取得
	page_id = location.pathname.substring(tips_index_dir.length);
	/*
	pos = page_id.lastIndexOf("/");
	if (pos < 0) return;
	pos = page_id.lastIndexOf("/", pos - 1);
	if (pos < 0) return;
	*/
	//ページのタイトルを取得
	page_title = document.title;
	pos = page_title.lastIndexOf(": .NET Tips");
	if (pos < 0) return;
	page_title = page_title.substring(0, pos);
	
	json_url = json_dir + page_id.replace("/", "_") + ".json";
	
	var commentUrl = site_index_url + '/cgi-bin/pc/pc.php?mode=v&amp;id=' + page_id.replace("/", "%2F");
	rate_element.innerHTML = '現在読み込み中です。表示されない時は、<a href="' + commentUrl + '#rate">こちら</a>をご覧ください。';
	comments_element.innerHTML = '現在読み込み中です。表示されない時は、<a href="' + commentUrl + '#comments">こちら</a>をご覧ください。';
	trackbacks_element.innerHTML = '現在読み込み中です。表示されない時は、<a href="' + commentUrl + '#trackbacks">こちら</a>をご覧ください。';
	
	makeRequest(json_url);
}

//XMLHttpRequestオブジェクト生成
function makeRequest(url)
{
	var http_request = false;
 
	if (window.XMLHttpRequest)
	{
		http_request = new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		try
		{
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{
			}
		}
	}
 
	if (!http_request)
	{
		return false;
	}
	
	http_request.onreadystatechange = function()
	{
		downloadedContents(http_request);
	};;
	http_request.open('GET', url, true);
	http_request.send(null);
	return true;
}

function downloadedContents(http_request)
{
	var obj = null;
	if (http_request.readyState == 4)
	{
		if (http_request.status == 200)
		{
			var doc = http_request.responseText;
			obj = eval('(' + doc + ')');
		}
	}
	showComments(obj);
}

function showComments(obj)
{
	showPageRate(obj);
	showPageComments(obj);
	showPageTrackback(obj);
}

function showPageRate(obj)
{
	var ret = '';
	
	if (obj)
	{
		ret += '良い / 悪い = ' + obj.votes[1] + ' / ' + obj.votes[0];
		ret += showRateChart(obj.votes);
	}
	else
	{
		ret += '良い / 悪い = 0 / 0';
		var votes = new Array(2);
		votes[0] = 0;
		votes[1] = 0;
		ret += showRateChart(votes);
	}

	rate_element.innerHTML = ret;
}

function showRateChart(votes)
{
	var total = votes[0] + votes[1];
	var goodPercent, badPercent, tooltips;
	if (total == 0)
	{
		goodPercent = 0;
		badPercent = 0;
		tooltips = '(投票された評価がありません)';
	}
	else
	{
		goodPercent = Math.round(votes[1] / total * 100);
		badPercent = 100 - goodPercent;
		tooltips = '良い評価の割合 ' + goodPercent + '% (総投票数 ' + total + ')';
	}
	
	var ret = '';
	ret += '<div style="font-size:8px;height:8px;width:120px;background-color:gray;border-style:solid;border-width:1px;border-color:gray;margin-top:0.5em;" title="' + tooltips + '">';
	ret += '<div style="height:100%;width:' + goodPercent + '%;background-color:blue;float:left;"></div>';
	ret += '<div style="height:100%;width:' + badPercent + '%;background-color:white;float:left;"></div>';
	ret += '</div>';
	
	return ret;
}

function showPageComments(obj)
{
	var title;
	var ret = '';
	if (!obj || !obj.comments || obj.comments.length == 0)
	{
		ret = '（投稿されたコメントがありません。）';
	}
	else
	{
		for (var i in obj.comments)
		{
			var c = obj.comments[i];
			if (c.category == 1)
			{
				title = '.NET Frameworkのバージョンによる違い';
			}
			else if (c.category == 2)
			{
				title = '評価の理由';
			}
			else
			{
				title = '通常のコメント';
			}
			ret += '<div class="user_comment">';
			ret += '<div class="header">';
			ret += '<span class="title">' + title + '</span>';
			ret += ' <span class="author">[ ' + decodeURIComponent(c.author) + ' ]</span>';
			ret += ' <span class="date">' + dateToString(c.time) + '</span>';
			ret += '</div>';
			ret += '<div class="body">' + decodeURIComponent(c.comment) + '</div>';
			ret += '</div>';
			if (i < obj.comments.length - 1)
			{
				ret += '<hr class="user_comment_hr">';
			}
		}
	}

	comments_element.innerHTML = ret;
}

function showPageTrackback(obj)
{
	var ret = '';
	if (!obj || !obj.trackbacks || obj.trackbacks.length == 0)
	{
		ret = '（受信したトラックバックがありません。）';
	}
	else
	{
		for (var i in obj.trackbacks)
		{
			var t = obj.trackbacks[i];
			ret += '<div class="user_comment">';
			ret += '<div class="header">';
			ret += '<span class="title"><a href="' + t.url + ' rel="nofollow">' + decodeURIComponent(t.title) + '</a></span>';
			ret += ' <span class="author">[ ' + decodeURIComponent(t.blog_name) + ' ]</span>';
			ret += ' <span class="date">' + dateToString(t.time) + '</span>';
			ret += '</div>';
			ret += '<div class="body">' + decodeURIComponent(t.excerpt) + '</div>';
			ret += '</div>';
			if (i < obj.trackbacks.length - 1)
			{
				ret += '<hr class="user_comment_hr">';
			}
		}
	}

	trackbacks_element.innerHTML = ret;
}

function unixTimeToDate(unixtime)
{
	var ds = new Array(6);
	var d = new Date();
	d.setTime(unixtime * 1000);
	ds[0] = d.getYear();
	if (ds[0] < 1900) { ds[0] += 1900; }
	ds[1] = d.getMonth() + 1;
	ds[2] = d.getDate();
	ds[3] = d.getHours();
	ds[4] = d.getMinutes();
	ds[5] = d.getSeconds();
	for (var i = 3; i < 6; i++)
	{
		if (ds[i] < 10)
		{
			ds[i] = "0" + ds[i];
		}
	}
	return ds;
}

function dateToString(unixtime)
{
	var ret = '';
	if (!isNaN(unixtime))
	{
		var d = unixTimeToDate(unixtime);
		ret = d[0] + "年" + d[1] + "月" + d[2] + "日 " + d[3] + ":" + d[4] + ":" + d[5];
	}
	return ret;
}
