//// 俱乐部相关函数////
//俱乐部等级converting
function club_level_convert(level) {
	level = Number(level);
	switch ( level ) {
	case 1:
	case 2:
	case 3:
	case 5:
		level += 10;
		break;
	case 8:
		level = 6;
		break;
	case 9:
		level = 1;
		break;
	}
	return level;
}
//登录俱乐部
function club_add(club_id) {
	if( club_id != "" )
		msgSend("mforum register @"+club_id);
}
//改变俱乐部等级(添加特定帐号or 提升等级)
function club_level_add(club_id, user_list, level, msg) {
	try
	{
		if( user_list.length < 2 || level == "" || club_id == "" )
			return;
		level = club_level_convert(level);
		var msg_header = "mforum access @"+club_id+" add ",arr_user_list = "", start_len = calbyte(msg_header);
		for(var i = 1; i < user_list.length ; i++ ) {
			arr_user_list += "," + id_convert(user_list[i]);
			if ( start_len + calbyte(arr_user_list) + 10 > BUFFERLEN ) {
				msgSend(msg_header+arr_user_list.substring(1)+" "+level);
				arr_user_list = "";
			}
		}
		if ( arr_user_list != "" )
			msgSend(msg_header+arr_user_list.substring(1)+" "+level);
	}
	catch (x)
	{
	}
}
//改变俱乐部等级 (更新特定等级)
function club_level_update(club_id, level, level2, msg) {
	if( level != "" && level2 != "" && club_id != "" ) 
		msgSend("mforum access @"+club_id+" update "+level+" "+level2); //+" "+msg);
}
//删除俱乐部等级 (删除特定等级)
function club_level_del(club_id, level, msg) {
	if( level != "" && club_id != "" )
		msgSend("mforum access @"+club_id+" del "+level); //+" "+msg);
}
//删除俱乐部等级 (删除特定帐号
function club_id_del(club_id, user_list, msg) {
	try
	{
		if( user_list.length < 2 ||  club_id == "" )
			return;
		var msg_header = "mforum access @"+club_id+" del ",arr_user_list = "", start_len = calbyte(msg_header);
		for(var i = 1; i < user_list.length ; i++ ) {
			arr_user_list += "," + id_convert(user_list[i]);
			if ( start_len + calbyte(arr_user_list) + 10 > BUFFERLEN ) {
				msgSend(msg_header+arr_user_list.substring(1));
				arr_user_list = "";
			}
		}
		if ( arr_user_list != "" ) 
			msgSend(msg_header+arr_user_list.substring(1));
	}
	catch (x)
	{
	}
}
//删除俱乐部等级 (自己会退出俱乐部)
function club_self_del(club_id, msg) {
	if( club_id != "" )
		msgSend("mforum access @"+club_id+" del * "+msg);
}
//删除俱乐部
function club_drop(club_id) {
	if( club_id != "" )
		msgSend("mforum drop @"+club_id);
}
//更改俱乐部管理员
function club_change_manager(club_id, id, msg) {
	id = id_convert(id);
	if( club_id != "" && id != "" )
		msgSend("mforum founder @"+club_id+" "+id); //+" "+msg);
}
//发送俱乐部留言
function club_memo(club_id, level, msg) {
	if( club_id != "" && level != "" && msg != "") 
		msgSend("mforum memo @"+club_id+" "+level+" "+"001 "+trim_str(msg));
}
//接收俱乐部连接者数
function msgForum(id, page_num, page_size, targetFrame, type) {
	if( id != "" ) {
		initUserList(targetFrame, BF_LIST_FORUM);
		//alert("forum f="+id+",n="+page_num+",p="+page_size+(type ? ",t=0" : "" ));
		msgSend("forum f="+id+",n="+page_num+",p="+page_size+(type ? ",t=0" : "" ));
	}
}
//生成俱乐部连接者列表
function msgForumList(r_msg) {
	if ( typeof(forum_user_list) == "undefined") 
		return;
	var i, n = forum_user_list.length, parv = parse_msg(r_msg);
	for (i=0; i<parv.length;i++) 
		forum_user_list[n++] = new new_user(parv[i]);
}

///// 俱乐部相关函数 End /////

// 形象信息更改函数
function avatar_changed(char_info) {
	if ( typeof(User) == "object" ) {
		User.user_char = char_info;
		User.user_char2 = makeSplitArr(number_convert(User.user_char),"|");
	}
	msgSend("realname L="+char_info);
}
function avatar_s_changed(lay_num,char_info) {
	if(!connected) return;
	var l_num = Number(lay_num)
	if ( !isNaN(l_num) ) {
		User.user_char = User.user_char.substring(0, l_num * 2)+char_info+User.user_char.substring((l_num+1) * 2)
		User.user_char2 = makeSplitArr(number_convert(User.user_char),"|");
	}
	msgSend("REALNAME l"+lay_num+"="+char_info);
}

//初始化搜索用户
function msgWho_init(targetWindow,sear_opt) {
	initUserList(targetWindow, BF_LIST_WHO);
	msgSend("WHO "+sear_opt);
}
// 取推荐聊天对象 & 好友列表
function getRecommendList(targetWindow,sear_opt) {
	initUserList(targetWindow, BF_LIST_MUSIC | BF_LIST_FRIEND | BF_LIST_WHO);
	msgSend("SWHO "+sear_opt);
}
function getCharChatRecommendList(targetWindow, sear_opt, targUserId) {
	if ( targUserId && (targUserId = id_convert(targUserId)) != "" ) {
		pushUserLocWin(targUserId, targetWindow);
		targUserId = " "+targUserId;
	}
	else
		targUserId = "";
	initUserList(targetWindow, BF_LIST_FRIEND | BF_LIST_WHO);
	msgSend("CWHO "+sear_opt+targUserId);
}
///// 好友列表相关 /////
// 取好友目录函数
function getFriendList(targWin, type) {
	var cmd = "watch ", f_type, bFlag = BF_LIST_FRIEND;
	switch ( type ) {
	case 0:
		bFlag |= BF_LIST_MUSIC;
		f_type = "j";
		break;
	case 1:
		f_type = "L";
		break;
	case 2:
		f_type = "F";
		break;
	case 3:
		f_type = "";
		cmd = "silence";
		break;
	case 4:
		f_type = "I";
		break;
	default :
		f_type = "l";
		break;
	}
	initUserList(targWin, bFlag);
	msgSend(cmd+f_type);
}
// 添加 & 删除好友
function sendBlackOrFriendList(prefixSend, strUseridlist, prefixChar) {
	var arrList, user_id, i, listMsg;
	if ( connected == 0 || prefixSend == "" || ( prefixChar != "+" && prefixChar != "-" ))
		return;
	arrList = makeSplitArr(strUseridlist,",");
	for (i=0, listMsg=""; i<arrList.length; i++) {
		if ( (user_id = id_convert(arrList[i])) == "" )
			continue;
		else if ( calbyte(":"+get_user_id()+" "+prefixSend+listMsg+user_id) > BUFFERLEN ) {
			msgSend(prefixSend+listMsg);
			listMsg = "";
		}
		else if ( listMsg != "" )
			listMsg+=",";
		listMsg+=prefixChar+user_id;
	}
	if ( listMsg != "" )
		msgSend(prefixSend+listMsg);
}
function add_or_del_friends(strUseridlist, mode) {
	sendBlackOrFriendList("WATCH ",strUseridlist, mode);
}
function add_or_del_silences(strUseridlist, mode) {
	sendBlackOrFriendList("SILENCE ",strUseridlist, mode);
}
function add_or_del_friend(userid,mode) {
	add_or_del_friends(makeUserId(userid), mode);
}
// 添加 & 删除黑名单
function add_or_del_silence(userid,mode) {
	add_or_del_silences(makeUserId(userid), mode);
}
///// 好友列表相关 End /////

