function msgRpl_001(from, to, msg, parv) {
	irc_start(msg);
}
function msgRpl_271(from, to, msg, parv) {
	msgFriendListReply(msg);
}
function msgRpl_272(from, to, msg, parv) {
	msgEndofFriendList(0);
}
function msgRpl_315(from, to, msg, parv) {
	msgEndOfWho(msg);
}
function msgRpl_303(from, to, msg, parv) {
	msgIsOn(msg);
}
function msgRpl_322(from, to, msg, parv) {
	msgChanListReply(msg);
}
function msgRpl_323(from, to, msg, parv) {
	msgEndOfChanList(msg);
}		
function msgRpl_324(from, to, msg, parv) {
	msgChanMode(parv[0], parv[1], "");
}
function msgRpl_332(from, to, msg, parv) {
	msgTopic(parv[0],parv[1]);
}
function msgRpl_341(from, to, msg, parv) {
	msgInviteUserReply( parv[1], parv[0], 1);
}
function msgRpl_352(from, to, msg, parv) {
	msgWhoReply(msg);
}
function msgRpl_353(from, to, msg, parv) {
	if ( IsChatName(parv[1]) || IsDateName(parv[1]) )
		make_nicklist(parv[1],parv[2]);
	else if ( IsShotName(parv[1]) )
		sortShotList(parv[1],parv[2]);
	else if ( IsFunnyName(parv[1]) )
		sortFunnyList(parv[1],parv[2]);
	else if ( IsAzitName(parv[1]) ) 
		sortAzitList(parv[1], parv[2]);
}
function msgRpl_366(from, to, msg, parv) {
	msgEndOfNames(parv[0]);
}
function msgRpl_401(from, to, msg, parv) {
	msgNosuchUser(id_reverse_convert(parv[0]));
}
function msgRpl_403(from, to, msg, parv) {
	msgErrJoinChan(parv[0], "nochan")
}
function msgRpl_405(from, to, msg, parv) {
	msgErrJoinChan(parv[0], "exeed")
}
function msgRpl_432(from, to, msg, parv) {
	if ( connected == 0 )
		msgSend("NICK ´ëÈ­¸í");
	else
		msgErrNick(parv[0]);
}
function msgRpl_440(from, to, msg, parv) {
	msgServiceServerDown();
}
function msgRpl_442(from, to, msg, parv) {
	deleteChanObj(parv[0]);
}
function msgRpl_443(from, to, msg, parv) {
	msgInviteUserReply( parv[1], parv[0], -3);
}
function msgRpl_471(from, to, msg, parv) {
	msgErrJoinChan(parv[0], "limit")
}
function msgRpl_462(from, to, msg, parv) {
	msgSend("VLOGIN W");
}
function msgRpl_473(from, to, msg, parv) {
	msgErrJoinChan(parv[0], "invite")
}
function msgRpl_474(from, to, msg, parv) {
	msgErrJoinChan(parv[0], "baned")
}
function msgRpl_475(from, to, msg, parv) {
	msgErrJoinChan(parv[0], "key")
}
function msgRpl_477(from, to, msg, parv) {
	msgErrJoinChan(parv[0], "nomember", ( parv[1].charAt(0) == "@" ? parv[1].substring(1) : parv[1]))
}
function msgRpl_600(from, to, msg, parv) {
	return;
}
function msgRpl_602(from, to, msg, parv) {
	msgFriendListReply(msg);
}
function msgRpl_603(from, to, msg, parv) {
	msgForumList(msg);
}
function msgRpl_604(from, to, msg, parv) {
	msgMusicListReply(msg);
}
function msgRpl_605(from, to, msg, parv) {
	msgEndofMusicList(msg);
}
function msgRpl_606(from, to, msg, parv) {
	msgForumListEnd(parv[4],parv[5],parv[6]);
}
function msgRpl_607(from, to, msg, parv) {
	msgEndofFriendList(parv[4]);
}
function msgRpl_608(from, to, msg, parv) {
	msgFriendListCnt(msg);
}
function msgRpl_609(from, to, msg, parv) {
	msgFavorMusicStart(msg);
}
function msgRpl_610(from, to, msg, parv) {
	msgForumCntList(msg);
}
function msgRpl_611(from, to, msg, parv) {
	msgForumCntListEnd();
}
function msgRpl_800(from, to, msg, parv) {
	if ( !ISObject(funnyWin[to]) || funnyWin[to].main_frame.closed )
		return;
	funnyWin[to].main_frame.initFunnyRooomClient(800, parv);
}
function msgRpl_801(from, to, msg, parv) {
	if ( !ISObject(funnyWin[to]) || funnyWin[to].main_frame.closed )
		return;
	funnyWin[to].main_frame.initFunnyRooomClient(801, parv);
}
function msgRpl_802(from, to, msg, parv) {
	if ( !ISObject(funnyWin[to]) || funnyWin[to].main_frame.closed )
		return;
	funnyWin[to].main_frame.initFunnyRooomClient(802, parv);
}
function msgRpl_803(from, to, msg, parv) {
	if ( !ISObject(funnyWin[to]) || funnyWin[to].main_frame.closed )
		return;
	funnyWin[to].main_frame.initFunnyRooomClient(803, parv);
}
function msgRpl_FUNNYSET(from, to, msg, parv) {
	if ( !ISObject(funnyWin[to]) || funnyWin[to].main_frame.closed )
		return;
	funnyWin[to].main_frame.setFunnyRooom(get_userid(from), parv);
}
function msgRpl_900(from, to, msg, parv) {
	return;
}
function msgRpl_901(from, to, msg, parv) {
	msgErrJoinChan(parv[0], "noman")
}
function msgRpl_902(from, to, msg, parv) {
	msgInviteUserReply( parv[1], parv[0], -2);
}
function msgRpl_903(from, to, msg, parv) {
	msgInviteUserReply( parv[1], parv[0], -1);
}
function msgRpl_904(from, to, msg, parv) {
	msgEndofInviteUser(msg);
}
function msgRpl_913(from, to, msg, parv) {
	msgRplNoticeChan(parv[0],parv[1]);
}
function msgRpl_918(from, to, msg, parv) {
	msgRplCategoryList(msg);
}
function msgRpl_919(from, to, msg, parv) {
	msgEndofCategoryList();
}
function msgRpl_920(from, to, msg, parv) {
	msgChanListUsersReply(msg);
}
function msgRpl_921(from, to, msg, parv) {
	msgUserPosition(msg);
}
function msgRpl_922(from, to, msg, parv) {
	setUserNotify(to, parv[0], parv[1]);
}
function msgRpl_941(from, to, msg, parv) {
	if ( azitWaitWin[to] && !azitWaitWin[to].closed )
		azitWaitWin[to].fnUpdateAzitViewUsers(parv);
}
function msgRpl_942(from, to, msg, parv) {
	moveAzitUser(to, parv[0], parv[1], parv[2], parv[3], parv[4]);
}
function msgRpl_943(from, to, msg, parv) {
	initAzitShotUserPosition(to, parv);
}
function msgRpl_944(from, to, msg, parv) {
	initAzitRoomSetCode(to, msg);
}
function msgRpl_MOVEAZIT(from, to, msg, parv) {	
	moveAzitUser(to, get_userid(from), parv[0], parv[1], parv[2]);
}
function msgRpl_SETAZIT(from, to, msg, parv) {	
	statusAzitUser(to, parv);
}
function msgRpl_CREATE(from, to, msg, parv) {
	msgRplCreate(msg);
}
function msgRpl_DATE(from, to, msg, parv) {
	msgRplDate(to, msg, new new_user(from));
}
function msgRpl_ERROR(from, to, msg, parv) {
	msgError(parv);
}
function msgRpl_INVITE(from, to, msg, parv) {
	var from_user = new new_user(from);
	var m_cate = parv[0].charAt(2), s_cate = parv[0].charAt(3), channelName = encode_url_para(parv[0].substring(4));
	var inviteTime = pretty_time(parv[1]);
	var strMsg = encode_url_para(nToBr(disableTag(parv[3])));
	
	from_user.user_id = encode_url_para(from_user.user_id)
	if ( chkOpenMsgWin() )
		return;
	else if ( IsShotName(parv[0]) ) 
		openWin("/member/shot/invited.asp"
			+"?invite_channel="+channelName
			+"&invite_id="+from_user.user_id
			+"&invite_nick="+from_user.nick
			+"&invite_char="+from_user.user_char2
			+"&invite_msg="+strMsg
			+"&invite_time="+inviteTime
			,300,320);
	else if ( IsFunnyName(parv[0]) ) 
		openWin("/shop/cartoon/invited.asp"
			+"?invite_channel="+channelName
			+"&invite_id="+from_user.user_id
			+"&invite_nick="+from_user.nick
			+"&invite_char="+from_user.user_char2
			+"&invite_msg="+strMsg
			+"&invite_time="+inviteTime
			,300,320);
	else if ( IsAzitName(parv[0]) ) {
		openWin("/agit/agitWin/pRoom/invite.asp"
			+"?channel="+channelName
			+"&strCate="+m_cate+s_cate
			+"&fromid="+from_user.user_id
			+"&fromnick="+from_user.nick
			+"&fromchar="+from_user.user_char2
			+"&msg="+strMsg
			+"&time="+inviteTime
			,300,320);
	}
	else if ( IsChatName(parv[0]) ) 
		openWin("/Chat/window/invite.asp"
			+"?invite_chan="+get_position(parv[0])
			+"&invite_channel="+channelName
			+"&invite_m_cate="+m_cate
			+"&invite_s_cate="+s_cate
			+"&invite_id="+from_user.user_id
			+"&invite_nick="+from_user.nick
			+"&invite_char="+from_user.user_char2
			+"&invite_msg="+strMsg
			+"&invite_time="+inviteTime
			+( parv[2].length > 2 ? "&forum="+parv[2].substring(1) : "" )
			,300,320);
	else if ( IsDateName(parv[0]) ) {
		openWin("/Chat/window/recv_date.asp"
			+"?channel="+channelName
			+"&user_id="+from_user.user_id
			+"&userNick="+from_user.nick
			+"&userChar="+from_user.user_char2
			+"&date_time="+inviteTime
			+"&date_msg="+strMsg
			,410,280);
	}
}
function msgRpl_JOIN(from, to, msg, parv) { 
	msgRplJoin(msg, new new_user(from));
}
function msgRpl_KICK(from, to, msg, parv) {
	msgRplKick(to, get_userid(from), id_reverse_convert(parv[0]), parv[1]);
}
function msgRpl_KILL(from, to, msg, parv) {
	msgRplKill(to, msg);
}
function msgRpl_NICK(from, to, msg, parv) {
	msgNickChange(new new_user(from), msg);
}
function msgRpl_MODE(from, to, msg, parv) {
	msgChanMode(to, msg, get_userid(from));
}
function msgRpl_NODATE(from, to, msg, parv) {
	msgNodate(parv[0], new new_user(from), parv[1]);
}
function msgRpl_NOTICE(from, to, msg, parv) {
	if( !stricmp(from,"Memo-Serv") || !stricmp(from,"Error-Serv") || !stricmp(from,"Forum-Serv") )
		msgMemoMsgSelect(msg);
	else if ( from == "Welcome" ) 
		msgWelcomeReplay(parv);
}
function msgRpl_NOTICECHAN(from, to, msg, parv) {
	msgNoticeChanReply(to, new new_user(from), msg);
}
function msgRpl_PART(from, to, msg, parv) {
	msgRplPart(msg, new new_user(from));
}
function msgRpl_PRIVMSG(from, to, msg, parv) {
	msgRplPrivMsg(new new_user(from), to, msg);
}
function msgRpl_QUIT(from, to, msg, parv) {
	msgRplQuit(new new_user(from));
}
function msgRpl_REALNAME(from, to, msg, parv) {
	msgRplRealname(new new_user(from), msg);
}
function msgRpl_SETNOTIFY(from, to, msg, parv) {
	var fromUser = new new_user(from), channel;
	for(channel in dateWin) 
		if ( ISObject(dateWin[channel].user[fromUser.user_id]) )
			setUserNotify(channel, fromUser.user_id, msg);
}
function msgRpl_ASHOT(from, to, msg, parv) {
	msgRplAShot(msg);
}
function msgRpl_ASHOTSET(from, to, msg, parv) {
	msgRplAShotSet(to, get_userid(from), parv);
}
function msgRpl_AROOMSET(from, to, msg, parv) {
	initAzitRoomSetCode(to, msg, true);
}
function msgRpl_ASHOTOK(from, to, msg, parv) {
	msgRplAShotOk(to, msg);
}
function msgRpl_ASHOTPRE(from, to, msg, parv) {
	msgRplAShotPre(to, msg);
}
function msgRpl_SHOT(from, to, msg, parv) {
	msgRplShot(msg);
}
function msgRpl_FUNNY(from, to, msg, parv) {
	msgRplFunny(msg);
}
function msgRpl_SHOTOK(from, to, msg, parv) {
	msgRplShotOk(to, msg);
}
function msgRpl_FUNNYOK(from, to, msg, parv) {
	msgRplFunnyOk(to, msg);
}
function msgRpl_SHOTSET(from, to, msg, parv) {
	msgRplShotSet(to, msg);
}
function msgRpl_TOPIC(from, to, msg, parv) { 
	msgRplTopic(get_userid(from), to, msg);
}

