/**
* 読み込むことでBlogの最新記事とTOPICSを指定のオブジェクトへ表示させる
* <code>showTopics()</code>メソッドを提供する．
* {@link http://www.brothercake.com/site/resources/scripts/lojax/ lojax}を使用して
* Mac IE5以降でも動作するように実装したがなぜか文字化けを起こす...
* 
* @link		http://www.brothercake.com/site/resources/scripts/lojax/
* @usage	<pre>
*				<body onload="javascript:showTopics();">
*			</pre>
*			と，bodyタグのonloadイベントハンドラにて呼び出す．
* @author	nao seto (seto@graffiti-web.org)
*/

/**
* windowオブジェクトへのエイリアス．
*
* @param	window
*/
var target = this;

/**
* TOPICSのXMLへのパス．
*
* @param	String
*/
var TOPICS_XML = 'topics.xml';

/**
* HTTP通信を行う XMLHttpRequestオブジェクト．
*/
var xmlHttpRequest;

/**
* TopicsのXMLを読み込み終わったときのイベントハンドラ．
*/
var _onLoadTopicsXML = function () {};

/**
* Topicsの表示が終わったときのイベントハンドラ．
*/
var _onInsertTopics = function () {};


/**
* Topicsをid="topics"要素の子要素としてXMLのまま表示させる．
*/
this.showNews = function() {
	target.xmlHttpRequest = target._createXMLHttpRequest();
	
	if (xmlHttpRequest == null)
		return;
	
	// 各イベントハンドラの割り当て
	this._onLoadTopicsXML = this._insertTopics;
	this._loadTopicsXML();
};

/**
* XMLHttpRequestオブジェクトを作成する．
*
* @return	XMLHttpRequest
*/
this._createXMLHttpRequest = function() {
	try {
		return new XMLHttpRequest();
	}
	catch (e) {
		try {
			return new ActiveXObject('Microsoft.XMLHTTP');
		}
		catch (e) {
			return null;
		}
	}
	
	return null;
};


/**
* TopicsのXMLを読み込みにいく．
*/
this._loadTopicsXML = function() {

	target.xmlHttpRequest.onreadystatechange = function() {
		if (target.xmlHttpRequest.readyState == 4 &&
			/^(200|304)$/.test(target.xmlHttpRequest.status.toString())) {
			target._onLoadTopicsXML(target.xmlHttpRequest.responseText);
		}
	};
	
	target.xmlHttpRequest.open('GET', target.TOPICS_XML, true);
	target.xmlHttpRequest.send(null);

};

/**
* HTMLに新着情報をXMLから書き込む．
*/
this._insertTopics = function(topics) {
	var topicsDiv = document.getElementById('topics');

	topicsDiv.appendChild(document.createTextNode(topics));
};