///// 聊天室相关  		/////
//取房间列表
function msgList( targetWindow, option) {
	initUserList(targetWindow, BF_LIST_CHANNEL);
	msgSend("LIST "+option);
}
//取Cast 房间列表
function msgClist( targetWindow, option) {
	if ( typeof(cate_list) == "object" )
		delete cate_list;
	cate_list = new init_category(targetWindow,2);	
	initUserList(targetWindow, BF_LIST_FRIEND | BF_LIST_MUSIC | BF_LIST_CHANNEL);
	msgSend("CLIST "+option);
}
function nToBr(strText) {
	return strText.replace(/\n/g,"<br>");
}
function disableTag(strText) {
	return strText.replace(/</g,"&lt").replace(/>/g,"&gt");
}

//生成房间 Object
function channels(chaninfo) {
	var parv = parse_msg(chaninfo), name = parv[0], temp;
	this.m_cate=name.substring(2,3);
	this.s_cate=name.substring(3,4);
	this.name=name.substring(4);
	name = makeSplitArr(parv[1],".");
	this.color=name[0];
	this.key=name[1];
	this.mode=Number(name[2]);
	this.addr = ( parv[2] == "*" ? "" : parv[2] );
	temp = makeSplitArr(parv[3],"/");
	this.num=temp[0];
	this.max_num= (temp[1]==0 ? "无限制": temp[1]);
	temp = makeSplitArr(parv[4],"/");
	this.sex_proportion=temp[0]+":"+temp[1];
	this.forum = ( parv[5].length < 2 ? "" : parv[5].substring(1) );
	this.topic=disableTag( parv.length > 6 ? parv[6] : "" );
	this.user_list = new Array();
}
//建立房间
function create_room(targetFrame,option) {
	if ( typeof(targetFrame) == "undefined" )
		return;
	Chan_temp_Frame = targetFrame;
	msgSend("CREATE "+option);
}
//加入房间
function join_channel(chat_Frame, channel, chan_key) {
	if ( typeof(chatWin[channel]) == "object" && chatWin[channel].joined ) {
		chat_Frame.alert("已加入中的聊天室.");
		chat_Frame.history.back();
		return;
	}
	var targObj = makeChanObj(channel);
	targObj.main_frame = chat_Frame;
	msgSend("JOIN "+channel + ( chan_key != "" ? " "+chan_key : "" ));
}
//退出房间
function part_channel(channel) {
	if ( channel != "" )
		msgSend("part "+channel);	
}
//显示右下方的用户信息
function show_user_info(channel,user_id) {
	var targObj, targFrame;
	if ( typeof(targObj = GetRoomObjbyChannel(channel)) != "object" || typeof(targObj.user[user_id]) != "object")
			return;
	else if ( IsChatName(channel) ) 
		targFrame = targObj.user_frame;
	else if ( IsDateName(channel) ) 
		targFrame = targObj.main_frame;
	else
		return;
	if ( typeof(targFrame) != "object" || targFrame.closed )
		return;
	targFrame.click_tab(targObj.user[user_id]);
}
function set_silence(channel, user_id, type) {
	if ( typeof(chatWin[channel]) == "object" && typeof(chatWin[channel].user[user_id]) == "object" ) 
		chatWin[channel].user[user_id].silenced = type;
}