function makeMsgTableObj(func, bConnect, bParse) {
	this.func = func;
	this.bConnect = bConnect;
	this.bParse = bParse;
}
function makeMsgTable(cmd, func, bConnect, bParse) {
	msgTable[cmd] = new makeMsgTableObj(func, bConnect, bParse);
}
var msgTable = new Object();
makeMsgTable("001", msgRpl_001, false, false);
makeMsgTable("271", msgRpl_271, true, false);
makeMsgTable("272", msgRpl_272, true, false);
makeMsgTable("303", msgRpl_303, true, false);
makeMsgTable("315", msgRpl_315, true, false);
makeMsgTable("322", msgRpl_322, true, false);
makeMsgTable("323", msgRpl_323, true, false);
makeMsgTable("324", msgRpl_324, true, true);
makeMsgTable("332", msgRpl_332, true, true);
makeMsgTable("341", msgRpl_341, true, true);
makeMsgTable("352", msgRpl_352, true, false);
makeMsgTable("353", msgRpl_353, true, true);
makeMsgTable("366", msgRpl_366, true, true);
makeMsgTable("401", msgRpl_401, true, true);
makeMsgTable("403", msgRpl_403, true, true);
makeMsgTable("405", msgRpl_405, true, true);
makeMsgTable("432", msgRpl_432, 0, true);
makeMsgTable("440", msgRpl_440, true, true);
makeMsgTable("442", msgRpl_442, true, true);
makeMsgTable("443", msgRpl_443, true, true);
makeMsgTable("462", msgRpl_462, false, false);
makeMsgTable("471", msgRpl_471, true, true);
makeMsgTable("473", msgRpl_473, true, true);
makeMsgTable("474", msgRpl_474, true, true);
makeMsgTable("475", msgRpl_475, true, true);
makeMsgTable("477", msgRpl_477, true, true);
makeMsgTable("600", msgRpl_600, true, false);
makeMsgTable("602", msgRpl_602, true, false);
makeMsgTable("603", msgRpl_603, true, false);
makeMsgTable("604", msgRpl_604, true, false);
makeMsgTable("605", msgRpl_605, true, false);
makeMsgTable("606", msgRpl_606, true, true);
makeMsgTable("607", msgRpl_607, true, true);
makeMsgTable("608", msgRpl_608, true, false);
makeMsgTable("609", msgRpl_609, true, false);
makeMsgTable("610", msgRpl_610, true, false);
makeMsgTable("611", msgRpl_611, true, false);
makeMsgTable("800", msgRpl_800, true, true);
makeMsgTable("801", msgRpl_801, true, true);
makeMsgTable("802", msgRpl_802, true, true);
makeMsgTable("803", msgRpl_803, true, true);
makeMsgTable("900", msgRpl_900, true, false);
makeMsgTable("901", msgRpl_901, true, true);
makeMsgTable("902", msgRpl_902, true, true);
makeMsgTable("903", msgRpl_903, true, true);
makeMsgTable("904", msgRpl_904, true, false);
makeMsgTable("913", msgRpl_913, true, true);
makeMsgTable("918", msgRpl_918, true, false);
makeMsgTable("919", msgRpl_919, true, false);
makeMsgTable("920", msgRpl_920, true, false);
makeMsgTable("921", msgRpl_921, true, false);
makeMsgTable("922", msgRpl_922, true, true);
makeMsgTable("941", msgRpl_941, true, true);
makeMsgTable("942", msgRpl_942, true, true);
makeMsgTable("943", msgRpl_943, true, true);
makeMsgTable("944", msgRpl_944, true, false);
makeMsgTable("950", msgRpl_001, false, false);
makeMsgTable("CREATE", msgRpl_CREATE, true, false);
makeMsgTable("DATE", msgRpl_DATE, true, false);
makeMsgTable("ERROR", msgRpl_ERROR, false, true);
makeMsgTable("INVITE", msgRpl_INVITE, true, true);
makeMsgTable("JOIN", msgRpl_JOIN, true, false);
makeMsgTable("KICK", msgRpl_KICK, true, true);
makeMsgTable("KILL", msgRpl_KILL, true, false);
makeMsgTable("MODE", msgRpl_MODE, true, false);
makeMsgTable("MOVEAZIT", msgRpl_MOVEAZIT, true, true);
makeMsgTable("SETAZIT", msgRpl_SETAZIT, true, true);
makeMsgTable("NICK", msgRpl_NICK, true, false);
makeMsgTable("NODATE", msgRpl_NODATE, true, true);
makeMsgTable("NOTICE", msgRpl_NOTICE, true, true);
makeMsgTable("NOTICECHAN", msgRpl_NOTICECHAN, true, false);
makeMsgTable("PART", msgRpl_PART, true, false);
makeMsgTable("PRIVMSG", msgRpl_PRIVMSG, true, false);
makeMsgTable("QUIT", msgRpl_QUIT, true, false);
makeMsgTable("REALNAME", msgRpl_REALNAME, true, false);
makeMsgTable("SETNOTIFY", msgRpl_SETNOTIFY, true, false);
makeMsgTable("SHOT", msgRpl_SHOT, true, false);
makeMsgTable("ASHOT", msgRpl_ASHOT, true, false);
makeMsgTable("ASHOTSET", msgRpl_ASHOTSET, true, true);
makeMsgTable("ASHOTOK", msgRpl_ASHOTOK, true, false);
makeMsgTable("ASHOTPRE", msgRpl_ASHOTPRE, true, false);
makeMsgTable("AROOMSET", msgRpl_AROOMSET, true, true);
makeMsgTable("FUNNY", msgRpl_FUNNY, true, false);
makeMsgTable("SHOTOK", msgRpl_SHOTOK, true, false);
makeMsgTable("FUNNYOK", msgRpl_FUNNYOK, true, false);
makeMsgTable("SHOTSET", msgRpl_SHOTSET, true, false);
makeMsgTable("FUNNYSET", msgRpl_FUNNYSET, true, true);
makeMsgTable("TOPIC", msgRpl_TOPIC, true, true);

// ¼­¹ö ¸Þ½ÃÁö Ã³¸® ±¸¹®
function select(reply){
	try {
		var parv, msgObj;
		if ( !reply.cmd || !IsObject(msgObj=msgTable[reply.cmd]) || ( typeof(msgObj.bConnect) == "boolean" && msgObj.bConnect ^ ( connected != 0 ) ) )
			return;
		msgObj.func(reply.from, reply.to, reply.msg, ( msgObj.bParse ? parse_msg(reply.msg) : NULLARRAY ));
	}
	catch (x){
		ErrorDebug(x);
	}
}