Echo = Class.create();
Echo.prototype = {
	initialize:		function() {
						this.update();
					},
	
	update:			function() {
						this._initDisplay();
						this._startRequest();
					},
	
	_initDisplay:	function() {
						var obj = $('echo');
						if(obj) {
							// 掃除
							while(obj.hasChildNodes()) {
								obj.removeChild(obj.lastChild);
							}
							
							// 事実上のルート
							div_elem1 = obj.appendChild(document.createElement('div'));
							div_elem1.setAttribute('id', 'echo_');
							
							// 見出し
							h_elem = div_elem1.appendChild(document.createElement('h2'));
							h_elem.appendChild(document.createTextNode('mixi voice'));
							
							// 見出し以外
							div_elem2 = div_elem1.appendChild(document.createElement('div'));
							div_elem2.setAttribute('id', 'echo_body');
							
							// 読み込み中
							p_elem = div_elem2.appendChild(document.createElement('p'));
							p_elem.setAttribute('class', 'echo_loading');
							img_elem = p_elem.appendChild(document.createElement('img'));
							img_elem.setAttribute('src', '/web20/loading.gif');
							img_elem.setAttribute('width', '16');
							img_elem.setAttribute('height', '16');
							img_elem.setAttribute('alt', 'loading...');
							img_elem.setAttribute('title', '');
						}
					},
	
	_startRequest:	function() {
						var now = new Date();
						var uri = '/document/webmaster/mixi/echo/echo.xml';
						uri += '?';
						uri += now.getTime();
						var ajax = new Ajax.Request(uri,
													{
														method:		'get',
														onComplete:	this._onComplete,
														onFailure:	this._onFailure
													}
												   );
					},
	
	_onFailure:		function(req) {
						// 失敗したら echo の中身をすべて消す
						var obj = $('echo');
						if(obj) {
							while(obj.hasChildNodes()) {
								obj.removeChild(obj.lastChild);
							}
						}
					},
	
	_onComplete:	function(httpobj) {
						var domdoc = httpobj.responseXML;
						if(!domdoc) {
							this._onFailure();
							return;
						}
						var echoes = domdoc.getElementsByTagName('echo');
						var count = 0;
						var ul = document.createElement('ul');
						ul.setAttribute('class', 'echo_data');
						var now = new Date();
						for(var i = 0;
							i < echoes.length && count < 5;
							++i)
						{
							var echo = echoes.item(i);
							var time = undefined;
							var body = undefined;
							for(node = echo.firstChild; node; node = node.nextSibling) {
								if(node.nodeType == 1 &&
								   node.firstChild &&
								   node.firstChild.nodeType == 3)
								{
									var textContent = node.firstChild.nodeValue;
									if(node.nodeName == 'post_time') {
										var t = parseInt(textContent, 10) * 1000;
										if(t) {
											time = new Date();
											time.setTime(t);
										}
									} else if(node.nodeName == 'body') {
										body = textContent;
									}
								}
							}
							
							if(time && body) {
								if(now - time <= 3 * 86400 * 1000) {
									++count;
									var li = ul.appendChild(document.createElement('li'));
									var elem = li.appendChild(document.createElement('p'));
									elem.setAttribute('class', 'echo_data_text');
									elem.appendChild(document.createTextNode(body));
									
									var elem2 = li.appendChild(document.createElement('div'));
									elem2.setAttribute('class', 'echo_data_date');
									elem2.setAttribute('style', 'text-align: right; font-size: 0.8em;');
									elem2.appendChild(document.createTextNode(
										("0" + time.getMonth()).substr(-2, 2) +
										'/' +
										("0" + time.getDate()).substr(-2, 2) +
										' ' +
										("0" + time.getHours()).substr(-2, 2) +
										':' +
										("0" + time.getMinutes()).substr(-2, 2)
									));
								}
							}
						}
						var body = $('echo_body');
						while(body.hasChildNodes()) {
							body.removeChild(body.lastChild);
						}
						if(count > 0) {
							body.appendChild(ul);
						} else {
							var p = body.appendChild(document.createElement('p'));
							p.appendChild(document.createTextNode('最近のボイスがありません'));
						}
					}
};

function echoHelp_GetTextContent(node) {
	if(typeof node.textContent != "undefined") {
		return node.textContent;
	} else {
		return node.innerText;
	}
}

var myEcho = undefined;

function initEcho() {
	if(!myEcho) {
		myEcho = new Echo();
	}
}

Event.observe(window, 'load', initEcho, false);