// 查找最近加入的用户
function get_lastuser(channel) {
	var last_user = chatWin[channel].last_user, chat_obj = chatWin[channel].user;
	
	if ( typeof(chat_obj[last_user]) == "object" )
		return chat_obj[last_user];
	else {
		for ( user_id in chat_obj )
			if ( user_id != get_user_id() )
				return chat_obj[user_id];
	}
	return "";
}
//初始化房主菜单
function init_oper_menu(channel,targetWindow) {
	if ( typeof(chatWin[channel]) == "object" )
		targetWindow.reset_oper_menu(chatWin[channel]);
	else {
		targetWindow.alert("错误的聊天室. 窗口会自动关闭.");
		targetWindow.close();
	}
}
//初始化聊天室
function makeChatFrame(channel,targetFrame) {
	var targObj = makeChanObj(channel);
	if ( typeof(targetFrame) == "object" )
		targObj.main_frame = targetFrame;
}
//初始化聊天输入框
function init_send_Frame(channel,send_frame) {
	return;
}
//初始化加入者列表
function init_nicklist_Frame(channel,targetFrame, profile_msg) {
	var targObj = makeChanObj(channel);
	targObj.char_frame = targObj.user_frame= targetFrame;
	User.profile_msg = profile_msg;
	if ( targObj.joined ) 
		ex_nicklist_frame(channel);
}
function ex_nicklist_frame(channel) {
	try {
		updateUserMax(channel);
		chatWin[channel].user_frame.showlist(chatWin[channel].listq);
		if ( IsFunction(chatWin[channel].user_frame.init_CJ) )
			chatWin[channel].user_frame.init_CJ(chatWin[channel].cj);
		if ( chatWin[channel].music_addr != "" )
			update_music_url(channel);
		update_club_bbs(channel);
	}
	catch (x) {
		ErrorDebug(x);
	}
}
function update_club_bbs(channel) {
	try {
		if ( IsCastName(channel) && typeof(chatWin[channel].user_frame) == "object" ) {
			chatWin[channel].user_frame.update_club_bbs(chatWin[channel].club,chatWin[channel].bbs);
		}
	}
	catch (x){
		ErrorDebug(x);
	}
}
//初始化Topic Frame
function init_topic_Frame(channel,targetFrame) {
	var targObj = makeChanObj(channel);
	targObj.topic_frame = targetFrame;
	if ( targObj.joined ) 
		ex_topic_frame(channel);
}
function showFavorMusicBtn(channel) {
	try {
		var type, user_id;
		if ( typeof(chatWin[channel].cj) != "object" )
			type = 0;
		else if ( chatWin[channel].cj.user_id != get_user_id() ) {
			type = 1;
			user_id = chatWin[channel].cj.user_id;
		}
		else
			type = 2;
		chatWin[channel].topic_frame.showFavorMusicBtn(type, user_id);
	}
	catch (x){
		ErrorDebug(x);
	}
}
function show_oper_btn(channel) {
	try {
		var type;
		if ( chatWin[channel].user[get_user_id()].oper == 1 ) 
			type = 1;
		else if ( chatWin[channel].reserved )
			type = 2;
		else
			type = 0;
		chatWin[channel].topic_frame.showOperBtn(type);
	}
	catch (x){
		ErrorDebug(x);
	}
}
function ex_topic_frame(channel) {
	try {
		chatWin[channel].topic_frame.updateTopic(chatWin[channel].topic);
		show_oper_btn(channel);
		showFavorMusicBtn(channel);
		update_chan_key(channel);
	}
	catch (x){
		ErrorDebug(x);
	}
}
//房间名的公布
function msgTopic(channel,topic) {
	var targObj = makeChanObj(channel);
	targObj.topic = topic;
	try {
		if ( typeof(targObj.topic_frame) == "object" ) 
			targObj.topic_frame.updateTopic(topic);
	}
	catch (x){
		ErrorDebug(x);
	}
}
//初始化聊天消息框
function init_msg_Frame(channel,msg_frame) {
	var targObj = makeChanObj(channel);
	targObj.msg_frame = msg_frame;
	if ( targObj.joined ) 
		ex_msg_Frame(channel);
}
//开始聊天
function ex_msg_Frame(channel) {
	try
	{
		var targ_obj = GetRoomObjbyChannel(channel), i , msgq_obj, arr_msgq;
		if ( typeof(targ_obj) != "object" || typeof(targ_obj.msg_frame) != "object" ) 
			return;
		else if ( typeof((arr_msgq = targ_obj.msgq)) == "object" ) {
			for ( i = 0; i < arr_msgq.length ; i++ ) 
				if ( typeof((msgq_obj = targ_obj.msgq[i])) == "object" )
					display_msg(targ_obj, msgq_obj.type, msgq_obj.msg, msgq_obj.must_end , msgq_obj.who);
			delete targ_obj.msgq;
		}
		if ( IsChatName(channel) )
			targ_obj.msg_frame.init_tolist(targ_obj.user);
	}
	catch (x)
	{
	}
}
//初始化右下方的我的信息
function initMyinfo(channel,targetFrame, profile_msg) {
	return;
}
// 生成加入者列表
function make_nicklist(channel,list_msg){
	try
	{
		var parv, i, user_obj;
		if ( typeof(targObj = GetRoomObjbyChannel(channel)) != "object" )
			return;
		for(i=0, parv = trimNsplit(list_msg);i<parv.length;i++)
			addChanUser(channel, new new_user(parv[i]));
	}
	catch (x)
	{
	}
}
function push_listq(channel,real_id){
	var targObj;
	if ( typeof(targObj = GetRoomObjbyChannel(channel)) != "object" || real_id == "" ) 
		return;
	rem_listq(channel,real_id);
	targObj.listq[targObj.listq.length] = targObj.user[real_id];
	if ( IsChatName(channel) && real_id != get_user_id() ) 
		targObj.last_user = real_id;

}
function rem_listq(channel,real_id){
	var targObj, listq_len, i, curUserId, prevUserId;
	if ( typeof(targObj = GetRoomObjbyChannel(channel)) != "object" || real_id == "" || !real_id ) 
		return;
	for(i = 0, listq_len = targObj.listq.length, prevUserId = ""; i < listq_len ; i++ ) {
		if ( typeof(targObj.listq[i]) != "object" || (curUserId = targObj.listq[i].user_id) == "" )
			continue;
		else if ( curUserId == real_id ) {
			if ( IsChatName(channel) && curUserId == real_id ) 
				targObj.last_user = prevUserId;
			targObj.listq[i] = "";
			return;
		}
		prevUserId = curUserId;
	}
}
function setChanCj( channel, cjUser ) {
	var targObj, ret = false;
	if ( IsCastName(channel) && ISObject(targObj = GetRoomObjbyChannel(channel)) ) {
		ret = ( typeof(targObj.cj) != "object" || targObj.cj.user_id != cjUser.user_id );
		cjUser.cj = false;
		targObj.cj = cjUser;
	}
	return ret;
}
function addChanUser(channel, anUser) {
	if ( typeof(targObj = GetRoomObjbyChannel(channel)) != "object" || typeof(anUser) != "object" ) 
		return;
	if ( typeof(targObj.user[anUser.user_id]) != "object" ) 
		targObj.users++;
	if ( IsDateName(channel) && IsObject(targObj.inviteWin[anUser.user_id]) )
		delete targObj.inviteWin[anUser.user_id];
	targObj.can_profile = true;
	targObj.user[anUser.user_id] = anUser;
	push_listq(channel,anUser.user_id);
	if ( anUser.cj )
		setChanCj(channel, anUser);
}
//加入者入场
function join_nick(channel,anUser){
	var targObj, log_msg, targFrame;
	if ( typeof(targObj = GetRoomObjbyChannel(channel)) != "object" || typeof(anUser) != "object" ) 
			return;
	addChanUser(channel, anUser);
	dis_change_msg(channel, msg_type_join, anUser.nick+"("+anUser.user_id+")已加入.");
	if ( IsDateName(channel) ) 
		targFrame = targObj.main_frame;
	else if ( IsChatName(channel) ) {
		if ( typeof(targObj.msg_frame) == "object" ) 
			targObj.msg_frame.add_tolist(anUser);
		targFrame = targObj.user_frame;
	}
	else
		return;
	if ( typeof(targFrame) == "object" && !targFrame.closed ) 
		targFrame.update_user(anUser);
}
//加入者退出
function part_nick(channel, anUser, log_msg){
	var targObj, userFrame;
	if ( typeof(targObj = GetRoomObjbyChannel(channel)) != "object" || typeof(anUser) != "object" || typeof(targObj.user[anUser.user_id]) != "object" )
		return;
	if ( anUser.user_id == get_user_id() ) {
		if ( IsChatName(channel) )
			dis_change_msg(channel, msg_type_part, log_msg, anUser);
		return deleteChanObj(channel);
	}
	if ( IsChatName(channel) ) {
		userFrame=targObj.user_frame;
		if ( typeof(targObj.cj) == "object" && targObj.cj.user_id == anUser.user_id ) {
			targObj.cj = "";
			showFavorMusicBtn(channel);
		}
		if ( typeof(targObj.msg_frame) == "object" ) 
			targObj.msg_frame.delete_tolist(anUser.user_id);
	}
	else if ( IsDateName(channel) ) 
		userFrame=targObj.main_frame;
	dis_change_msg(channel, msg_type_part, log_msg, anUser);
	targObj.users--;
	if ( typeof(userFrame) == "object" && !userFrame.closed )
		userFrame.delete_user(anUser.user_id);
	rem_listq(channel,anUser.user_id);
	delete targObj.user[anUser.user_id];	
}
//更新UserMax
function updateUserMax(channel) {
	try
	{
		if ( typeof(chatWin[channel].user_frame) == "object" ) 
			chatWin[channel].user_frame.setUserMax(chatWin[channel].usermax);
	}
	catch (x)
	{
	}
}
//更新密码
function update_chan_key(channel) {
	try
	{
		chatWin[channel].topic_frame.updateChanKey(chatWin[channel].key);
	}
	catch (x)
	{
	}
}
//更新音乐播放URL
function update_music_url(channel) {
	try
	{
		chatWin[channel].user_frame.update_music_url(chatWin[channel].music_addr)
	}
	catch (x)
	{
	}
}
//发送聊天室消息
function send_message(channel, to, face, mycolor, msg) {
	var targ_obj, send_msg, who;
	if ( typeof(targ_obj = GetRoomObjbyChannel(channel)) != "object" || !flood_cnt_inc() )
		return true;
	//edit by liuxch 2004.05.10
	send_msg="1"+face+mycolor+"//&%rX#$"+msg;
	//send_msg="1"+face+mycolor+msg;
	msgSend("PRIVMSG "+( to ?  id_convert(to)+" :"+channel : channel )+" :"+send_msg);
	who = new Object();
	who.user_id = get_user_id();
	who.nick = User.nick;
	who.user_char2 = get_small_head(User.user_char2);
	who.oper = -1;
	m_privmsg(channel, to, who, openNullChar(send_msg));
}
//公布聊天室消息
function m_privmsg(channel, target, who, msg) {
	var targ_obj, new_who;
	if ( typeof(targ_obj = GetRoomObjbyChannel(channel)) != "object" || typeof(who) != "object" ) 
		return;
	else if ( !IsChatName(channel) || typeof(targ_obj.user[who.user_id]) != "object" );
	else if ( targ_obj.user[who.user_id].silenced )
		return;
	else 
		who.oper = targ_obj.user[who.user_id].oper;
	new_who = new Object(who);
	new_who.bMyId = ( who.user_id == get_user_id() );
	new_who.strTarget = target;
	display_msg(targ_obj, "", msg, new_who.bMyId , new_who);
}
//发送自我介绍
function sendProfile(to, channel) {
	try
	{
		var to, targ_obj = GetRoomObjbyChannel(channel);
		if ( typeof(targ_obj) != "object" || !flood_cnt_inc() ) 
			return;
		else if ( !targ_obj.can_profile ) 
			return targ_obj.main_frame.alert((IsChatName(channel) ? "聊天室里没有新的客人." : "无聊天对象."));
		else if ( IsChatName(channel) && !IsOperator() )
			targ_obj.can_profile = false;
		to = ( to == "" ? channel : id_convert(to) );
		msg = "2" + num_to_cate(USERSTRLCHAR|USERSTRNAME|USERSTRINFO) + User.user_char + User.user_info +" :"+User.profile_msg;	
		msgSend("PRIVMSG "+to+" :"+msg);
		m_profile(channel, targ_obj.user[get_user_id()], msg.substring(1));
	}
	catch (x)
	{
	}
}
//公布聊天室简介
function m_profile(channel, who, msg) {
	var targ_obj, parv, new_who;
	if ( !IsObject(targ_obj = GetRoomObjbyChannel(channel)) || !IsObject(who) || ( IsChatName(channel) && IsObject(targ_obj.user[who.user_id]) && targ_obj.user[who.user_id].silenced ) )
		return;	
	parv = parse_msg(msg);
	new_who = new new_user(who.nick+"!"+who.user_id+"@"+parv[0]);
	display_msg(targ_obj,"", "2"+( parv[1] ? parv[1] : "" ), ( new_who.user_id == get_user_id() ), new_who);
}
function dis_change_msg(channel, type, msg, who) {
	var targ_obj , must_end = false;
	if ( IsObject(targ_obj = GetRoomObjbyChannel(channel)) )
		display_msg(targ_obj, type, msg, false, ( who ? who : false ));
}
function makeMsgQObj(type, msg, must_end, who) {
	this.type = type;
	this.msg = msg;
	this.must_end = must_end;
	this.who = who;
}
function push_msg_queue(targ_obj, type, msg, must_end, who) {
	if ( IsObject(targ_obj) && IsObject(targ_obj.msgq) )
		targ_obj.msgq[targ_obj.msgq.length] = new makeMsgQObj(type, msg, must_end, who);
}
function display_msg(targ_obj, msg_type, msg, must_end, who) {
	var log_msg;
	if ( !IsObject(targ_obj) )
		return;
	if ( !IsObject(targ_obj.msg_frame) )
		return push_msg_queue(targ_obj, msg_type, msg, must_end, who);
	if ( !IsFunction(targ_obj.msg_frame.display_msg)
			|| !(log_msg = targ_obj.msg_frame.display_msg(msg_type, msg, must_end, who))
			|| typeof(targ_obj.log) == "undefined" ) 
		return;
	targ_obj.log[targ_obj.log_index++] = log_msg;
	if ( targ_obj.log_index >= LOGMAX )
		targ_obj.log_index = 0;
}
//改变房间属性更改消息
function msgChanMode(channel,chan_mode,user_id) {
	try
	{
		if ( !IsChatName(channel) )
			return;
		var targObj = makeChanObj(channel), parv = parse_msg(chan_mode), log_msg, c_mode = parv[0], n = 1, i, op_id, op_type;
		for ( i=0;i<c_mode.length;i++ ) {
			switch(c_mode.charAt(i)) {
			case "+" :
			case "-" :
				change = c_mode.charAt(i);
				break;
			case "o" :
				op_id = id_reverse_convert(parv[n]);
				if ( typeof(targObj.user[op_id]) == "undefined" )
					continue;
				else if ( change == "+" && targObj.user[op_id].oper == 0 ) 
					op_type = 1;
				else if ( change == "-" && targObj.user[op_id].oper == 1 ) 
					op_type = 0;
				else 
					op_type = -1;
				if ( op_type != -1 ){
					targObj.user[op_id].oper = op_type;
					if ( typeof(targObj.user_frame) == "object" ) {
						push_listq(channel,op_type);
						targObj.user_frame.update_user(targObj.user[op_id]);
					}
					if ( user_id.indexOf(".") != -1 && op_type == 1)
						log_msg = op_id+" 从服务器接收了房主权限.";
					else
						log_msg = user_id+"向"+op_id+"赋予"+( op_type == 1 ? "房主权限." : "夺取房主权限.");
					dis_change_msg(channel, msg_type_set, log_msg);
					if ( op_id == get_user_id() ) 
						show_oper_btn(channel);
				}
				break;
			case "v" :
				if ( change == "-" )
					continue;
				op_id = id_reverse_convert(parv[n++]);
				if ( setChanCj(channel, targObj.user[op_id]) ) {
					log_msg = user_id+"任命"+op_id+"为CJ.";
					dis_change_msg(channel, msg_type_set, log_msg);
					if ( typeof(targObj.user_frame) == "object" ) 
						targObj.user_frame.change_CJ(targObj.cj);
					showFavorMusicBtn(channel);
				}
				break;
			case "k" :
				targObj.key = ( change == "+" ? parv[n]: "" );
				if ( targObj.joined ) {
					if ( typeof(targObj.topic_frame) == "object")
						update_chan_key(channel);
					dis_change_msg(channel, msg_type_set, user_id+ ( targObj.key != "" ? "密码更改为'"+targObj.key+"'." : "解除了非公开设置."));
				}
				n++;
				break;
			case "F" :
				targObj.memberonly = ( change == "+" ? true : false );
				if ( targObj.joined ) 
					dis_change_msg(channel, msg_type_set, user_id+( targObj.memberonly ? " 设置为俱乐部会员专用聊天室.":" 设置为俱乐部 公开聊天室."));
				break;
			case "l" :
				targObj.usermax = ( change == "+" ? parv[n++] : "0" );
				if ( targObj.usermax == "0" || targObj.usermax == "" )
					targObj.usermax = "无限制";
				updateUserMax(channel);
				if ( targObj.joined ) 
					dis_change_msg(channel, msg_type_set, user_id+" 改变最大人数为 "+targObj.usermax+" 名.");
				break;
			case "M":
				if ( change == "+" ) 
					targObj.music_addr = parv[n];
				else
					targObj.music_addr = "";
				if ( targObj.joined ) {
					if ( typeof(targObj.user_frame) == "object")
						update_music_url(channel);
					log_msg = user_id+" 改变音乐播放地址为" + ( targObj.music_addr != "" ? "'"+ targObj.music_addr+"'." : "删除了." );
					dis_change_msg(channel, msg_type_set, log_msg);
				}
				n++;
				break;
			case "P":
				targObj.reserved = ( change == "+" );
				n++;
				break;
			case "B":
				var club = "", bbs = "", log_msg = "";
				if ( change != "+" );
				else if ( parv[n].indexOf("_") == -1 )
					club = parv[n];
				else {
					bbs = makeSplitArr(parv[n],"_")
					club = bbs[0];
					bbs = ( club != "" ? bbs[1] : "" );
				}
				if ( targObj.joined ) {
					if ( targObj.club != club ) {
						log_msg = user_id+"对音乐俱乐部进行"+( club == "" ? "解除" : ( targObj.club == "" ? "设置" : "更改"))+".";
						dis_change_msg(channel, msg_type_set, log_msg);
					}
					if ( targObj.bbs != bbs ) {
						log_msg = user_id+" 对点歌论坛进行"+( bbs == "" ? "解除" : ( targObj.bbs == "" ? "设置" : "更改"))+".";
						dis_change_msg(channel, msg_type_set, log_msg);
					}
				}
				targObj.club = club;
				targObj.bbs = bbs;
				update_club_bbs(channel);
				n++;
				break;
			case "C":
				targObj.do_ment = ( change == "+" );
				if ( targObj.joined ) 
					dis_change_msg(channel, msg_type_set, user_id+"设置为"+( targObj.do_ment ? "进行讨论" : "不讨论" ) + ".");
				break;
			default :
				break;
			}
		}
	}
	catch (x)
	{
	}
}
function sendInviteMsgCore(headMsg, strIdList, tailMsg) {
	if ( strIdList != "" ) {
		msgSend(headMsg+strIdList+tailMsg);
		return 1;
	}
	return 0;
}
function sendInviteMsg(headMsg, objIdList, tailMsg) {
	var user_id, chkType, strIdList, convUserID, ret = 0;
	if ( (chkType = typeof(objIdList)) == "object" ) {
		for(user_id	in objIdList) {
			convUserID = id_convert(user_id);
			if ( calbyte(headMsg+strIdList+tailMsg+convUserID) > BUFFERLEN ) {
				ret += sendInviteMsgCore(headMsg, strIdList, tailMsg);
				strIdList = "";
			}
			else if ( strIdList != "" )
					strIdList += ","
			strIdList += convUserID;
		}
		ret += sendInviteMsgCore(headMsg, strIdList, tailMsg);
	}
	else if ( chkType == "string" ) 
		ret = sendInviteMsgCore(channel, objIdList, msg);
	return ret;
}
//邀请
function invite_user(targetWindow, channel, user_list, msg) {
	var targObj, user_id, headMsg = "INVITE ", tailMsg = " "+channel+" :"+msg;
	if ( IsAzitName(channel) ) {
		targObj = azitInviteWin[channel] = new make_invite_user(targetWindow,user_list);
		targObj.inviteCnt = sendInviteMsg(headMsg, targObj.output_list, tailMsg);
	}
	else if ( typeof(targObj = GetRoomObjbyChannel(channel)) != "object" ) 
		return 1;
	else if ( IsChatName(channel) && typeof(targObj.invite_obj = new make_invite_user(targetWindow,user_list)) == "object" ) {
		targObj = targObj.invite_obj;
		targObj.inviteCnt = sendInviteMsg(headMsg, targObj.output_list, tailMsg);
	}
	else if ( IsShotName(channel) || IsDateName(channel) || IsFunnyName(channel) ) {
		user_id = id_convert(user_list);
		if ( sendInviteMsgCore(headMsg, user_id, tailMsg) )
			targObj.inviteWin[id_reverse_convert(user_id)] = targetWindow;
	}
	else
		return;
	return 0;
}
//生成邀请Object
function make_invite_user(targetWindow,user_list) {
	try
	{
		var tmp_user_list = makeSplitArr(user_list,","), i;
		this.output_list = new Object();
		for ( i = 0 ; i < tmp_user_list.length ; i++ ) 
			this.output_list[makeUserId(tmp_user_list[i])] = 0;
		this.inviteCnt = 0;
		this.window = targetWindow;
	}
	catch (x)
	{
	}
}

