// miechat.tv ajaxライブチャットシステム
// copyright(c) 2009 adplan co.ltd./T.Kawashima all right reserved.

var SYSTEM_URL	= '../../livechat/livechat.php';
var MAXLOG			= 100; 
var RECEIVEFLAG	= false;
var lastID			= 0;
var defaultOpt	= '&id=' + id + '&no=' + no + '&md=' + md;
var timerID			= setTimeout('getMessage();',reloadTime);


window.onload = init;

if ( document.cookie=='' ){
	location.href="http://miechat.tv/";
}


function init() {
//	getMessage();
}



// ブラウザに対しチャットログを適用する
function addChatLog(fmt) {
	if ( fmt[0]<0 || !fmt[3] ) return;
	
	var baseUL = document.getElementById("outputList");
	var baseLI = document.createElement('li');
	baseLI.id	= 'jschatlog'+fmt[0];

	// アイコン用領域確保
	iconSPAN = document.createElement('span');
	iconSPAN.setAttribute('className','icon');
	iconSPAN.setAttribute('class','icon');

	var code = fmt[0]+',"'+escape(fmt[3])+'","'+escape(fmt[4])+'"';

	// 店舗アイコン
	if ( md == 's' ){
		if ( fmt[1]=='' ){
			iconSPAN.appendChild(createIconButton('deny','アクセス禁止','denyUser('+code+');'));
			iconSPAN.appendChild(createIconButton('no'	,'発言間隔を延長','waitMessage('+code+');'));
			iconSPAN.appendChild(createIconButton('del'	,'発言を削除','deleteMessage(this,'+code+');'));
		}
		else if ( fmt[1]=='s' ){
			iconSPAN.appendChild(createIcon('deny2',''));	
			iconSPAN.appendChild(createIcon('girl','女の子発言'));
			iconSPAN.appendChild(createIconButton('del'	,'発言を削除','deleteMessage(this,'+code+');'));
		}
		else if ( fmt[1]=='c' ){
			iconSPAN.appendChild(createIcon('deny2',''));	
			iconSPAN.appendChild(createIcon('sys','システムメッセージ'));
			iconSPAN.appendChild(createIconButton('del'	,'発言を削除','deleteMessage(this,'+code+');'));
		}
	}
	// ユーザアイコン
	else{
		if ( fmt[1]=='' ){
			if ( login )	iconSPAN.appendChild(createIconButton('no'	,'悪質ユーザとして通報','informsMessage('+code+');'));
			else					iconSPAN.appendChild(createIcon('guest'	,'ユーザ発言'));
		}
		else if ( fmt[1]=='s' ){
			iconSPAN.appendChild(createIcon('girl','女の子発言'));
		}
		else if ( fmt[1]=='c' ){
			iconSPAN.appendChild(createIcon('sys','システムメッセージ'));
		}
	}

	// メッセージ用領域確保
	msgSPAN = document.createElement('span');
	msgSPAN.setAttribute('className','message');
	msgSPAN.setAttribute('class','message');

	// メッセージスタイルの設定
	tmp = document.createTextNode(fmt[3]+'： '+fmt[4]);
	msgSPAN.style.color = '#' + ((fmt[2]=='')?'000000':fmt[2]);
	if ( fmt[1] != '' ){
		msgSPAN.style.fontWeight = 'bold';
	}

	msgSPAN.appendChild(tmp);

	if ( fmt[1]=='a' )	baseLI.style.background = '#EEEEEE';

	var timeSPAN = document.createElement("span");
	timeSPAN.setAttribute('className','time');
	timeSPAN.setAttribute('class','time');
	tmp = document.createTextNode(fmt[5]);
	timeSPAN.appendChild(tmp);
	msgSPAN.appendChild(timeSPAN);



	// 下線領域生成
	dummyP = document.createElement('p');

	// LI内データ生成
	baseLI.appendChild(iconSPAN);
	baseLI.appendChild(msgSPAN);
	baseLI.appendChild(dummyP);

	// ULの先頭に追加
	baseUL.insertBefore(baseLI, baseUL.firstChild);

	// ログの保存サイズを超えたら一つ開放
	node = baseUL.childNodes;
	num  = node.length;
	if ( num>MAXLOG ){
			baseUL.removeChild( baseUL.lastChild );
	}
}


