
var id = Math.random().toString();
var currentName = '◆閲覧者';


function outputResultMessage(message)
{
	var now = new Date();
	var attribute = '';
	if ( message.substr( 0 , 1 ) != 'O' ) attribute = ' class="alert"';
	if ( message.substr( 0 , 1 ) == 'R' ) window.alert( 'エラーが発生しました．ページを再読み込みしてください．' );
	var time = now.getHours() >= 10 ? now.getHours() : '0' + now.getHours();
	time += ':' + ( now.getMinutes() >= 10 ? now.getMinutes() : '0' + now.getMinutes() );
	time += ':' + ( now.getSeconds() >= 10 ? now.getSeconds() : '0' + now.getSeconds() );
	document.getElementById('result').innerHTML = '<li' + attribute + '>' + time + ' ' + message.substr(1) + '</li>' + document.getElementById('result').innerHTML;
}



function createHttpRequest()
{
	if (window.ActiveXObject)
	{
		try
		{
			return new ActiveXObject('Msxml2.XMLHTTP');
		}
		catch (exception1)
		{
			try
			{
				return new ActiveXObject('Microsoft.XMLHTTP');
			}
			catch (exception2)
			{
				return false;
			}
		}
	}
	if ( window.XMLHttpRequest ) return new XMLHttpRequest();
	return false;
}



function login()
{
	outputResultMessage('O入室処理開始');
	var name = document.getElementById('name').value;
	var httpRequest = createHttpRequest();
	httpRequest.open( 'GET' , 'chat.cgi?mode=login&id=' + id + '&name=' + encodeURIComponent(name) , true );
	httpRequest.setRequestHeader('If-Modified-Since', 'Wed, 15 Nov 1995 00:00:00 GMT');
	httpRequest.onreadystatechange = function()
	{
		if ( httpRequest.readyState == 4 )
		{
			if ( httpRequest.status != 200 ) outputResultMessage('S入室処理失敗 - サーバーとの通信に失敗しました');
			else outputResultMessage( httpRequest.responseText );
		}
	}
	httpRequest.send(null);
}



function logout()
{
	outputResultMessage('O退室処理開始');
	var httpRequest = createHttpRequest();
	httpRequest.open( 'GET' , 'chat.cgi?mode=logout&id=' + id , true );
	httpRequest.setRequestHeader('If-Modified-Since', 'Wed, 15 Nov 1995 00:00:00 GMT');
	httpRequest.onreadystatechange = function()
	{
		if ( httpRequest.readyState == 4 )
		{
			if ( httpRequest.status != 200 ) outputResultMessage('S退室処理失敗 - サーバーとの通信に失敗しました');
			else outputResultMessage( httpRequest.responseText );
		}
	}
	httpRequest.send(null);
}



function reload()
{
	outputResultMessage("O更新処理開始");
	var httpRequest = createHttpRequest();
	httpRequest.open( 'GET' , 'chat.cgi?mode=reload&id=' + id , true );
	httpRequest.setRequestHeader('If-Modified-Since', 'Wed, 15 Nov 1995 00:00:00 GMT');
	httpRequest.onreadystatechange = function()
	{
		if ( httpRequest.readyState == 4 )
		{
			if ( httpRequest.status != 200 )
			{
				outputResultMessage('S更新処理失敗 - サーバーとの通信に失敗しました');
				setTimeout( 'reload()' , 10000 );
			}
			else if ( httpRequest.responseText.substr(0,1) == 'D' )
			{
				var data = httpRequest.responseText.split('<>\n');
				data[0] = data[0].substr(1);
				if ( currentName != data[0] )
				{
					if ( data[0] == '◆閲覧者' )
					{
						document.getElementById('console').innerHTML = '<form action="." onsubmit="login(); return false;">名前: <input type="text" name="name" id="name" /><input type="submit" value="入室" /></form>';
					}
					else
					{
						document.getElementById('console').innerHTML = '<form action="." onsubmit="post(); return false;">文章: <input type="text" name="statement" id="statement" /><input type="submit" value="投稿" /><input type="button" onclick="logout(); return false;" value="退室" /><br />あなたは' + data[0] + 'です．</form>';
					}
					currentName = data[0];
				}
				document.getElementById('users').innerHTML = data[1];
				document.getElementById('right').innerHTML = data[2];
				outputResultMessage('O更新処理完了');
				setTimeout( 'reload()' , 1000 );
			}
			else
			{
				outputResultMessage(httpRequest.responseText);
				setTimeout( 'reload()' , 3000 );
			}
		}
	}
	httpRequest.send(null);
}



function post()
{
	outputResultMessage('O投稿処理開始');
	var statement = document.getElementById('statement').value;
	var httpRequest = createHttpRequest();
	httpRequest.open( 'GET' , 'chat.cgi?mode=post&id=' + id + '&statement=' + encodeURIComponent(statement) , true );
	httpRequest.setRequestHeader('If-Modified-Since', 'Wed, 15 Nov 1995 00:00:00 GMT');
	httpRequest.onreadystatechange = function()
	{
		if ( httpRequest.readyState == 4 )
		{
			if ( httpRequest.status != 200 ) outputResultMessage('S投稿処理失敗 - サーバーとの通信に失敗しました');
			else outputResultMessage( httpRequest.responseText );
		}
	}
	document.getElementById('statement').value = '';
	httpRequest.send(null);
}



function disconnect()
{
	outputResultMessage('O切断処理開始');
	var httpRequest = createHttpRequest();
	httpRequest.open( 'GET' , 'chat.cgi?mode=disconnect&id=' + id , true );
	httpRequest.setRequestHeader('If-Modified-Since', 'Wed, 15 Nov 1995 00:00:00 GMT');
	httpRequest.onreadystatechange = function()
	{
		if ( httpRequest.readyState == 4 )
		{
			if ( httpRequest.status != 200 ) outputResultMessage('O切断処理失敗 - サーバーとの通信に失敗しました');
			else outputResultMessage( httpRequest.responseText );
		}
	}
	httpRequest.send(null);
}