//答应邀请
function invite_ok(targ_Win, m_cate,s_cate,chname, club_id) {
	chkUrlNOpenOrHref("/chat/join_ing.asp?chname="+chname+"&m_cate="+m_cate+"&s_cate="+s_cate+"&mode=join&club_id="+club_id)
}
// 1:1 聊天相关
//初始化1:1 聊天室
function setUserNotify(channel, user_id, strNotify) {
	var dateObj, targObj;
	if ( !ISObject(dateObj = dateWin[channel])
		|| !ISObject(targObj = dateObj.user[user_id]) )
		return;
	targObj.strNotify = strNotify;
	if ( ISObject(targObj = dateObj.main_frame) && !targObj.closed ) 
		targObj.changeNotify(user_id, strNotify);
}
function init_1chat(targWin,chname,profile_msg) {
	var channel = "#100"+chname;
	User.profile_msg =  profile_msg;
	if ( typeof(dateWin[channel]) != "object" || typeof(targWin) != "object" )
		return;
	dateWin[channel].msg_frame = dateWin[channel].main_frame = targWin;
	try {
		targWin.showlist(dateWin[channel].listq, dateWin[channel].oppo_id);
		ex_msg_Frame(channel);
	}
	catch (x){
		ErrorDebug(x);
	}
}
//申请1:1聊天
function send_date(targetWindow, user_id, bg_type, msg) {
	try
	{
		var tmpserId = id_convert(user_id);
		waitDateWin[id_reverse_convert(tmpserId)] = targetWindow;
		msgSend("DATE "+tmpserId+" :"+bg_type+" :"+msg);
	}
	catch (x)
	{
	}
}
//同意1:1聊天
function date_ok(channel, targetWindow, user_id) {
	msgSend("JOIN "+channel);
	makeChanObj(channel, targetWindow, user_id);
}
//拒绝1:1聊天
function nodate(to_id,channel, nodate_msg) {
	msgSend("NODATE "+to_id+" "+channel+" :"+( nodate_msg == "" ? "对不起，现在很忙." : nodate_msg ));
}
//投诉
function init_sheriff(targ_win,channel) {
	try
	{
		var targ_id = targ_win.sheriff.targ_id, watch_id = targ_win.sheriff.watch_id;
		if ( IsChatName(channel) ) {
			if ( typeof(chatWin[channel]) != "object" )
				return;
			var targ_obj = chatWin[channel],targ_id_text = "",len;
			for (user_id in targ_obj.user){
				if(user_id!=get_user_id()){
					len = targ_id.options.length++;
					targ_id.options[len].value=user_id;
					targ_id.options[len].text=user_id;
				}
				targ_id_text += "," + user_id;
			}
			len = targ_id.options.length++;
			targ_id.options[len].value="etc_id";
			targ_id.options[len].text="已离开的会员";
			if ( targ_id_text.charAt(0) == "," )
				targ_id_text = targ_id_text.substring(1);
		}
		else if ( IsDateName(channel) ) {
			if ( typeof(dateWin[channel]) != "object" || typeof(dateWin[channel].oppo_id) != "object" )
				return;
			var targ_obj = dateWin[channel];
			var targ_id_text = targ_obj.my_id.user_id;
			targ_id.length = 1;
			targ_id.options[0].value = targ_obj.oppo_id.user_id;
			targ_id.options[0].text = targ_obj.oppo_id.user_id;
		}
		watch_id.value = targ_id_text;
		var index = targ_obj.log_index, log = targ_obj.log, ret_msg = "";
		if ( typeof(log[index]) != "string" ) 
			index = 0;
		for ( i = index ; typeof(log[i]) == "string";) {
			ret_msg += log[i++]+"\n";
			if ( i >= LOGMAX )
				i = 0;
			if ( i == index )
				break;
		}
		targ_win.sheriff.data.value = ret_msg;
	}
	catch(x)
	{
	}
}
function sendAllchanMSg(msg_type, msg) {
	var i, channel;
	for(i=0;i<arrChatWin.length;i++) 
		for(channel in arrChatWin[i])
			dis_change_msg(channel, msg_type, msg);
}