// 発言の送信
function postMessage( name, color, text ) {
//	var opt = '_action=post' + defaultOpt + '&n='+ name+'&c='+ color+'&m='+ text;	
//	new Ajax.Request(	SYSTEM_URL, {	method: 'post', postBody: opt, onComplete: receiveMessage });
}


// ログの取得
function getMessage() {
	if ( !RECEIVEFLAG ){
		RECEIVEFLAG	= true;
		clearTimeout(timerID);

		var opt = '_action=get'+ defaultOpt + '&mn='+ lastID;
		var URL = SYSTEM_URL+'?'+Math.floor(Math.random()*1000000);
		new Ajax.Request(	URL, {	method: 'post', postBody: opt, onComplete: receiveMessage });
	}
}


// チャットデータ取得
function receiveMessage( httpObj ){
	var data = httpObj.responseText;

//	if ( data ) alert( data );
	var line = data.split("\n");
	var i,tmp;

	if ( line.length<1 ) alert(data);
	for ( i=0; i<line.length; i++ ){
		fmt = line[i].split("\x01");
		if ( (tmp = parseInt(fmt[0]) ) > lastID ){
			lastID = tmp;
		}
   	addChatLog(fmt);
		tmpcnt=0;
	}
	RECEIVEFLAG = false;
	timerID = setTimeout('getMessage();',reloadTime);
}


// アクセス禁止
function denyUser( mn, name, txt ){
	var msg = unescape(name)+"さんをアクセス禁止しても宜しいですか？";
	if ( confirm(msg) ){
		var opt = '_action=deny'+ defaultOpt + '&mn='+ mn;
		new Ajax.Request(	SYSTEM_URL, {	method: 'post', postBody: opt });
	}
}

// 発言削除
function deleteMessage( obj, mn, name, txt ){
	var msg = unescape(name)+"さんの以下の発言を削除しても宜しいですか？\n「"+unescape(txt)+"」";
	if ( confirm(msg) ){
		var opt = '_action=del'+ defaultOpt + '&mn='+ mn;
		new Ajax.Request(	SYSTEM_URL, {	method: 'post', postBody: opt });
		$('jschatlog'+mn).remove();
	}
}

// 発言延長
function waitMessage( mn, name, txt ){
	var msg = unescape(name)+"さんの発言間隔を延長しても宜しいですか？";
	if ( confirm(msg) ){
		var opt = '_action=wait'+ defaultOpt + '&mn='+ mn;
		new Ajax.Request(	SYSTEM_URL, {	method: 'post', postBody: opt });
	}
}

// ユーザー通報
function informsMessage( mn, name, txt ){
	var msg = unescape(name)+"さんの以下の発言を運営局に通報しても宜しいですか？\n※虚偽の通報を行った場合、アクセス禁止の対象になります。\n\n「"+unescape(txt)+"」";
	if ( confirm(msg) ){
		var opt = '_action=bad'+ defaultOpt + '&mn='+ mn;
		new Ajax.Request(	SYSTEM_URL, {	method: 'post', postBody: opt });
	}
}



// アイコンの生成
function createIcon( src, title ){
	var icon = document.createElement('span');
	var img = document.createElement("img");
	img.src 	= "../../livechat/img/icon_"+ src +".gif";
	img.title = title;
	icon.appendChild(img);
	return ( icon );
}

// アイコンボタンの生成
function createIconButton( src, title, func ){
	var icon = document.createElement('a');
	icon.onclick = new Function(func);
	icon.title=title;
	var img = document.createElement("img");
	img.src = "../../livechat/img/icon_"+ src +".gif";
	icon.appendChild(img);
	return (icon);
}