//防止刷屏系统
function anti_flood() {
	try
	{
		if ( flood_obj.no_send == 1 ) {
			var currentdate = new Date (), temp = currentdate.getTime();	
			if ( temp  < flood_obj.no_send_time ) 
				return;
			flood_obj.no_send = 0;
			flood_obj.no_send_time = 0;
			sendAllchanMSg(msg_type_err, "禁言已解除.")
		}
		flood_obj.cnt = 0;
	}
	catch(x)
	{
	}
}
//检查防止刷屏系统
function flood_cnt_inc() {
	try
	{
		if ( flood_obj.time_id == "" )
			flood_obj.time_id = setInterval("anti_flood()",flood_obj.time);
		if ( flood_obj.no_send == 1 )
			return false;
		else if ( IsOperator() )
			return true;
		else if ( flood_obj.cnt > flood_obj.max_cnt ) {
			flood_obj.no_send = 1;
			var currentdate = new Date ();
			flood_obj.no_send_time = currentdate.getTime() + flood_obj.no_send_val;
			sendAllchanMSg(msg_type_err, "刷屏被禁言"+Math.ceil(flood_obj.no_send_val / 1000)+"秒.")
			return false;
		}
		flood_obj.cnt++
		return true;
	}
	catch(x)
	{
	}
}
///// 种类相关 /////

// 生成种类Object
function init_category_list (room_cnt, user_cnt, male_cnt, female_cnt) {
	this.user_cnt = user_cnt;
	this.room_cnt = room_cnt;
	this.male_cnt = male_cnt;
	this.female_cnt = female_cnt;
}

// 初始化种类
function init_category(targ_win,type) {
	this.targ_win = targ_win;
	this.list = new Array();
	var cate_prefix = "#c", cate_list = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
	var i,j, check = (type == 2);
	for ( i in s_cate_desc ) {
		if ( ( check ^ isNaN(i) ) )
			continue;
		for ( j =1 ; j<s_cate_desc[i].length;j++) 
			this.list[cate_prefix+i+cate_list[j]] = new init_category_list(0,0,0,0);
	}
}
// 取种类信息
function m_category(targ_win, type) {
	if ( typeof(cate_list) == "object" )
		delete cate_list;
	var cate_msg = "CATEGORY";
	cate_list = new init_category(targ_win,type);
	if ( type == 1 || type == 2 ) {
		initUserList(targ_win, BF_LIST_FRIEND);
		cate_msg += ( type == 1 ? " l" : " j" );
	}
	msgSend(cate_msg);
}

///// 纸条相关 			/////
//生成纸条信息
function debugAlert(name,value){
	alert("Debug "+name+"="+value);
}
function get_memo(memo_msg) {
	var pos, code = 999, cash = 0;
	var pos = memo_msg.indexOf(" ");
	if ( (pos = memo_msg.indexOf(" ")) != -1 ) {
		code = memo_msg.substring(0,pos);
		memo_msg = memo_msg.substring(pos+1);
		switch ( code ) {
		case "001":
		case "011":
		case "012":
			if ( (pos = memo_msg.indexOf(" ")) != -1 ) {
				cash = memo_msg.substring(0,pos);
				memo_msg = memo_msg.substring(pos+1);
			}
			break;
		}
	}
	this.code = code;
	this.cash = cash;
	this.text = nToBr(disableTag(memo_msg));
}
//发送纸条
function memo_send_do( to_id, memomsg) {
	to_id = id_convert(to_id);
	if ( to_id != "" ) {
		memomsg="memo send "+to_id+" "+memomsg;
		msgSend(memomsg);
	}
	return false;	
}
//初始化纸条窗口
function init_memo_frame(msg_type, user_id, msg, win) {
	if ( (user_id = id_convert(user_id)) == "" )
		return;
	else if ( typeof(memo_ret_msg) == "undefined" )
		memo_ret_msg = new Array();
	memo_ret_msg[id_reverse_convert(user_id)] = win;
	msgSend("memo send "+user_id+" "+msg_type+" "+msg);
}
//设置公告
function set_memo_option(check_option) {
	setDontMsgAlert(check_option);
	var msg = "REALNAME m="+check_option;
	msgSend(msg);
}
//初始化我的纸条
function init_memo_image(param_memo_image) {
	memo_image = param_memo_image;
	if ( typeof(memo_init_msg) != "string" )
		memo_init_msg = "";
	if ( memo_init_msg != "" ) {
		swap_memo_image("1",memo_init_msg);
		memo_init_msg = "";
	}
	return getDontMsgAlert();
}
//改变纸条图
function swap_memo_image(type,desc) {
	memo_image.src= "http://image2.sina.com.cn/igame/ava_image/web/3C/ComnBtm/d.btn5" + ( type == "1" ? "_1" : "" ) +".gif";
	memo_image.alt= ( type == "1" ? desc : "" );
}
//初始化纸条列表
function init_memo_list(targetWin) {
	try
	{
		if ( typeof(targetWin) == "object" ) {
			initUserList(targetWin, BF_LIST_MEMO);
			msgSend("MEMO LIST");
		}
	}
	catch (x)
	{
	}
}
//生成纸条列表
function rpl_memo_list(memo_msg) {
	try
	{
		if ( typeof(array_memo_list) == "undefined" )
			return;
		i = array_memo_list.length;
		array_memo_list[i] = new make_memo_list(memo_msg);
	}
	catch (x)
	{
	}
}
//生成纸条列表Object
function make_memo_list(memo_msg) {
	var parv = parse_msg(memo_msg);
	this.time = pretty_time(parv[0]);
	this.who = ( parv[1] == "*" ? "新浪游戏世界管理员" : id_reverse_convert(parv[1]) );
	this.msg = new get_memo(parv[2]);
}
///// Etc 函数 /////

// nic 更改函数
function ChangeNick(newNick) {
	msgSend("NICK "+newNick);
}
//取自己的帐号
function get_user_id() {
	return ( typeof(connected) == "undefined" || connected != 1 || typeof(User) != "object" ? "" : User.user_id );
}
function kill_id(id) {
	msgSend("Kill "+id);
}
// 取特定Frame地址
function getFrameUrl(targFrame) {
	return ( typeof(targFrame) != "object" || typeof(targFrame.location.pathname) == "unknown" ? "unknown" : targFrame.location.pathname );
}
function openHrefWin(type, nextUrl, paraObj, w, h) {
	var targWin, targFunc, formObj, prop, html;
	switch(type) {
	case 1: // 固定大小
		targFunc = openWin
		break;
	case 2: // 滚动条
		targFunc = openScrollWin
		break;
	case 3: // 流动大小
		targFunc = open_Win
		break;
	default:
		return;
	}
	targWin = targFunc("about:blank", w, h);
	try {
		targWin.document.open();
		targWin.document.charset = "gb2312";
		targWin.document.writeln("<HTML><HEAD></HEAD><BODY></BODY><HTML>");
		formObj = targWin.document.createElement("FORM")
		targWin.document.body.appendChild(formObj);
		formObj.action = nextUrl;
		formObj.method = "GET";
		for(prop in paraObj) 
			formObj.appendChild(targWin.document.createElement("<INPUT NAME="+prop+" TYPE=hidden>")).value = paraObj[prop];
		formObj.submit();
	}
	catch(x) {
		ErrorDebug(x);
	}
	return targWin;
}
// 打开窗口 ( 基本选项 ) 
function baseOpenWin(url, w, h, paraOption) {
	return window.open(url,"","width="+w+",height="+h+",top="+((screen.height-h)/2)+",left="+((screen.width-w)/2)+","+paraOption);
}
// 打开窗口 ( 固定大小 )
function openWin(url,w,h){
	return baseOpenWin(url, w, h, "resizable=no,scrollbars=no");
}
// 打开窗口 (滚动条)
function openScrollWin(url,w,h){
	return baseOpenWin(url, w, h, "resizable=no,scrollbars=yes");
}
// 打开窗口2 ( 流动大小 )
function J_openWin(url){
	return window.open(url,"","resizable=yes,scrollbars=yes");
}
// 打开窗口3 ( 流动大小 )
function open_Win(url,w,h){
	return baseOpenWin(url, w, h, "resizable=yes,scrollbars=no");
}
function chkUrlNOpenOrHref(target_url) {
	var mainFrame = self.top.main
	if ( typeof(target_url) != "string" )
		return;
	else if ( stricmp(getFrameUrl(mainFrame) , "/chat/chat.asp" ) != 0) 
		mainFrame.location.href = target_url;
	else 
		mainFrame = J_openWin(target_url);
	mainFrame.focus();
}
//取用户信息的位置
function pushUserLocWin(targ_id, targWin) {
	winUserLog[targ_id] = targWin;
}
function getUserLoc(user_id,targWin) {
	if ( connected == 1 ) {
		pushUserLocWin((targ_id = id_convert(user_id)), targWin);
		msgSend("USERPOS "+targ_id);
	}
	else 
		targWin.showposition("无法预知");
}
//新浪游戏世界照相馆相关
function makeShotRommObj(main_frame) {
	this.main_frame = main_frame;
	this.msg_frame = main_frame;
	this.log = new Array(LOGMAX);
	this.inviteWin = new Object();
}
function makeFunnyRommObj(main_frame) {
	this.main_frame = main_frame;
	this.msg_frame = main_frame;
	this.log = new Array(LOGMAX);
	this.inviteWin = new Object();
}
function initShotRoom(targWin, para) {
	if ( typeof(targWin) == "object" && para != "" ) {
		shotWinTempObj = targWin;
		msgSend("SHOT "+para);
	}
}
function joinShotRoom(targWin, channel) {
	if ( typeof(targWin) == "object" && channel != "" ) {
		makeChanObj(channel,targWin);
		msgSend("JOIN "+channel);
	}
}
function sortShotList(channel, list_msg) {
	try {
		var parv, targObj, i, user_id;
		if ( typeof(targObj = shotWin[channel]) != "object" ) 
			return;
		for(parv = trimNsplit(list_msg), i=0;i<parv.length;i++) {
			user_id = get_userid(parv[i]);
			targObj.main_frame.makeShotUser(user_id);
			if ( parv[i].charAt(0) == "@" )
				targObj.main_frame.setOwner(user_id);
		}
	}
	catch (x){
		ErrorDebug(x);
	}
}
function sortFunnyList(channel, list_msg) {
	try {
		var parv, targObj, i;
		if ( typeof(targObj = funnyWin[channel]) != "object" ) 
			return;
		for(parv = trimNsplit(list_msg), i=0;i<parv.length;i++) 
			targObj.main_frame.makeFunnyUser(new new_user(parv[i]));
	}
	catch (x){
		ErrorDebug(x);
	}
}
function sortAzitList(channel, list_msg) {
	var parv, targObj, i;
	if ( typeof(targObj = azitWin[channel]) != "object" ) 
		return;
	for(parv = trimNsplit(list_msg), i=0;i<parv.length;i++) 
		targObj.msg_frame.fnMakeUser(new new_user(parv[i]));
}
function moveAzitUser(channel, user_id, xpos, ypos, bLeft, status) {
	var targObj;
	if ( !(targObj = GetRoomObjbyChannel(channel)) )
		return;
	targObj.msg_frame.fnUserMoveAvata(user_id, xpos, ypos, bLeft, status);
}
function statusAzitUser(channel, parv) {
	var targObj, i, user_id, arrInfo;
	if ( !(targObj = GetRoomObjbyChannel(channel)) )
		return;
	for(i=0;i<parv.length;i++) {
		if ( parv[i].indexOf("|") == -1 || (arrInfo = parv[i].split("|")).length != 2 )
			continue;
		targObj.msg_frame.fnChangeAvataStatus(arrInfo[0], arrInfo[1], true);
	}
}

function sendShotOk(channel, code) {
	if ( channel == "" || !channel || !code )
		return;
	msgSend("SHOTOK "+channel+" "+code);
	deleteChanObj(channel);
}
function sendFunnyOk(channel, code) {
	if ( channel == "" || !channel || !code )
		return;
	msgSend("FUNNYOK "+channel+" "+code);
	deleteChanObj(channel);
}
function joinFunnyRoom(targWin, channel) {
	if ( typeof(targWin) == "object" && channel != "" ) {
		makeChanObj(channel,targWin);
		msgSend("JOIN "+channel);
	}
}
function initFunnyRoom(targWin, para) {
	if ( typeof(targWin) == "object" && para != "" ) {
		funnyWinTempObj = targWin;
		msgSend("FUNNY "+para);
	}
}
//音乐播放收藏夹
function favorMusicDel(user_id) {
	if ( (user_id = id_convert(user_id)) != "" )
		msgSend("MUSIC -"+user_id);
}
function favorMusicAdd(user_id) {
	if ( (user_id = id_convert(user_id)) != "" )
		msgSend("MUSIC +"+user_id);
}
function initUserList(targWin, bType) {
	if ( bType & BF_LIST_FRIEND ) {
		targ_friends = targWin;
		friends_list = new Array();
	}
	if ( bType & BF_LIST_MUSIC ) {
		targ_music = targWin;
		music_list = new Array();
	}
	if ( bType & BF_LIST_FORUM ) {
		msgForum_target = targWin;
		forum_user_list = new Array();
	}
	if ( bType & BF_LIST_CHANNEL ) {
		msgList_target = targWin;
		channel_List = new Array();
	}
	if ( bType & BF_LIST_MEMO ) {
		memo_list_target = targWin;
		array_memo_list = new Array();
	}
	if ( bType & BF_LIST_WHO ) {
		target_who = targWin;
		who_list = new Array();
	}
}
function getFavorMusicList(targWin, type, strOption) {
	var f_type;
	initUserList(targWin, BF_LIST_MUSIC)
	switch ( type ) {
	case 2:
		f_type = "F";
		if ( strOption )
			f_type += " "+strOption;
		break;
	default :
		f_type = "l";
		break;
	}
	msgSend("MUSIC "+f_type);
}
function getForumCnt(targWin) {
	objForumCnt = new Object();
	objForumCnt.targWin = targWin;
	objForumCnt.list = new Object();
	msgSend("FORUM l");
}
// Agit相关
function openAzitWin() {
	return;
}
function makeAzitWin(msg_frame) {
	this.msg_frame = msg_frame;
	this.main_frame = msg_frame;
}
function JoinAzitWin(channel, targWin) {
	// 已加入中
	var targObj = makeChanObj(channel, targWin);
	azitWaitWin[channel] = targWin;
	msgSend("JOIN "+channel);
	return get_user_id();
}
function WaitAzitWin(channel) {
	deleteChanObj(channel);
	msgSend("WAITAZIT "+channel);
}
function PartAzitWin(channel) {
	deleteChanObj(channel);
	delete azitWaitWin[channel];
	msgSend("PART "+channel);
}
function initAzitShotRoom(targWin, channel, nSetCode) {
	if ( channel ) {
		makeChanObj(channel, targWin);
		msgSend("JOIN "+channel);
	}
	else if ( typeof(nSetCode) == "number" ) {
		aShotWinTempObj = targWin;
		msgSend("ASHOT "+nSetCode);
	}
	else
		return false;
	return get_user_id();
}
function getFriendCnt(targWin) {
	watchCntWin=targWin;
	msgSend("WATCHCNT");
}
function sendIsOn(targWin, strUserList) {
	if ( !strUserList )
		return;
	msgIsOnWin=targWin;
	msgSend("ISON"+strUserList);
}