// ================================
// saycast chatting room javascript
// ================================

// Call from SayR
function document_write(msg)
{
	if (msg.substr(0,5) != "CHAT_")
		return false;
	try {
		chatMsg.recv(msg);
	} catch(e) { /* alert(msg); */ }
}

// Call from chatClient flex
var firstMsgCome = false;
function handleMsg(msg)
{
	if (!firstMsgCome && msg.search("CHAT_PRINT_MSG") != -1)
	{
		$("#firstMsg").hide();
		firstMsgCome = true;
	}
	document_write(msg);
}

// ------------
//  -chatMsg-
// ------------
if ("undefined" == typeof chatMsg)
{
	chatMsg = {
		init : function(domainid,channel,pMsrl,chatidmode) {
			chatMsg.inputBox = $("#inputBox");
			chatMsg.inputMsg = $("#inputMsg");
			chatMsg.chatArea = $("#chatArea");
			chatMsg.chatPlace = $("#chatPlace");
			chatMsg.topicArea = $("#cjAreaTopic");
			chatMsg.maxArea = $("#chatuserMax");
			chatMsg.domainid = domainid;
			chatMsg.channel = channel;
			chatMsg.msrl = pMsrl;			
			chatMsg.useCharacter = true;
			chatMsg.chatidmode = chatidmode;
			chatMsg.setChatidStyle();
			
			chatMsg.myFont = myFont;
			chatMsg.inputMsg.css("ime-mode","active");		
			chatMsg.inputMsg.bind("focus",function(){ chatMsg.isFocus = true; });
			chatMsg.inputMsg.bind("blur",function(){ chatMsg.isFocus = false; });
			
			if (chatMsg.msrl != 0)
			{
				chatMsg.isFocus = false;
				chatMsg.focus();
			}
			else
			{
				chatMsg.inputMsg.val("채팅에 참여하시려면 로그인이 필요합니다.");
				chatMsg.inputMsg.bind("click",loginHandler.showCenter);
				chatMsg.inputMsg.focus(function() { chatMsg.inputMsg.blur(); });
			}
			chatMsg.initHandler();
		},
		initStudioBox : function(channel,chatidmode) 
		{
			chatMsg.inputBox = $(".inputBox");
			chatMsg.inputMsg = $("#inputMsg");
			chatMsg.chatArea = $(".chattingArea");
			chatMsg.topicArea = "";
			chatMsg.maxArea = $("#chatuserCnt");
			chatMsg.channel = channel;
			chatMsg.useCharacter = true;
			chatMsg.chatidmode = chatidmode;
			chatMsg.setChatidStyle();
			chatMsg.myFont = myFont;
			chatMsg.myFont.init();
			chatMsg.initHandler();
		},
		initHandler : function()
		{
			chatMsg.handlers = new Array();
			chatMsg.handlers['CHAT_PRINT_MSG'] = chatMsg.printTmsg;
			chatMsg.handlers['CHAT_SET_USER'] = chatMsg.setTmsg;
			chatMsg.handlers['CHAT_ADD_USER'] = chatMsg.addTmsg;
			chatMsg.handlers['CHAT_SYS_MSG'] = chatMsg.printSysTmsg;
			chatMsg.handlers['CHAT_REMOVE_USER'] = chatMsg.removeTmsg;
			chatMsg.handlers['CHAT_NTOPIC_SET'] = chatMsg.setNtopicTmsg;
			chatMsg.handlers['CHAT_TOPIC_SET'] = chatMsg.setTopicTmsg;
			chatMsg.handlers['CHAT_HANDLE_MSG_KICK'] = chatMsg.kickTmsg;
			chatMsg.handlers['CHAT_SET_USE_CHARACTER'] = chatMsg.useCharTmsg;
			chatMsg.handlers['CHAT_SCROLL'] = chatMsg.scroll;
			chatMsg.handlers['CHAT_HANDLE_EXTEND'] = chatMsg.extendTmsg;
			chatMsg.handlers['CHAT_PRINT_MSG_ME'] = chatMsg.printMeTmsg;
			chatMsg.handlers['CHAT_SET_CHANNELKEY'] = chatMsg.channelKeyTmsg;
			chatMsg.handlers['CHAT_SET_CHANNELINFO_MAX'] = chatMsg.maxTmsg;
			chatMsg.handlers['CHAT_INVITE'] = chatMsg.inviteTmsg;
			
			chatMsg.messages = new Array();
			chatMsg.messages["RPL_JOINUSER"] = "<strong>=s1=</strong>(=s2=) 님께서 입장하셨습니다.";
			chatMsg.messages["RPL_PARTUSER"] = "<strong>=s1=</strong>(=s2=) 님께서 나가셨습니다.";
			chatMsg.messages["RPL_SETANTICHARCHANNEL"] = "<strong>=s1=</strong>(=s2=) 님께서 이 방을 <em><strong>안티 캐릭터 채팅방</strong></em>으로 설정했습니다.";
			chatMsg.messages["RPL_INVITE"] = "<strong>=s1=</strong>님을 초대했습니다.";
			chatMsg.messages["RPL_MAXUSERSET"] = "<strong>=s1=</strong>(=s2=) 님께서 <em>최대 인원을 <strong>=s3=</strong>(으)로 설정하였습니다.</em>";
			chatMsg.messages["RPL_MAXUSERUNSET"] = "<strong>=s1=</strong>(=s2=) 님께서 <em>최대 인원을 없앴습니다.</em>";
			chatMsg.messages["RPL_SETCHARCHANNEL"] = "<strong>=s1=</strong>(=s2=) 님께서 이 방을 <em><strong>캐릭터 채팅방</strong></em>으로 설정했습니다.";
			chatMsg.messages["RPL_CHANGE_NICK"] = "<strong>=s=</strong>(=s=) 님께서 별명을 <em><strong>=s=</strong></em> (으)로 변경하셨습니다.";
			chatMsg.messages["RPL_LEAVE_USER"] = "<strong>=s=</strong>(=s=) 님께서 세이클럽을 떠나셨습니다.";
			chatMsg.messages["RPL_QUIT_USER"] = "<strong>=s=</strong>(=s=) 님께서 세이클럽을 떠나셨습니다.";
			
			chatMsg.messages["ERR_USERONCHANNEL"] = "<strong>%s</strong> 님은 이미 방에 있습니다.";
			chatMsg.messages["ERR_CHANOPRIVSNEEDED"] = "권한이 없습니다.";
			chatMsg.messages["ERR_NOSUCHNICK"] = "<strong>%s</strong> 님이 현재 <em>세이캐스트 사용중이 아닙니다.</em>";
			chatMsg.messages["ERR_CANNOTSENDTOCHAN"] = "이 방에서 발언권이 없습니다.";
			chatMsg.messages["ERR_NOSUCHCHANNEL"] = "<strong>이 방은 없어졌습니다.</strong> <em>[나가기]</em> 버튼을 누르세요.";
			chatMsg.messages["ERR_INVALIDUSERNAME"] = "<strong>별명이 형식에 맞지 않아요.</strong><br />별명은 한글/영어/숫자만 되며, 가장 앞에는 숫자가 올 수 없고,<br /><em>12자(한글6자,영문12자) 이하</em>여야 해요.";
			chatMsg.messages["ERR_USERNAMEINUSE"] = "다른 사용자가 <em>사용중인 별명</em>이에요";
			chatMsg.messages["ERR_USERNAMECOLLISION"] = "다른 사용자가 <em>사용중인 별명</em>이에요";
			chatMsg.messages["ERR_USENAMESAME"] = "현재 사용중인 별명과 같아요.";
			chatMsg.messages["ERR_KEYSET"] = "<strong>비밀번호가 이미 설정되어 있습니다.</strong><br />우선 비밀번호를 없앤 후 바꾸세요.<br /> 비밀번호를 없애려면, <em>/eh</em> 를 참조하세요.";
			chatMsg.messages["ERR_NEEDMOREPARAMS"] = "<strong>명령어 형식이 잘못되었어요.</strong> 도움말 <em>/h</em> 나 <em>/eh</em> 를 참조하세요.";
			chatMsg.messages["ERR_INVALIDTOPIC"] = "미풍양속을 어기는 내용으로 바꿀 수 없습니다.";
			chatMsg.messages["ERR_INVALIDTARGET"] = "세이클럽 아이디는 <em>영문,숫자 12자 이하</em>입니다.";
			chatMsg.messages["ERR_NOUSERNAME"] = "바꿀 별명을 입력하지 않았어요.";
			chatMsg.messages["ERR_TOPICLENGTH"] = "프로그램소개는 <em>=s1=자 이하</em>로 해주세요";
			chatMsg.messages["ERR_INVALIDPASS"] = "비밀번호는 <em>=s1=자 이하</em>로 해주세요.";
			chatMsg.messages["ERR_DICE"] = "<em>2이상의 수</em>를 지정해주세요.";
			chatMsg.messages["ERR_NOCOMMAND"] = "이 방에서는 <em>사용할 수 없는 명령어</em>입니다.";
			chatMsg.messages["ERR_BADURL"] = "<em>음란 URL</em>을 사용하였습니다.";
			chatMsg.messages["ERR_BOMBESCAPE"] = "태그허용서버에 이상이 생겨 <em>태그를 사용할 수 없습니다.</em>";
		},
		// ================ send side ==================
		send : function() {
			var msg = chatMsg.inputMsg.val();
			if (msg.length > 500) return false;  // 임시추가
			if(typeof(fontLayer) != "undefined") fontLayer.reset();
			chatMsg.inputMsg.val("");
			msg = Util.utilTrimStr(msg).replace("cgi-bin","");
			var first = msg.split(" ",2)[0]; 
			
			if (msg.length == 0)
			{
				alert("내용을 입력하세요.");
				return false;
			}
			else if (first=="/h" || first=="/도")
			{
				chatUtil.openHelp("no");
				return false;
			}
			else if (first=="/eh" || first=="/더")
			{
				chatUtil.openHelp("yes");
				return false;
			}
			else if (first=="/e" || first=="/귀")
			{
				var targetMsrl = chatUser.getMsrl(msg.split(" ")[1]);				
				if (targetMsrl)
				{
					var tempMsg = "";
					var tempMsg2 = msg.split(" ");
					for(var i=2;i<tempMsg2.length;i++)
						tempMsg += tempMsg2[i]+" ";
					chatMsg.input(tempMsg,targetMsrl);
				}
				else
				{
					chatMsg.printDefaultSystemMsg(msg.split(" ")[1]+" 님이 스튜디오 안에 없습니다.");
				}
				return false;
			}
			else if (first=="/kick" || first=="/너가" || first=="/못옴" || first=="/영추")
			{
				var targetMsrl = chatUser.getMsrl(msg.split(" ")[1]);				
				if (targetMsrl)
				{
					$.getJSON(_staticUrl+"/ajax/json/saycast/room/checkKickable",{domainid:chatMsg.domainid,target:targetMsrl},function(data){	
						if (data.result)
						{			
							if (first=="/못옴" || first=="/영추")
							{
								chatUser.ban(targetMsrl);
							}
							else
							{
								msg = first+" "+targetMsrl;
								chatMsg.input(msg);
							}
						}
						else
						{
							chatMsg.printDefaultSystemMsg("운영진은 강제퇴장 또는 영구추방을 할 수 없습니다.");
						}
					});					
				}							
				else
				{
					chatMsg.printDefaultSystemMsg(msg.split(" ")[1]+" 님이 스튜디오 안에 없습니다.");
				}
				return false;
			}
			else if (first=="/못옴-")
			{
				$.getJSON(_staticUrl+"/ajax/json/saycast/room/keytoggler/id/"+msg.split(" ")[1], {}, function(data) {
					if (data.result)
					{
						$.getJSON(_staticUrl+"/ajax/json/station/admin/deleteBanish/"+chatMsg.domainid, {msrl:php_serialize(data.result)}, function(data2) {
							if(data2.result) {
								chatMsg.printDefaultSystemMsg(msg.split(" ")[1]+" 님을 영구추방 취소했습니다.");
							}							
						});
					}
				});
				return false;
			}
			else if (first=="/me" || first=="/나" || first=="/ne" || first=="/그" || first=="/최대" || first=="/비밀" || first=="/최대-" || first=="/비밀-" || first=="/i" || first=="/초")
			{
				chatMsg.input(msg);
				return false;
			}
			else if (first=="/주제" || first=="/t")
			{
				var topic = Util.utilTrimStr(msg.split(" ",2)[1],"ltrim").replace(/</g,'&lt;').replace(/>/g,'&gt;');
				if (!topic)
				{
					chatMsg.printDefaultSystemMsg("프로그램소개는 반드시 있어야 합니다.");
					return false;
				}
				if ( $.ajax({url:_staticUrl+"/ajax/html/saycast/room/checkForbidden/?topic="+topic,async:false}).responseText != "normal" )
				{
					chatMsg.printDefaultSystemMsg("미풍양속을 어기는 프로그램소개는 사용하실 수 없습니다.");
					return false;
				}	
				if(!chatUser.isAdmin)
                {
                    chatMsg.printDefaultSystemMsg("주제는 운영진만 변경이 가능합니다.");
                    return false;
                }
				chatMsg.input(msg);
				return true;
			}
			else if (first=="/방청소")
			{
				chatMsg.screenClear();
				return false;
			}
			else if (first=="/별" || first=="/n")
			{
				var nick = Util.utilTrimStr(msg.split(" ",2)[1],"ltrim");
				if(!$n.valid.numengkor(nick))
				{
					chatMsg.printDefaultSystemMsg("별명은 특수문자를 제외한 숫자와 한글6자(영문12자) 이하의 조합으로만 사용할 수 있습니다.");
					return false;
				}
				var url = _staticUrl+"/ajax/json/saycast/room/changeNick/";
				var param = {nick:nick}
				$.getJSON(url,param,function(data) {
					if ( data.result == "forbidden" )
					{
						chatMsg.printDefaultSystemMsg("<em>"+nick+"</em>은(는) 사용하실 수 없는 별명입니다.");					
					}
					else if ( data.result == "toolong" )
					{
						chatMsg.printDefaultSystemMsg("별명은 영문24자,한글12자까지로 제한되어 있습니다.");
					}
					else if ( data.result == "same" )
					{
						chatMsg.printDefaultSystemMsg("동일한 별명을 사용중입니다.");					
					}
					else
					{
						var currNick = chatUser.get(chatMsg.msrl).nick;
						chatMsg.inputClient("CHAT_EXTEND "+chatUser.getMsrlList()+" "+chatUser.echannelCp949+" :CHANGENICK|"+chatMsg.msrl+"|"+currNick+"|"+nick);
					}
				});				
				return false;
			}
			/* URL 미디어 직접 입력기능 일단 제외
			else if (chatMedia.addable() && msg.search("http://") != -1)
			{
				var tempUrl = "http://"+msg.split("http://")[1].split(" ")[0].split("\"")[0].split("'")[0];
				chatMedia.submitUrl(tempUrl);
				return false;
			}
			*/
			
			chatMsg.setEmotion( msg );			
			msg = myFont.encode(msg);						
			chatMsg.input( msg );
			
			return false;			
		},		
		input : function (msg,to)
		{
			msg = msg.replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;");
			var target = chatWhisper.getTarget();
			if(to)
				chatMsg.inputClient("CHAT_MSG "+chatMsg.channel+" :"+escape("/귀 "+to+" "+msg));
			else if(target != "all")
				chatMsg.inputClient("CHAT_MSG "+chatMsg.channel+" :"+escape("/귀 "+target+" "+msg));
			else
				chatMsg.inputClient("CHAT_MSG "+chatMsg.channel+" :"+escape(msg));			
			chatMsg.focus();
		},
		inputClient : function (msg)
		{
			document.getElementById("Gura").input(msg);
		},
		screenClear : function ()
		{
			chatMsg.chatArea.find("ul").remove();
			chatMsg.chatArea.append("<ul id='curdiv0'></ul>");			
			chatMsg.prValueInit();
			chatMsg.setChatidStyle();
		},
		setEmotion : function (msg)
		{
		},
		focus : function ()
		{
			if(chatMsg.isFocus == false)
				chatMsg.inputMsg.focus();
		},
		addPreMsg : function (preMsg)
		{
			var totalMsg = chatMsg.inputMsg.val() + preMsg;
			chatMsg.inputMsg.val(totalMsg);
			chatMsg.focus();
		},
		delPreMsg : function(preMsg)
		{
			var totalMsg = chatMsg.inputMsg.val().replace(preMsg,"");
			chatMsg.inputMsg.val(totalMsg);
			chatMsg.focus();
		},
		// =============== end of send side ===================
		
		// =============== receive side =======================
		recv : function (msg)
		{
			var tmsg = chatMsg.getTmsg(msg);
			chatMsg.handlers[tmsg.command](tmsg);
		},
		getTmsg : function (msg)
		{
			var tmsg = new Object;
			var arrMsg = msg.split(" :");
			var words = arrMsg[0].split(" ");
			for (var i in words)
			{
				if (words[i] == "m_NULL")
					words[i] = "";				
			}			
			if (typeof(arrMsg[1]) != "undefined")
				words[parseInt(i)+1] = arrMsg[1];
			tmsg.command = words[0];
			tmsg.argv = words;			
			return tmsg;
		},
		setTmsg : function (tmsg)
		{
			var msrl = tmsg.argv[1];
			var id = tmsg.argv[2];
			var nick = tmsg.argv[3];
			var chartype = tmsg.argv[4];
			var mood = tmsg.argv[5];
			var type = tmsg.argv[6];
			chatUser.set(msrl,id,nick);
		},
		addTmsg : function (tmsg)
		{
			// chatd로부터 받는 add는 무시한다.
		},
		
		printTmsg : function (tmsg)
		{
			var chartype = tmsg.argv[1];
			var mood = tmsg.argv[2];
			var bgcolor = tmsg.argv[3];
			var fgcolor = tmsg.argv[4];
			var fromID = tmsg.argv[5];
			var fromMsrl = tmsg.argv[6];
			var fromName = tmsg.argv[7];
			var toMsrl = tmsg.argv[8];
			var content = chatMsg.check(tmsg.argv[9]);
			chatMsg.printMsg(chartype,mood,bgcolor,fgcolor,fromID,fromMsrl,fromName,toMsrl,content);
		},
		check : function (content)
		{
			return content;
		},
		printSysTmsg : function (tmsg)
		{
			var code = tmsg.argv[1];
			var flag = tmsg.argv[2];
			var arg1 = tmsg.argv[3];
			var arg2 = tmsg.argv[4];
			var arg3 = tmsg.argv[5];
			
			if((code == "RPL_JOINUSER" || code == "RPL_PARTUSER") && arg2 == 'sayguest') return;
			
			var msg = chatMsg.messages[code];
			if (arg1 != '') msg = msg.replace('=s1=',arg1);
			if (arg2 != '') msg = msg.replace('=s2=',arg2);
			if (arg3 != '') msg = msg.replace('=s3=',arg3);
			chatMsg.printDefaultSystemMsg(msg);
		},
		removeTmsg : function (tmsg)
		{
			var msrl = tmsg.argv[1];
			chatUser.remove(msrl);
			if (msrl == chatMsg.msrl) chatCommon.doExit();
		},
		setNtopicTmsg : function (tmsg)
		{
			var id = tmsg.argv[1];
			var nick = tmsg.argv[2];
			var ntopic = tmsg.argv[3];
			chatNtopic.compare(chatMsg.channel,ntopic);			
		},
		setTopicTmsg : function (tmsg)
		{
			var id = tmsg.argv[1];
			var nick = tmsg.argv[2];
			var topic = tmsg.argv[3];
			if (topic != '' && topic != chatMsg.topicArea.text())
			{
				if (chatMsg.topicArea.find("font").length > 0)
					chatMsg.topicArea.find("font").eq(0).text(topic);
				else
					chatMsg.topicArea.text(topic);
				var msg =  nick.bold()+"("+id+") 님께서 프로그램 소개를 <em><strong>"+topic+"</strong></em>"+" (으)로 설정하였습니다.";
				chatMsg.printDefaultSystemMsg(msg);
			}
		},
		kickTmsg : function (tmsg)
		{
			var nick = tmsg.argv[1];
			var id = tmsg.argv[2];
			var msrl = tmsg.argv[3];
			chatUser.kicked(id,nick,msrl);
		},
		useCharTmsg : function (tmsg)
		{
			if (tmsg.argv[1] == "true")
				chatMsg.useCharacter = true;
			else
				chatMsg.useCharacter = false;
		},
		extendTmsg : function (tmsg)
		{
			var msrl = tmsg.argv[1];
			var nick = tmsg.argv[2];
			var msg = tmsg.argv[3];
			
			var args = msg.split(/\|/);
			if (args[0] == "ENTER")  // 입장 메시지
			{
				if (args[2] != "normal" && args[2] != "member" && args[2] != "newMember")
				{
					var enterMsg = "<div class=\"msg msgInfo\"><img src=\"http://filei.sayclub.kr/rose/common/ic_"+args[2]+".gif\" alt=\""+args[3]+"\"/><span>"+args[1]+"의 <em>"+args[3]+"</em> <strong>"+nick+"</strong> 님이 입장하셨습니다.</span></div>";				 
					chatMsg.printSystemMsg(enterMsg);
				}
				chatUser.add(msrl,args[2],args[4]);
			}
			else if (args[0] == "MEDIA")  // 미디어 메시지
			{
				if (args[1] == "ADD")
				{				
					chatMedia.set(args[2],args[3],args[4],args[5],args[6],args[7]);
			  	chatMedia.add(args[2],args[4],999);
			  	chatMsg.printMediaMsg(args[2],args[8],args[9],args[10],args[11],args[12]);
			  	chatMedia.setTabFlashMode("on");
				}
				else if (args[1] == "DEL")
				{
					chatMedia._del(args[2]);
					chatMsg.deleteMediaMsg(args[2]);
				}
			}
			else if (args[0] == "CHANGENICK")
			{
				var currUser = chatUser.get(args[1]);
				currUser.nick = args[3];
				currUser.row.find("a").eq(0).html(args[3]);
				chatMsg.printDefaultSystemMsg("<strong>"+args[2]+"</strong>님이 <strong>"+args[3]+"</strong>으로 별명을 변경하였습니다.");
				if (chatCj.cjMsrl == args[1])
				{
					chatCj.nickArea.find("a").eq(0).html(args[3]);
				}								
			}
		},
		printMeTmsg : function (tmsg)
		{
			var chartype = tmsg.argv[1];
			var mood = tmsg.argv[2];
			var bgcolor = tmsg.argv[3];
			var fgcolor = tmsg.argv[4];
			var fromid = tmsg.argv[5];
			var frommsrl = tmsg.argv[6];
			var fromname = tmsg.argv[7];
			var tomsrl = tmsg.argv[8];
			var content = tmsg.argv[9];
			chatMsg.printMe(chartype, mood, bgcolor, fgcolor, fromid, frommsrl, fromname, tomsrl, content);
		},
		channelKeyTmsg : function (tmsg)
		{
			if (chatCommon.getLocate() == "main") return false;
			var id = tmsg.argv[1];
			var nick = tmsg.argv[2];
			var chankey = tmsg.argv[3];			
			
			if ('string'==typeof(chankey) && chankey.length)
				chatMsg.printDefaultSystemMsg(nick+"("+id+") 님께서 비밀번호를 "+chankey+" (으)로 설정하였습니다.");
			else
				chatMsg.printDefaultSystemMsg(nick+"("+id+") 님께서 비밀번호를 없앴습니다.");
		},
		maxTmsg : function (tmsg)
		{
			var max = tmsg.argv[1];
			if (max != 0)
				chatMsg.maxArea.text(max);
			else
				chatMsg.maxArea.text("무제한");
		},
		inviteTmsg : function (tmsg)
		{
			var toid = tmsg.argv[1];
			var channel = tmsg.argv[2];
			chatCommon.openInvite(toid);
		},
		// =========== end of receive side ===============
		
		// =========== display side ======================
		printSystemMsg : function (msg,color)
		{
			//if (!color) var colorStr = "";
			//else var colorStr = " style=\"color:"+color+"\"";
			chatMsg.print("<li>"+msg+"</li>");			
		},
		printDefaultSystemMsg : function (msg)
		{
			chatMsg.printSystemMsg("<div class='msg msgDefault'>"+msg+"</div>");
		},
		printMsg : function (chartype, mood, bgcolor, fgcolor, fromID, fromMsrl, fromName, toMsrl, content, contentType)
		{
			if (chatCommon.getLocate() != "main")
			{
				if (isNaN(parseInt(fromMsrl)) || fromMsrl.length==0 || !chatUser.exist(fromMsrl))
					return false;
			}
				
			// avatar part
			if (chatMsg.useCharacter)
			{
				if (chartype == "unknown" || chartype == "robot")
					var icn = chartype+".gif";
				else
					var icn = chartype+"_0"+mood+".gif";
				if (chatMsg.chatidmode == 2)
					var idwidth = 150;
				else
					var idwidth = 85;	
				var avatarPart = "<p class=\"avatar\"><img src='"+ItemHandler.imageRootConverter(icn,"i")+"' alt=\"\" /></p>";				
			}
			else
			{
				var avatarPart = "";
			}
			// name part
			var namePart = fromName;						
			if (chatMsg.chatidmode == 2) 
			{
				namePart += "("+fromID+")";
				var styleName = "nickNameId";
			}
			else
			{
				var styleName = "nickName";
			}
			if (toMsrl)
			{
				if (fromMsrl == chatMsg.msrl)
				{
					var toUser = chatUser.get(toMsrl);
					if (toUser)
						namePart = toUser.nick+"[@]";
				}
				else namePart = "[@]"+namePart;
			}
			if (bgcolor.charAt(0) != "#") bgcolor = "#"+bgcolor;
			namePart = "<p class=\""+styleName+"\" style=\"cursor:hand; color:"+fgcolor+"; background-color:"+bgcolor+";\" onclick=\"chatUser.focus('"+fromMsrl+"');\">"+namePart+"<strong>:</strong></p>";
			// content part
			if (contentType != "html")
			{								
				content = chatMsg.myFont.decode(content);				
				content = chatMsg.fixWrongTag(content);				
			}			
			if (contentType == "html")
				var contentPart = content;
			else if (fromMsrl == chatMsg.msrl)
				var contentPart = "<p class=\"write\" style=\"color:"+bgcolor+";\">"+content+"</p>";
			else
				var contentPart = "<p class=\"write\" style=\"color:"+fgcolor+";\">"+content+"</p>";				
			contentPart += "<span style='display:none;'>"+fromID+"|"+fromMsrl+"|"+fromName+"</span>";  // 임시추가
			
			chatMsg.print("<li>"+avatarPart+namePart+contentPart+"</li>");			
		},		
		printMe : function (chartype, mood, bgcolor, fgcolor, fromid, frommsrl, fromname, tomsrl, content)
		{
			if (!fromid || !frommsrl)
				return false;
				
			var msg = fromname+"("+fromid+") 님께서 ";
			if (tomsrl != '')
			{
				var toname = "";
				if (chatUser.exist(tomsrl))
				{
					toname = chatUser.get(msrl).nick;
				}
				msg += toname+"님께 ";
			}
			msg += chatMsg.fixWrongTag(content);
			chatMsg.printDefaultSystemMsg(msg);			
		},
		fixWrongTag : function(content)
		{
			var innerStr = content.replace(/<B>/g,"").replace(/<I>/g,"").replace(/<U>/g,"");
			if (content.search("<B>") != -1 && content.search("</B>") == -1)
				innerStr = "<B>"+innerStr+"</B>";
			if (content.search("<I>") != -1 && content.search("</I>") == -1)
				innerStr = "<I>"+innerStr+"</I>";
			if (content.search("<U>") != -1 && content.search("</U>") == -1)
				innerStr = "<U>"+innerStr+"</U>";			
			return innerStr;
		},
		
		curDivLineCnt : 0,
		maxLineCnt : 100,
		curDivNum : 0,
		maxDivCnt : 10,
		delDivNum : 0,
		prValueInit : function ()
		{
			chatMsg.curDivLineCnt = 0;
			chatMsg.maxLineCnt = 100;
			chatMsg.curDivNum = 0;
			chatMsg.maxDivCnt = 10;
			chatMsg.delDivNum = 0;
		},
		print : function (msg)
		{
			if (chatMsg.curDivLineCnt > chatMsg.maxLineCnt)
			{
				chatMsg.setNewDiv();
			}
			$("#curdiv"+chatMsg.curDivNum).append(msg);
			chatMsg.curDivLineCnt++;
			
			$("#divbodyEnd").remove();
			chatMsg.chatArea.append("<div id='divbodyEnd'></div>");			
			chatMsg.scroll();
		},
		setNewDiv : function ()
		{
			chatMsg.curDivNum++;
			if (chatMsg.curDivNum > (chatMsg.maxDivCnt-1))
			{
				$("#curdiv"+chatMsg.delDivNum).remove();
				chatMsg.delDivNum++;
			}
			chatMsg.curDivLineCnt = 0;
			chatMsg.chatArea.append("<ul id='curdiv"+chatMsg.curDivNum+"'></ul>");
			chatMsg.setChatidStyle();			
		},
		getCurrdiv : function ()
		{
			return $("#curdiv"+chatMsg.curDivNum);
		},
		setChatidStyle : function ()
		{
			var el = chatMsg.getCurrdiv();
			if (chatMsg.chatidmode == 2)
			{
				el.removeClass("chatAN");
				el.addClass("chatANI");
			}
			else
			{
				el.removeClass("chatANI");
				el.addClass("chatAN");
			}
		},
		scroll : function ()
		{
			if (chatCommon.getLocate() != "main")
			{
				tempHeight = chatMsg.chatArea.height() - ( $("#chatPlace").scrollTop() + ( $(window).height() - 349 ) );
				if (tempHeight >= 0 && tempHeight < 500)
				{
					chatBody = document.getElementById("divbodyEnd");
					chatBody.scrollIntoView(true);
				}
			}
			else
			{
				chatBody = document.getElementById("divbodyEnd");
				chatBody.scrollIntoView(true);
			}
		},
		printMediaMsg : function(mediaSrl,id,nick,chartype,mood,userColor)
		{
			var media = chatMedia.get(mediaSrl);
			var delButton = "";
			if (chatUser.isAdmin || media.wmsrl == chatMsg.msrl)
				delButton = "<li class=\"delete\"><a href=\"\" onclick=\"chatMedia.del("+mediaSrl+"); return false;\">삭제</a></li>";
			if (media.type == "IMAGE")
				var viewStr = "viewPhoto";
			else if (media.type == "VIDEO")
				var viewStr = "viewMoving";
			else
				var viewStr = "viewUrl";
			var mediaHtml = "<div class=\"write\">미디어를 공유합니다. 한 번 보세요~!<br />"
										+"<div id=\"media_"+mediaSrl+"\" class=\"mediaPreView\">"
										+"<p class=\"thumbnail\"><img src=\""+media.thumbnail+"\" alt=\"\" /></p>"
										+"<ul><li class=\""+viewStr+"\"><a href=\"\" onclick=\"chatMedia.view("+mediaSrl+"); return false;\">보기</a></li>"
										+delButton+"</ul></div></div>";							
			chatMsg.printMsg(chartype, mood, "white", userColor, id, media.wmsrl, nick, "", mediaHtml,"html");
		},
		deleteMediaMsg : function(mediaSrl)
		{
			var target = $("#media_"+mediaSrl); 
			target.find("img").eq(0).attr("src","http://filei.sayclub.kr/rose/saycast/station/i_notMedia.gif");
			target.find("ul").eq(0).remove();
			target.append("<p class=\"notice\">삭제 되었습니다.</p>");
		}
		// =========== end of display side ===============
	}
}

// --------------
//  -chatUser-
//---------------
if ("undefined" == typeof chatUser)
{
	chatUser = {
		init : function (domainid,castname,channel,echannel,echannelCp949,msrl,notifyId) 
		{
			chatUser.list = new Array();
			chatUser.idList = new Array();
			chatUser.box = $("#chatuserArea");
			chatUser.adminBox = $("#chatuserAreaAdmin");
			chatUser.memberBox = $("#chatuserAreaMember");
			chatUser.normalBox = $("#chatuserAreaNormal");
			chatUser.adminListenerBox = $("#listenerAreaAdmin");
			chatUser.memberListenerBox = $("#listenerAreaMember");
			chatUser.normalListenerBox = $("#listenerAreaNormal");
			chatUser.cnt = $("#chatuserCnt"); 
			chatUser.listenerCnt = $("#listenerCnt");
			chatUser.chatWrap = $(".chatWrap");
			chatUser.moreInfo = $("#moreInfo");
			chatUser.domainid = domainid;
			chatUser.castname = castname;
			chatUser.channel = channel;
			chatUser.echannel = echannel;
			chatUser.echannelCp949 = echannelCp949;
			chatUser.msrl = msrl;
			chatUser.isAdmin = false;
			chatUser.notifyId = notifyId;
			chatUser.highlighted = '';
			chatUser.timeoutId = '';
			chatUser.getList();
		},
		getList : function ()
		{
			var url = _staticUrl+"/ajax/json/saycast/room/getUserList";
			var param = {"domainid":chatUser.domainid, "channel":chatUser.channel};
			$.getJSON(url,param,function(data) {
					try {
						var list = data.result;
						if (chatUser.msrl != 0)
						{
							var myLevel = list[chatUser.msrl].level;
							var myLevelStr = "일반";
							if (myLevel == "master")
								myLevelStr = "국장";
							else if (myLevel == "cj")
								myLevelStr = "CJ";
							else if (myLevel == "staff")
								myLevelStr = "스탭";
							else if (myLevel == "member")
								myLevelStr = "즐찾멤버";
							else if (myLevel == "newMember")
								myLevelStr = "즐찾멤버";
							var myIsMania = list[chatUser.msrl].isMania;
							if (list[chatUser.msrl].doShowAll == "Y")
								chatUser.isAdmin = true;
							else 
								chatUser.isAdmin = false;
						}
						else
						{
							chatUser.isAdmin = false;
						}						
						for(var i in list)
						{
							chatUser.set(list[i].msrl,list[i].userid,list[i].nick);
							chatUser.list[i].sexStr = list[i].sexStr;
							if (chatUser.msrl != list[i].msrl)
								chatUser.add(list[i].msrl,list[i].level,list[i].isMania);
						}
						chatUser.setCnt();						
						
						if (chatUser.msrl != 0)
							chatMsg.inputClient("CHAT_EXTEND "+chatUser.getMsrlList()+" "+chatUser.echannelCp949+" :ENTER|"+chatUser.castname+"|"+myLevel+"|"+myLevelStr+"|"+myIsMania);
					} catch(e) { alert("참여자 정보 오류"); }
				}
			);
		},
		getListenerList : function()
		{
			chatUser.adminListenerBox.empty();
			chatUser.memberListenerBox.empty();
			chatUser.normalListenerBox.empty();
			var url = _staticUrl+"/ajax/json/saycast/room/getListenerList";
			var param = {"domainid":chatUser.domainid, "channel":chatUser.channel};
			$.getJSON(url,param,function(data){
				var list = data.result.list;
				var cnt = 0;
				for(var i in list)
				{
					cnt++;
					if(chatUser.exist(list[i].msrl)) continue;
					var row = $("<li id=\"listener_"+list[i].msrl+"\"><a href=\"http://profile.sayclub.com/"+list[i].userid+"\" onmouseover=\"chatUser.showListenerLayer('"+list[i].userid+"','"+list[i].sexStr+"',$('#listener_"+list[i].msrl+"'));\" onmouseout=\"chatUser.hideLayer();\" target=\"_blank\" >"+list[i].nick+"</a></li>");
					if(list[i].level == "master")
					{
						row.addClass("master");
						chatUser.adminListenerBox.prepend(row);
					}
					else if(list[i].level == "cj")
					{
						row.addClass("cj");
						chatUser.adminListenerBox.prepend(row);
					}
					else if(list[i].level == "staff")
					{
						row.addClass("staff");
						chatUser.adminListenerBox.prepend(row);
					}
					else
					{
						if(list[i].isMania == "1")
							row.append("<img src=\"http://filei.sayclub.kr/rose/common/ic_mania.gif\" alt=\"매니아\" />");
							
						if(list[i].level == "member")
						{					
							chatUser.memberListenerBox.append(row);
						}
						else if(list[i].level == "newMember")
						{
							row.append("<img src=\"http://filei.sayclub.kr/rose/common/ic_newMember.gif\" alt=\"신규가입자\" />");
							chatUser.memberListenerBox.append(row);
						}
						else // normal
						{					
							chatUser.normalListenerBox.append(row);
						}
					}
				}
				clearTimeout(chatUser.timeoutId);
				chatUser.timeoutId = setTimeout("chatUser.getListenerList();",300000);
				$("#listenerTime").text("("+data.result.currDate+"분기준)");				
			});
		},
		getMsrlList : function ()
		{
			var msrls = "";
			for (var msrl in chatUser.list)
			{
				msrls += ","+msrl;
			} 
			return msrls.substr(1);
		},
		setCnt : function ()
		{
			var i=0;
			for (var key in chatUser.list)
				i++;
			chatUser.cnt.text(i);
		},
		getCnt : function()
		{
			return chatUser.cnt.text();
		},
		setListenerCnt : function(cnt)
		{
			if(!cnt) cnt="0";			
			chatUser.listenerCnt.text(cnt);			
		},
		setCntDirect : function (el,domainid,channel)
		{
			var url = _staticUrl+"/ajax/json/saycast/room/getUserCnt";
			var param = {"domainid":domainid, "channel":channel};
			$.getJSON(url,param,function(data) {
				if (!data.result) data.result = 0;
				el.text(data.result);
			});
		},
		set : function (msrl,id,nick)
		{
			if (!chatUser.exist(msrl))
			{
				var user = new Object();
				user.msrl = msrl;
				user.id = id;
				user.nick = nick;
				user.row = $("<li id=\"chatuser_"+msrl+"\"><a href=\"http://profile.sayclub.com/"+id+"\" onmouseover=\"chatUser.showLayer("+msrl+");\" onmouseout=\"chatUser.hideLayer();\" target=\"_blank\" >"+nick+"</a></li>");
				chatUser.list[msrl] = user;
				chatUser.setCnt();
				
				chatUser.idList[id] = msrl;
			} 
		},
		get : function (msrl)
		{
			if (typeof(chatUser.list[msrl]) != "undefined")
			{
				return chatUser.list[msrl];
			}
			return false;
		},
		getMsrl : function (id)
		{
			if (typeof(chatUser.idList[id]) != "undefined")
			{
				return chatUser.idList[id];
			}
			return false;
		},
		exist : function (msrl)
		{
			if (typeof(chatUser.list[msrl]) != "undefined")
				return true;
			return false;			
		},
		add : function (msrl,level,isMania)
		{
			var user = chatUser.get(msrl);
			if (level == "master")
			{
				user.row.addClass("master");
				chatUser.adminBox.prepend(user.row);
			}
			else if (level == "cj")
			{
				user.row.addClass("cj");
				chatUser.adminBox.prepend(user.row);
			}
			else if (level == "staff")
			{
				user.row.addClass("staff");
				chatUser.adminBox.prepend(user.row);
			}
			else  // member or newMember or normal
			{
				if (chatUser.isAdmin)
					user.row.prepend("<input type=\"checkbox\" class=\"checkbox\" value=\""+msrl+"\" />");
				if (isMania == "1")
					user.row.append("<img src=\"http://filei.sayclub.kr/rose/common/ic_mania.gif\" alt=\"매니아\" />");
					
				if (level == "member")
				{					
					chatUser.memberBox.prepend(user.row);
				}
				else if (level == "newMember")
				{
					user.row.append("<img src=\"http://filei.sayclub.kr/rose/common/ic_newMember.gif\" alt=\"신규가입자\" />");
					chatUser.memberBox.prepend(user.row);
				}
				else // normal
				{					
					chatUser.normalBox.prepend(user.row);
				}
			}			
			// add to whisper box
			chatWhisper.add(msrl,user.nick);			
		},
		remove : function (msrl)
		{
			delete chatUser.idList[chatUser.list[msrl].id];
			delete chatUser.list[msrl];
			$("#chatuser_"+msrl).remove();
			$("#chatuserLayer_"+msrl).remove();
			chatUser.setCnt();
			// remove from whisper box
			chatWhisper.remove(msrl);			
		},
		kicked : function (id,nick,msrl)
		{			
			if (msrl == chatUser.msrl)
			{
				alert("방에서 쫓겨났습니다.");
				chatCommon.doExit();
			}
			var kickedUser = chatUser.get(msrl);
			var kickedName = msrl;
			if (kickedUser) kickedName = kickedUser.nick+"("+kickedUser.id+")";
			chatMsg.printDefaultSystemMsg("<strong>"+nick+"("+id+")</strong> 님께서 <strong>"+kickedName+"</strong> 님을 강제퇴장시키셨습니다.");
			chatUser.remove(msrl);
		},
		kick : function()
		{
			var targets = chatUser.getTarget();
			if (targets)
			{
				var url = _staticUrl+"/ajax/json/saycast/room/kick/";
				var param = {"channel":chatUser.channel,"targets":targets};
				$.getJSON(url,param,function(data){
					if (!data.result)
						alert("강제퇴장 실패했습니다. 다시 시도해 주세요.");
				});
			}
			else
			{
				alert("강제퇴장 시킬 사람을 선택해 주세요.");
			}
		},
		ban : function(target)
		{
			if (target)
				var targets = target;
			else
				var targets = chatUser.getTarget();
				
			if (targets)
			{
				var url = _staticUrl+"/ajax/json/saycast/room/addBan/";
				var param = {"channel":chatUser.channel,"domainid":chatUser.domainid,"targets":targets};
				$.getJSON(url,param,function(data){
					if (!data.result)
						alert("영구추방 실패했습니다. 다시 시도해 주세요.");
				});
			}
			else
			{
				alert("영구추방 시킬 사람을 선택해 주세요.");
			}
		},
		getTarget : function()
		{
			var targetInput = chatUser.box.find(".checkbox");
			var cnt = targetInput.length;
			var target = "";
			if (cnt > 0)
			{
				for(var i=0; i<cnt; i++)
				{
					if (targetInput.eq(i).attr("checked"))
						target += ","+targetInput.eq(i).val();
				}
				target = target.substr(1);
			}
			return target;
		},		
		exit : function ()
		{
			if (chatCj.cjMsrl == chatUser.msrl)
			{
				chatNtopic.set("cjmsrl","");
				chatNtopic.setChatd(chatUser.echannel,chatUser.domainid);
				$.getJSON(_staticUrl+"/ajax/json/saycast/room/notifyOnairCjToCastServer/"+chatUser.domainid+"/",{},function(){});
			}
			var url = _staticUrl+"/ajax/json/saycast/room/unsubscribe";
			var param = {"notifyId":chatUser.notifyId};
			$.getJSON(url,param,function(data) {
				document.getElementById("Gura").stop();
				AppletSession.input("PART "+chatUser.echannelCp949);
			});			
		},
		focus : function(pMsrl)
		{
			try{
				if (chatUser.highlighted)
					chatUser.get(chatUser.highlighted).row.removeClass("highlight");
				chatUser.get(pMsrl).row.addClass("highlight");
				chatUser.highlighted = pMsrl;
				
				chatBody = document.getElementById("chatuser_"+pMsrl);
				chatBody.scrollIntoView(true);
				setTimeout("chatUser.get("+pMsrl+").row.removeClass('highlight');",10000);
			}catch(e){}
		},
		showLayer : function(pMsrl)
		{		
			var user = chatUser.get(pMsrl);
			if (typeof(user.sexStr) == "undefined")
			{
				user.sexStr = $.ajax({url:_staticUrl+"/ajax/html/saycast/room/getSexStr/"+pMsrl,async:false}).responseText;
			}
			chatUser.moreInfo.find(".layerBox").eq(0).html(user.id+" ("+user.sexStr+")");
			
			chatUser.moreInfo.css("top",(user.row.offset().top-chatUser.chatWrap.offset().top-24)+"px");
			chatUser.moreInfo.show();			
		},
		hideLayer : function()
		{
			chatUser.moreInfo.hide();
		},
		showListenerLayer : function(usrid,sexStr,row)
		{
			chatUser.moreInfo.find(".layerBox").eq(0).html(usrid+" ("+sexStr+")");			
			chatUser.moreInfo.css("top",(row.offset().top-chatUser.chatWrap.offset().top-24)+"px");
			chatUser.moreInfo.show();
		}
	}
}

// ------------
//  -chatCj-
// ------------
if ("undefined" == typeof chatCj)
{
	chatCj = {
		init : function (channel,domainid,myMsrl)
		{
			chatCj.box = $("#cjArea");
			chatCj.imgArea = $("#cjAreaImg");
			chatCj.nickArea = $("#cjAreaNick");
			chatCj.topicArea = $("#cjAreaTopic");
			chatCj.songArea = $("#cjAreaSong");
			chatCj.listenerArea = $("#cjAreaListener");
			if($("#cjAreaTotalListener")) chatCj.listenerTotalArea = $("#cjAreaTotalListener");
			chatCj.addMystarButton = $("#addMystarButton");
			chatCj.sendRoseButton = $("#sendRoseButton");
			chatCj.roseHistoryButton = $("#roseHistoryButton");
			chatCj.sendRoseButton2 = $("#sendRoseButton2");
			chatCj.roseHistoryButton2 = $("#roseHistoryButton2");
			chatCj.channel = channel;
			chatCj.domainid = domainid;
			chatCj.myMsrl = myMsrl;
			chatCj.cjMsrl = 0;
			chatCj.getCj(channel);
		},
		getCj : function (channel)
		{
			var url = _staticUrl+"/ajax/json/saycast/room/getCjByChannel";
			var param = {"channel":channel};
				
			$.getJSON(url,param,function(data) {
					var cj = data.result;
					try {
						if (cj)
							chatCj.setCj(cj);
						else
							chatCj.unsetCj();
					} catch(e) { }
				}
			);
		},
		setCj : function (cj)
		{
			if (cj.msrl)
			{
				// notify onair
				if (cj.msrl == chatCj.myMsrl)
				{
					var url = _staticUrl+"/ajax/json/saycast/room/notifyOnair";
					var param = {cjmsrl:cj.msrl,domainid:chatCj.domainid};
					$.getJSON(url,param,function(data){});
				}			
				// advertise
				if (cj.msrl == chatCj.myMsrl)
					chatAd.set();
				else if (chatCj.cjMsrl == chatCj.myMsrl)
					chatAd.remove();
				
				chatCj.cjMsrl = cj.msrl;
				if (cj.useAvatar == "N")
				{
					chatCj.imgArea.html("<p class=\"thumbnail\"><img src=\""+cj.photo+"\" alt=\"\" /></p>");
				}
				else
				{
					var avatar = ItemHandler.getAvatarFromFilestr(cj.filestr, cj.mood, 62, 62);
					chatCj.imgArea.html(avatar);
				}
				chatCj.nickArea.html("<a href=\"http://me.sayclub.com/profile/r/msrl/"+cj.msrl+"\" target=\"_blank\" >"+cj.nick+"</a>");
				chatCj.topicArea.html(cj.topic);
				if (chatCj.myMsrl != 0)
				{
					chatCj.addMystarButton.unbind("click").click(function(){ namePop.addMyStar(cj.msrl); }).show();
					if (chatCj.myMsrl == cj.msrl)
					{
						chatCj.sendRoseButton.hide();
						chatCj.sendRoseButton2.hide();
						chatCj.roseHistoryButton.click(function() { chatCj.openRoseHistory(); }).show(); 
						chatCj.roseHistoryButton2.click(function() { chatCj.openRoseHistory(); }).show();
					}
					else
					{
						chatCj.roseHistoryButton.hide();
						chatCj.roseHistoryButton2.hide();
						chatCj.sendRoseButton.click(function() { chatCj.sendRose(); }).show();
						chatCj.sendRoseButton2.click(function() { chatCj.sendRose(); }).show();
					}
				}
				else
				{
					chatCj.addMystarButton.unbind("click").click(function(){ loginHandler.showCenter(); }).show();
					chatCj.sendRoseButton.click(function() { loginHandler.showCenter(); }).show();
				}				
			}
			else
			{
				chatCj.cjMsrl = 0;
				chatCj.unsetCj();
			} 			
			chatCj.setCurrentSong(cj.currentSong,cj.oncast);
			chatCj.setListenerCnt(cj.listener);			
		},
		setCurrentSong : function(currentSong,oncast)
		{
			if (oncast != "ad" && currentSong.length > 42) currentSong = currentSong.substring( 0, 42)+'..';
			
			chatCj.songArea.html(currentSong);
			var equalizer = chatCj.songArea.parent();
			if(oncast == "ad")
			{
				chatCj.songArea.removeClass("musicTitle");
				chatCj.songArea.addClass("ad");
				equalizer.removeClass("playMusicNone");
				equalizer.addClass("playMusic");				
			}
			else
			{
				chatCj.songArea.removeClass("ad");
				chatCj.songArea.addClass("musicTitle");
				if(oncast == "on")
				{
					equalizer.removeClass("playMusicNone");
					equalizer.addClass("playMusic");
				}
				else
				{
					equalizer.removeClass("playMusic");
					equalizer.addClass("playMusicNone");
				}
			}
		},
		unsetCj : function ()
		{
			chatCj.imgArea.html("<p class=\"thumbnail\"><img src=\"http://filei.sayclub.kr/rose/common/i_defaultPhotoB.gif\" alt=\"\" /></p>");
			chatCj.nickArea.html("방송중인 CJ가 없습니다.");
			chatCj.topicArea.html("프로그램 소개가 없습니다.");
			chatCj.addMystarButton.hide();
			chatCj.sendRoseButton.hide();
			chatCj.roseHistoryButton.hide();
			chatCj.setCurrentSong("현재곡 정보가 없습니다.","off");
			chatCj.setListenerCnt(0);
			chatCj.setListenerTotalCnt(0);
		},
		sendRose : function ()
		{
			if (chatMsg.msrl != 0)
			{
				if (chatCj.cjMsrl != 0)
				{
					openSendRose(chatCj.cjMsrl);										
				}
				else
					alert("방송중인 CJ가 없습니다.");
			}
			else
				loginHandler.showCenter();
		},
		openRoseHistory : function()
		{
			PopupHandler.openWin(_staticUrl+"/saycast/rose/history/recv", "_poprosehistory", 500, 550);
		},
		setListenerCnt : function(cnt)
		{
			if(!cnt) cnt = "0";
			chatCj.listenerArea.html(cnt);
			chatUser.setListenerCnt(cnt);
		},
		setListenerTotalCnt : function(cnt)
		{
			if(!cnt) cnt = "0";
			if(chatCj.listenerTotalArea) chatCj.listenerTotalArea.html(cnt);
		}
	}
}

// ------------
//  -chatMyIcon-
// ------------
if ("undefined" == typeof chatMyIcon)
{
	chatMyIcon = {
		show : function ()
		{
			$("#expressionList").show();
		},
		hide : function ()
		{
			$("#expressionList").hide();
		},
		change : function (mood)
		{
			$.get(_staticUrl+"/ajax/html/common/namepop/changeMood",{
    			'mood':mood
    		},
    		function (data) {
    			if (data != "fail") chatMyIcon.reset(mood);
    			else alert("표정 바꾸기에 실패했습니다. 다시 시도해 주세요.");
    			chatMyIcon.hide();
    		}
    	);
		},
		reset : function (mood)
		{
			var myicon = $("#myIconA").find("img").attr("src");
			$("#myIconA").find("img").attr("src",myicon.slice(0,-6)+"0"+mood+".gif")
		}
	}
}

// ----------
//  -chatUtil-
// ----------
if ("undefined" == typeof chatUtil)
{
	chatUtil = {
		showFont : function ()
		{
			if (chatMsg.msrl != 0)			
				$("#div_font").toggle();
			else
				loginHandler.showCenter();
		},		
		showEmoti : function ()
		{
			if (chatMsg.msrl != 0)
				$("#emoticon").toggle();
			else
				loginHandler.showCenter();
		},
		showUtil : function ()
		{
			if (chatMsg.msrl != 0)
			{
				$("#chatting_div").show();
				$("#chatting").show();
			}
			else
				loginHandler.showCenter();
		},
		openHelp : function (isMore)
		{
			if (isMore)
			{
				var url = _staticSaycastUrl+"/saycast/room/popChatHelp?isMore="+isMore;
			}
			else
			{
				if (chatUser.isAdmin)
					var url = _staticSaycastUrl+"/saycast/room/popChatHelp?isMore=yes";
				else
					var url = _staticSaycastUrl+"/saycast/room/popChatHelp?isMore=no";
			}
			PopupHandler.openWinScroll (url,'_pop_help', 500, 815);			
		},
		screenCapture : function ()
		{
			iframeSave = document.getElementById("iframeSave");
			iframeSave.location.href=_staticUrl+"/saycast/room/saveChat/?flag=capture&defaultFilename="+chatUtil.getDefaultFilename();
			$("#chatting").hide();
		},
		saveChat : function ()
		{
			iframeSave = document.getElementById("iframeSave");
			iframeSave.location.href=_staticUrl+"/saycast/room/saveChat/?flag=save&defaultFilename="+chatUtil.getDefaultFilename();
			$("#chatting").hide();
		},
		getDefaultFilename : function ()
		{
			date = new Date();
			var year = date.getYear();
			var month = date.getMonth()+1;
			var day = date.getDate();
			if(month<10) month = "0"+month;
			if(day<10) day = "0"+day;			
			
			var default_filename = year+month+day+"_"+chatCommon.echannel.split("%2F")[1];
			
			// Strip the not allowed word
			default_filename = default_filename.replace(/&quot;/g, "");
			default_filename = default_filename.replace(/:/g, "");
			default_filename = default_filename.replace(/\//g, "");
			default_filename = default_filename.replace(/\*/g, "");
			default_filename = default_filename.replace(/\?/g, "");
			default_filename = default_filename.replace(/&lt;/g, "");
			default_filename = default_filename.replace(/&gt;/g, "");
			default_filename = default_filename.replace(/\|/g, "");
			return default_filename;
		},
		changeMemoRecvMode : function (mode)
		{
			if (chatMsg.msrl != 0)
			{
				if (mode == 1) var yn = "Y";
				else var yn = "N";
				$.getJSON(_staticSaycastUrl+"/ajax/json/saycast/room/changeMemoRecvMode/"+yn,{},function(data) {
					if (data.result)
					{
						if (mode == 1)
						{
							$(".acceptRejection").find("a").eq(0).hide();
							$(".acceptRejection").find("a").eq(1).show();
						}
						else
						{
							$(".acceptRejection").find("a").eq(1).hide();
							$(".acceptRejection").find("a").eq(0).show();
						}
					}	
				});
			}
			else
				loginHandler.showCenter();			
		}
	}
}

// ------------
//  -chatMedia-
// ------------
if ("undefined" == typeof chatMedia)
{
	chatMedia = {
		init : function(channel,domainid,msrl,id,nick,chartype,mood,userColor,skinImgPath)
		{
			chatMedia.listArea = $(".mediaList");
			chatMedia.tab = $("#layerControl");
			chatMedia.tabImg = $("#layerControlImg");
			chatMedia.tabTimer = '';
			chatMedia.channel = channel;
			chatMedia.echannel = channel.replace("#","%23").replace("/","%2F");
			chatMedia.domainid = domainid;
			chatMedia.msrl = msrl;
			chatMedia.id = id;
			chatMedia.nick = nick;
			chatMedia.chartype = chartype;
			chatMedia.mood = mood;
			chatMedia.userColor = userColor;
			chatMedia.skinImgPath = skinImgPath;
			chatMedia.list = new Array();
			chatMedia.getList(10,"on");			
		},
		initStudioBox : function(domainid)
		{
			chatMedia.listArea = $(".mediaList");
			chatMedia.domainid = domainid;
			chatMedia.list = new Array();
			chatMedia.getList(3);
		},
		getList : function(cnt,tabFlashMode)
		{
			var url = _staticUrl+"/ajax/json/saycast/room/getMediaList";
			if (!cnt) cnt = 10;
			var param = {domainid:chatMedia.domainid, cnt:cnt};
			$.getJSON(url,param,function(data) {
				if (data.result)
				{
					try{
						var list = data.result;
						var maxCnt = 0;
						for (var i in list)
						{							
							chatMedia.set(list[i].mediasrl,list[i].wmsrl,list[i].type,list[i].thumbnail,chatMedia.getUrl(list[i]),list[i].cnt);
							if (list[i].cnt > maxCnt) maxCnt = list[i].cnt;						
						}
						var listCnt = 0;
						for (var j in list)
						{
							chatMedia.add(list[j].mediasrl,list[j].type,maxCnt,"append");
							if(list[j].isNew == "y") listCnt++;
						}
						if(tabFlashMode=="on" && listCnt > 0) chatMedia.setTabFlashMode(tabFlashMode);
												
					}catch(e){ }
				}
			});
		},
		setTabFlashMode : function(mode)
		{
			if(mode == "on")
				chatMedia.tabTimer = setInterval("chatMedia.playTabFlash();",1000);
			else
				clearInterval(chatMedia.tabTimer);			
		},
		playTabFlash : function()
		{
			var imgurl = chatMedia.tabImg.attr("src");
			if(imgurl.search("Off") != -1)
				imgurl = imgurl.replace("Off","On");				
			else
				imgurl = imgurl.replace("On","Off");				
			chatMedia.tab.toggleClass("panelOpenOn");
			chatMedia.tab.toggleClass("panelOpenOff");
			chatMedia.tabImg.attr("src",imgurl);
		},
		getUrl : function(media)
		{
			if (media.type == "IMAGE") var pUrl = media.imageurl;
			else if (media.type == "VIDEO") var pUrl = media.vediourl;
			else if (media.type == "URL") var pUrl = media.directurl;
			else var pUrl = "";
			return pUrl;
		},
		getCnt : function()
		{
			var i=0;
			for (var key in chatMedia.list)
				i++;
			return i;
		},
		set : function(mediasrl,wmsrl,type,thumbnail,url,cnt)
		{
			if (!chatMedia.exist(mediasrl))
			{
				var media = new Object();
				media.mediasrl = mediasrl;
				media.wmsrl = wmsrl;
				media.type = type;
				media.thumbnail = thumbnail;
				media.url = url;
				media.cnt = cnt;
				media.row = $("<li><p class=\"thumbnail\"><a href=\"\" onclick=\"chatMedia.view('"+mediasrl+"'); return false;\"><img src=\""+thumbnail+"\" alt=\"\" /></a></p></li>");
				chatMedia.list[mediasrl] = media;				
			}
		},
		get : function(mediasrl)
		{
			return chatMedia.list[mediasrl];
		},
		exist : function(mediasrl)
		{
			if (typeof(chatMedia.list[mediasrl]) != "undefined")
				return true;
			return false;
		},
		add : function(mediasrl,type,maxCnt,insertType)
		{
			var media = chatMedia.get(mediasrl);
			if (media.cnt > 1 && media.cnt == maxCnt && chatMedia.getCnt() > 1)
				media.row.prepend("<p class=\"hot\"></p>");			
			if (type == "IMAGE")
			{
				media.row.prepend("<p class=\"icon\"><img src=\"http://filei.sayclub.kr/rose/saycast/station/ic_photo.gif\" alt=\"\" /></p>");				
			}
			else if (type == "VIDEO")
			{
				media.row.prepend("<p class=\"icon\"><img src=\"http://filei.sayclub.kr/rose/saycast/station/ic_moving.gif\" alt=\"\" /></p>");
			}
			else if (type == "URL")
			{			
				media.row.prepend("<p class=\"icon\"><img src=\"http://filei.sayclub.kr/rose/saycast/station/ic_url.gif\" alt=\"\" /></p>");
			}
			if (chatUser.isAdmin || media.wmsrl == chatMedia.msrl)
			{
				media.row.append("<p class=\"btnDelete\" style=\"display:none;\"><a href=\"\" onclick=\"chatMedia.del("+mediasrl+"); return false;\" title=\"삭제\"><img src=\"http://filei.sayclub.kr/rose/common/button/bc_mediaDelete.gif\" alt=\"삭제\" /></a></p>");
				media.row.bind("mouseover",function(){ media.row.find(".btnDelete").eq(0).show(); });
				media.row.bind("mouseout",function(){ media.row.find(".btnDelete").eq(0).hide(); });
			}
			if (insertType == "append")
				chatMedia.listArea.append(media.row);
			else
				chatMedia.listArea.prepend(media.row);
		},
		_del : function(mediaSrl)
		{
			chatMedia.list[mediaSrl].row.remove();
			delete chatMedia.list[mediaSrl];
		},
		del : function(mediaSrl)
		{
			var param = { "mediaSrl":mediaSrl, "channel" : chatMedia.channel, "domainid" : chatMedia.domainid };
			$.getJSON(_staticUrl+"/ajax/json/saycast/room/deleteMedia",param,function(data) {
				if (data.result)
				{
					LayerHandler.alertCntl2(data.result.msg,278);
					//chatMedia._del(mediaSrl);
					chatMsg.inputClient("CHAT_EXTEND "+chatUser.getMsrlList()+" "+chatMedia.echannel+" :MEDIA|DEL|"+mediaSrl);
				}
				else
				{
					LayerHandler.alertCntl2("일시적인 오류입니다.",278);
				}
			});
		},
		view : function(mediasrl)
		{
			var media = chatMedia.get(mediasrl);
			if (media.type == "IMAGE" && typeof(image) != "undefined")
				image.view(media.url,"사진");
			else if (media.type == "VIDEO" && typeof(vclip) != "undefined")
				vclip.view(media.url);
			else if (media.type == "URL")
			{
				if (media.url == "http://saycast.sayclub.com/saycast/room/popMediaHelp")
					PopupHandler.openWin(media.url,"popMediaHelp",450,530);
				else
					window.open(media.url);
			}
				
			chatMedia.listArea.find(".selected").eq(0).remove();
			media.row.prepend("<p class=\"selected\"></p>");
		},
		addable : function()
		{
			var mMode = chatNtopic.get("mediaMode"); 
			if ((mMode == "admin" && chatUser.isAdmin) || mMode == "all")
				return true;
			return false;
		},		
		showLayer : function ()
		{
			if (chatMsg.msrl != 0)
			{
				if (!chatMedia.addable())
					LayerHandler.alertCntl2("운영진만 추가할 수 있도록<br />설정되어 있습니다.",278);
				else
				{
					addMedia.open();
				}
			}
			else
				loginHandler.showCenter();
		},
		hideLayer : function ()
		{
			addMedia.close();
		},
		isShow : function()
		{
			return addMedia.isOpen();
		},
		submitCheck : false,
		submitImage : function ()
		{
			if(chatMedia.submitCheck) return;
			
			var img_id	 = image.id;
			var img_info	= image.server;			
				
			if(img_id == ''){
				LayerHandler.alertCntl2("이미지를 선택하세요.", "278");
				return;
			}
			
			chatMedia.submitCheck = true;
			$("#image_loading").show();
			$.getJSON(_staticUrl+"/ajax/json/saycast/room/setImage", 
		  	{ "imageInfo" : img_info, "channel" : chatMedia.channel, "domainid" : chatMedia.domainid },  	
		    function (data) {
		    	chatMedia.afterSubmitAction(data);		    	
		  	}
		  );
		},
		uploadImage : function ()
		{
			if(typeof(image) == "undefined" || image.uploadCheck) return false;
			if($('#uploadPhotoForm').val() == '' || $('#uploadPhotoForm').val()=="컴퓨터에서 추가하고 싶은 사진을 선택해 주세요."){
				LayerHandler.alertCntl2("사진을 선택하세요.", "278");
			}else{				
				image.uploadCheck = true;
				$("#photo_loading").show();
				document.getElementById('SCUploader').fileUpload(_staticUrl+'/ajax/json/saycast/room/uploadImage/?channel='+chatMedia.echannel+'&domainid='+chatMedia.domainid,'photo');				
			}
		},
		submitVclip : function ()
		{
			if(chatMedia.submitCheck)	return;
			
			if(vclip.url == ''|| vclip.thumb == ''){
				LayerHandler.alertCntl2("동영상을 선택하세요.", "278");
				return;
			}
		
			chatMedia.submitCheck = true;
			
			var param = { "vclipUrl" : vclip.url, "vclipThumb" : vclip.thumb, "channel" : chatMedia.channel, "domainid" : chatMedia.domainid };
			
			$.getJSON(_staticUrl+"/ajax/json/saycast/room/setVclip", param, function (data) {				
				chatMedia.afterSubmitAction(data);
		  });
		},
		submitUrl : function (url)
		{
			if (url == "")
			{
				LayerHandler.alertCntl2("주소를 입력해 주세요.", "278");
				return false;
			}
			else if (url.substr(0,7) != "http://")
			{
				LayerHandler.alertCntl2("정상적인 주소는 http:// 로 시작합니다.", "278");
				return false;
			}			
			else if (url.length > 256)
			{
				LayerHandler.alertCntl2("주소가 너무 깁니다.", "278");
				return false;
			}
			var param = { "url":url, "channel" : chatMedia.channel, "domainid" : chatMedia.domainid };
			$.getJSON(_staticUrl+"/ajax/json/saycast/room/setDirectUrl",param,function(data) {
				chatMedia.afterSubmitAction(data);
			});
		},
		afterSubmitAction : function(data)
		{
			chatMedia.submitCheck = false;
			$("#image_loading").hide();
			if (data.result == null) 
			{
				LayerHandler.alertCntl2(data.error, "278");
			} 
			else 
			{
				LayerHandler.alertCntl2(data.result.msg, "278");
				if (data.result.result)
				{
					var mediaInfo = data.result.mediaInfo;
					var url = chatMedia.getUrl(mediaInfo);
					chatMsg.inputClient("CHAT_EXTEND "+chatUser.getMsrlList()+" "+chatMedia.echannel+" :MEDIA|ADD|"+mediaInfo.mediasrl+"|"+mediaInfo.wmsrl+"|"+mediaInfo.type+"|"+mediaInfo.thumbnail+"|"+url+"|0|"+chatMedia.id+"|"+chatMedia.nick+"|"+chatMedia.chartype+"|"+chatMedia.mood+"|"+chatMedia.userColor);
				}																				
			}
			chatMedia.hideLayer();			
		},
		openHelp : function ()
		{
			PopupHandler.openWin(_staticUrl+"/saycast/room/popMediaHelp","popMediaHelp",450,535);
		},
		openTab : function()
		{
			chatMedia.tab.removeClass("panelOpenOff");
			chatMedia.tab.addClass("panelCloseOff");			
			$("#chatPlace").removeClass("chatPlaceWide");
			$("#chatPlace").addClass("chatPlaceNarrow");
			chatMedia.tab.html("<a href=\"\" onclick=\"chatMedia.closeTab(); return false;\" title=\"닫기\"><img src=\"http://filei.sayclub.kr/rose/saycast/station/"+chatMedia.skinImgPath+"/bo_panelCloseOff.gif\" alt=\"닫기\" onmouseover=\"imgOver(this), document.getElementById('layerControl').className='panelCloseOn'\" onmouseout=\"imgOut(this), document.getElementById('layerControl').className='panelCloseOff'\" /></a>");
			chatMedia.listArea.parent().show();
			chatMedia.setTabFlashMode("off");
						
		},
		closeTab : function()
		{
			chatMedia.tab.removeClass("panelCloseOn");
			chatMedia.tab.addClass("panelOpenOff");
			$("#chatPlace").removeClass("chatPlaceNarrow");
			$("#chatPlace").addClass("chatPlaceWide");
			chatMedia.tab.html("<a href=\"\" onclick=\"chatMedia.openTab(); return false;\" title=\"열기\"><img src=\"http://filei.sayclub.kr/rose/saycast/station/"+chatMedia.skinImgPath+"/bo_panelOpenOff.gif\" alt=\"열기\" onmouseover=\"imgOver(this), document.getElementById('layerControl').className='panelOpenOn'\" onmouseout=\"imgOut(this), document.getElementById('layerControl').className='panelOpenOff'\" /></a>");
			chatMedia.listArea.parent().hide();						
		}
	}
}

// ------------
//  -chatCommon-
// ------------
if ("undefined" == typeof chatCommon)
{
	chatCommon = {
		init : function (domainid,castname,channel,echannel,echannelCp949,msrl,id,nick,chartype,mood,userColor,chatidmode,ntopic,notifyId,listenUrl,exitUrl,skinImgPath,firstMsg,inmode,isAdvertise,channeling,autoPlay)
		{
			chatCommon.locate = "studio";
			chatCommon.domainid = domainid;
			chatCommon.castname = castname;
			chatCommon.channel = channel;
			chatCommon.echannel = echannel;
			chatCommon.echannelCp949 = echannelCp949;
			chatCommon.msrl = msrl;
			chatCommon.listenUrl = listenUrl;
			chatCommon.exitUrl = exitUrl;
			chatCommon.channeling = channeling;
			chatNtopic.decode(ntopic);			
			
			chatMsg.init(domainid,channel,msrl,chatidmode);
			chatUser.init(domainid,castname,channel,echannel,echannelCp949,msrl,notifyId);
			chatWhisper.init();
			chatAd.init(domainid,isAdvertise);
			chatCj.init(channel,domainid,msrl);
			chatMedia.init(channel,domainid,msrl,id,nick,chartype,mood,userColor,skinImgPath);
			chatNotify.init(domainid,castname);			
			$(window).unload(chatUser.exit);			
			
			chatCommon.sizeChange();
			window.onresize = chatCommon.sizeChange;
			$(document).bind("keyup",function(){
				if(!chatMedia.isShow())
					chatMsg.focus();
			});
			
			if (chatNtopic.get("bg"))
				chatMsg.chatPlace.css("backgroundImage","url('"+chatNtopic.get("bg")+"')");
			if (chatNtopic.get("bgLocate"))
				chatMsg.chatPlace.css("backgroundPosition",chatNtopic.get("bgLocate")+"% 50%");					
			
			if (firstMsg)
			{
				$(document).ready(function(){
					chatMsg.inputMsg.val(firstMsg);
					chatMsg.send();
				});
			}
			if(autoPlay == "y")
			{
				$(document).ready(function(){
					setTimeout("openSayRadio('station','"+domainid+"');",2000);					
				});				
			}
			// ie6.0에서의 스크롤버그로 인해 아래 코드 추가
			if($("#dummyTop").length == 0) $("body").prepend($("<div id='dummyTop'></div>"));
			$(document).ready(function(){
				setTimeout("document.getElementById('dummyTop').scrollIntoView(true);",1000);
			});	
		},
		initStudioBox : function (domainid,channel,chatidmode)
		{
			chatCommon.locate = "main";
			chatMsg.initStudioBox(channel,chatidmode);
			chatMedia.initStudioBox(domainid);
			chatUser.setCntDirect($("#chatuserCnt"),domainid,channel);
		},
		getLocate : function()
		{
			return chatCommon.locate;
		},
		sizeChange : function ()
		{
			var commbarHeight = 0;
			if (loginStatus) commbarHeight = 30;
			if (chatCommon.channeling == '1') commbarHeight += 33;
			
			var windowHeight = $(window).height();
			var chattingBoxHeight = windowHeight-commbarHeight-232;
			var adminPanel = $(".adminPanel");
			if (adminPanel.length > 0)
				var adminPanelHeight = parseInt(adminPanel.css("height"));
			else
				var adminPanelHeight = 0;
						
			$(".chattingBox").css("height",chattingBoxHeight);
			$(".mediaPanelWrap").css("height",chattingBoxHeight-adminPanelHeight+1);
			$(".rightPanelWrap").css("height",chattingBoxHeight-adminPanelHeight-5);
			$("#participantList1").css("height",chattingBoxHeight-adminPanelHeight-148);
			$(".listenerList").css("height",chattingBoxHeight-adminPanelHeight-148);
			$(".listInner").css("height",chattingBoxHeight-adminPanelHeight-152);
			$("#chatPlace").css("height",chattingBoxHeight-adminPanelHeight+1);
			$("#layerControl").css("height",chattingBoxHeight-adminPanelHeight+1);						
		},
		openBrHelpLayer : function (obj)
		{
			var e = $(obj).offset();
			$("#brHelpLayer").css("top",e.top+$(obj).height());
			$("#brHelpLayer").css("left",e.left);
			$("#brHelpLayer").show();
		},
		closeBrHelpLayer : function ()
		{
			$("#brHelpLayer").hide();
		},
		openBrHelpPop : function ()
		{
			PopupHandler.openWin(_staticSaycastUrl+"/saycast/room/popBrHelp","_brhelp",500,500);
		},
		openBrAdmin : function ()
		{
			PopupHandler.openWinScroll(_staticSaycastUrl+"/saycast/room/popAdmin/?channel="+chatCommon.echannel+"&domainid="+chatCommon.domainid,"_brAdmin",500,800);
		},
		openInvite : function (toid)
		{
			if (chatCommon.msrl != 0)
			{				
				var url = "http://saychatting.sayclub.com/chat/chinvite.nwz?channel="+chatCommon.echannelCp949+"&noTrans=yes";
				if (toid) url += "&toid="+toid;
				PopupHandler.openWin(url,"invite",468,520);
			}
			else
				loginHandler.showCenter();			
		},
		openPmInvite : function ()
		{
			if (chatCommon.msrl != 0)
			{
				var url = "http://saychatting.sayclub.com/saycast_pminvite.nwz?op=popup&domainId=" + chatCommon.domainid + "&channel=" + chatCommon.echannelCp949;
				PopupHandler.openWin(url, "pminvite_pop", 400, 400);
			}
			else
				loginHandler.showCenter();
		},
		openSayDj : function()
		{
			var url = _staticUrl+"/seri/saydj/?domainid="+chatCommon.domainid+"&castname="+chatCommon.castname+"&genre="+chatNtopic.get("categoryGenre")+"&url="+chatCommon.listenUrl;
			window.open(url,'saydj','toolbar=no,resizable=no,location=0,scrollbars=no,width=350,height=435,top=200,left=350');
		},
		openPr : function()
		{
			var url = _staticUrl + "/seri/adplus/reserve";
			PopupHandler.openWin(url, "pr_pop", 500, 602);
		},
		confirmExit : function(exiturl)
		{
			LayerHandler.confirmCntl2(chatCommon.castname+" 스튜디오에서 나가시겠습니까?","javascript:chatCommon.doExit('"+exiturl+"');");
		},
		doExit : function(exiturl)
		{
			if (!exiturl)
				location.href = chatCommon.exitUrl;
			else
				location.href = exiturl;
		},
		showChatuserList : function()
		{
			$("#listenerListTab").attr("src",$("#listenerListTab").attr("src").replace("On","Off"));
			$("#listenerListTab2").hide();
			$("#chatuserListTab").attr("src",$("#chatuserListTab").attr("src").replace("Off","On"));
			$("#chatuserListTab2").show();
			$(".listenerList").hide();
			$("#participantList1").show();
		},
		showListenerList : function()
		{
			chatUser.getListenerList();
			$("#chatuserListTab").attr("src",$("#chatuserListTab").attr("src").replace("On","Off"));
			$("#chatuserListTab2").hide();
			$("#listenerListTab").attr("src",$("#listenerListTab").attr("src").replace("Off","On"));			
			$("#listenerListTab2").show();
			$("#participantList1").hide();
			$(".listenerList").show();			
		}
	}
}

// ----------------
//  -chatError-
// ----------------
if ("undefined" == typeof chatError)
{
	chatError = {
		init : function(domainid,errcode,errstr,exiturl,firstMsg)
		{
			chatError.domainid = domainid;
			chatError.errcode = errcode;
			chatError.errstr = errstr;
			chatError.exiturl = exiturl;
			
			if (errcode == "106")
			{
				if (confirm(errstr))
				{
					var param = "";
					if (firstMsg)
						param = "&firstMsg="+firstMsg;
					window.open(_staticUrl+"/saycast/room/station/"+domainid+"/?enterType=force"+param);
					self.close();
				}
				else
				{
					location.href = exiturl;
				}
			}
			else if (errcode == "201")
			{
				chatError.showPasswordInput();
			}
			else
			{
				alert(errstr);
				location.href = exiturl;
			}
		},
		showPasswordInput : function()
		{
			$("#passwordLayer").show();
		},
		goPasswordInput : function()
		{
			location.href = _staticUrl+"/saycast/room/station/"+chatError.domainid+"/?enterType=force&channelKey="+$("#passwordInput").val();
		},
		historyBack : function()
		{
			if (history.length > 0) history.back();
			else if (chatError.domainid) location.href = _staticSaycastUrl+"/station/home/index/"+chatError.domainid;
			else location.href = _staticMeUrl+"/saycast/index/station";
		}
	}
}

// ----------------
//  -chatNtopic-
// ----------------
if ("undefined" == typeof chatNtopic)
{
	chatNtopic = {
		cjmsrl : "",
		chattag : "",
		categoryGenre : "",
		categoryAge : "",
		type : "",
		font : "",
		bg : "",
		bgLocate : "",
		mediaMode : "",
		set : function(key,val) {
			eval("chatNtopic."+key+" = \""+val+"\";");
		},
		get : function(key) {
			return eval("chatNtopic."+key);
		},
		encode : function() {
			return "NTOPIC="+chatNtopic.cjmsrl+"|"+chatNtopic.chattag+"|"+chatNtopic.categoryGenre+"|"+chatNtopic.categoryAge+"|type="+chatNtopic.type+"|"+chatNtopic.font+"|"+chatNtopic.bg
				+"|"+chatNtopic.bgLocate+"|"+chatNtopic.mediaMode;
		},
		decode : function(ntopic) {
			var arr = ntopic.split("NTOPIC=")[1].split("|");			
			chatNtopic.cjmsrl = arr[0];
			chatNtopic.chattag = arr[1];
			chatNtopic.categoryGenre = arr[2];
			chatNtopic.categoryAge = arr[3];
			var temp = arr[4].split("=");
			chatNtopic.type = temp[1];
			chatNtopic.font = arr[5];
			chatNtopic.bg = arr[6];
			chatNtopic.bgLocate = arr[7];
			chatNtopic.mediaMode = arr[8];			
		},
		compare : function(channel,ntopic) {
			var old = new Object();
			old.cjmsrl = chatNtopic.cjmsrl;
			old.chattag = chatNtopic.chattag;
			old.categoryGenre = chatNtopic.categoryGenre;
			old.categoryAge = chatNtopic.categoryAge;
			old.type = chatNtopic.type;
			old.font = chatNtopic.font;
			old.bg = chatNtopic.bg;
			old.bgLocate = chatNtopic.bgLocate;
			old.mediaMode = chatNtopic.mediaMode;
			
			chatNtopic.decode(ntopic);
			
			if (old.cjmsrl != chatNtopic.cjmsrl)
			{
				chatCj.getCj(channel);
			}
			if (old.chattag != chatNtopic.chattag)
			{
				// 방송국스튜디오에는 chattag 변경하는 부분이 없다. 
			}
			if (old.font != chatNtopic.font)
			{
				if (chatNtopic.font.search("마이폰트_") != -1)
				{
					var fontFamily = chatNtopic.font.split("마이폰트_")[1];
					var size = fontFamily.split("_")[1];
				}
				else  // normal font
				{
					var temp = chatNtopic.font.split("_");
					var fontFamily = temp[0];
					var size = temp[1];
				}
				chatMsg.myFont.setStyleDirect(chatCj.topicArea,fontFamily,size);
			}
			if (old.bg != chatNtopic.bg)
			{
				chatMsg.chatPlace.css("backgroundImage","url('"+chatNtopic.bg+"')");
			}
			if (old.bgLocate != chatNtopic.bgLocate)
			{
				chatMsg.chatPlace.css("backgroundPosition",chatNtopic.bgLocate+"% 50%");
			}			
		},
		setChatd : function(echannel,domainid) {
			var ntopic = chatNtopic.encode();
			var url = _staticUrl+"/ajax/json/saycast/room/setNtopic/?channel="+echannel+"&domainid="+domainid+"&ntopic="+ntopic;
			return $.ajax({url:url,async:false}).responseText;
		}
	}
}

// ---------------
//  -chatNotify-
// ---------------
if ("undefined" == typeof chatNotify)
{
	chatNotify = {
		init : function(domainid,castname)
		{
			chatNotify.domainid = domainid;
			chatNotify.castname = castname;
			chatNotify.sayradioInList = new Array();
		},
		viewRoseMsg : function(nick,hideNickFlag,rosecnt,from,isFirst) 
		{
			var lv = "1";
			if (rosecnt < 10) lv = "1";
			else if (rosecnt < 20) lv = "2";
			else if (rosecnt < 30) lv = "3";
			else if (rosecnt < 50) lv = "4";
			else if (rosecnt < 100) lv = "5";
			else if (rosecnt < 200) lv = "6";
			else if (rosecnt < 500) lv = "7";
			else if (rosecnt >= 500) lv = "8";
			
			if (hideNickFlag != "") nick = "익명의 청취자";
			var fromSayradio = "";
			if (from.substr(0,8) == "sayradio") var fromSayradio = "세이라디오를 통해 ";
			
			var msg = "<div class=\"msgRoseLv roseLv"+lv+"\"> 짝짝짝!! "+fromSayradio+"<strong>"+nick+"님</strong>께서<br/>CJ에게 <em>장미꽃 "+rosecnt+"송이</em>를 선물하셨습니다.</div>";
			chatMsg.printSystemMsg(msg);
			
			if (isFirst)
			{
				var fMsg = "<div class=\"msg msgMania\"><p><img src=\"http://filei.sayclub.kr/rose/common/ic_maniaB.gif\" alt=\"매니아\"/> <span>짝!짝!짝! 축하합니다~ <br/><strong>"+nick+"</strong> 님은 "+chatNotify.castname+"의 <em>매니아</em>가 되셨습니다.</span></p>	</div>";
				chatMsg.printSystemMsg(fMsg);
			}
		},
		modifyChatidmode : function(chatidmode)
		{
			chatMsg.chatidmode = chatidmode;
			chatMsg.setNewDiv();			
		},
		setCurrentSong : function(currentSong)
		{
			chatCj.setCurrentSong(currentSong,"on");
		},
		viewAdminMsg : function(msg)
		{
			chatMsg.printSystemMsg(msg);
		},
		viewRequestSongMsg : function(nick, paramStr, rosecnt, isFirst)
		{
			if(rosecnt)
				var msg = "<div class=\"msg msgGiftRose\">";
			else
				var msg = "<div class=\"msg msgInfo\">";
			
			msg += "<img src=\"http://filei.sayclub.kr/rose/saycast/station/infoMsg/c_request.gif\" alt=\"신청곡/사연\"/>" 
			msg += "<span><strong>"+nick+"</strong> 님이 <em>신청곡/사연</em>을 올렸습니다. <a href=\""+_staticSaycastUrl+"/station/board/view/"+paramStr+"/?popup=1\" onclick=\"PopupHandler.openWin(this.href,'reqsong',708,660); return false;\">"
			msg += "<img src=\"http://filei.sayclub.kr/rose/saycast/station/skin_blue/b_go.gif\" alt=\"GO\"/></a></span>";
			
			if(rosecnt) msg += "<br/><span class=\"giftRose\">장미꽃 <em>" + rosecnt + "</em>송이도 함께 보내셨네요.</span>";
 
			msg += "</div>";
			
			chatMsg.printSystemMsg(msg);

			if(isFirst)
			{
				var fMsg = "<div class=\"msg msgMania\"><p><img src=\"http://filei.sayclub.kr/rose/common/ic_maniaB.gif\" alt=\"매니아\"/> <span>짝!짝!짝! 축하합니다~ <br/><strong>"+nick+"</strong> 님은 "+chatNotify.castname+"의 <em>매니아</em>가 되셨습니다.</span></p>	</div>";
				chatMsg.printSystemMsg(fMsg);
			}
						
			var url = _staticUrl+"/ajax/html/saycast/room/getRequestBox/"+chatNotify.domainid;
			$.get(url,{},function(data){
				if (data) $("#storyList").html(data);
			});
		},
		viewSayradioInNew : function(msrl,nick)
		{
			if(!chatCj.cjMsrl || chatCj.cjMsrl != chatCj.myMsrl) return false;
			var oDate = new Date();
			var currSec = Date.parse(oDate);
			if(typeof(chatNotify.sayradioInList[msrl]) == "undefined" || chatNotify.sayradioInList[msrl] < currSec - 300000)
			{
				var msg = "<div class=\"msg msgSayradio\"><img src=\"http://filei.sayclub.kr/rose/saycast/station/skin_blue/ic_equalizerOn.gif\" alt=\"\"/> <strong>"+nick+"</strong> 님이 <em>세이 라디오</em>로 방송에 참여하고 있습니다. </div>";
				chatMsg.printSystemMsg(msg);
				
				chatNotify.sayradioInList[msrl] = currSec;
			}
		},
		updateListenCnt : function(cnt)
		{
			chatCj.setListenerCnt(cnt);						
		},
		updateListenTotalCnt : function(cnt)
		{
			chatCj.setListenerTotalCnt(cnt);						
		},
		startAdvertise : function(content,linkurl)
		{
			linkurl += "&callfrom=STUDIO";
			var adStr = "<a href=\""+linkurl+"\" onclick=\"window.open(this.href); return false;\">"+content+"</a>";
			adStr = adStr.replace(/'/g,"\'");
			setTimeout("chatCj.setCurrentSong('"+adStr+"','ad');",7000);			
		},
		endAdvertise : function(currSong)
		{
			currSong = currSong.replace(/'/g,"\'");
			setTimeout("chatCj.setCurrentSong('"+currSong+"','on');",7000);						
		},
		viewRoseBomJackpot : function(jackpot_userid, rose_cnt)
		{
			jpMsg = "<div class=\"msgBox\">";
			jpMsg += "<p class=\"boxTop\"></p>";
			jpMsg += "<div class=\"boxBtm\">";
			jpMsg += "<div class=\"roseBomb\">";
			jpMsg += "<span>축하합니다! <strong>"+jackpot_userid+"</strong>님이<br />";
			jpMsg += "장미꽃 폭탄을 터트려 <em>장미꽃 "+rose_cnt+"송이</em>에 당첨되었습니다.</span>";
			jpMsg += "<p class=\"link\"><a href=\"javascript:open_window('http://saymall.sayclub.com/saymall_popup_product_info.nwz?&usetype=f&product_id=90686&saleinfo_id=&cont_id=262041&cat_id=1000009767&location=1000009764&filename=d_item_rosebomb_3.gif&giftfor=&coordi_ano=0', 'info', 'width=320, height=202,top=400,left=450 scrollbars=no');void(0);\">장미꽃폭탄 터트리기<strong>GO</strong></a></p>";
			jpMsg += "</div></div></div>";
			
			chatMsg.printSystemMsg(jpMsg);					
		}
	}
}

// -------------
//  -chatAd-
// -------------
if ("undefined" == typeof chatAd)
{
	chatAd = {
		isAdvertise : false,
		timeoutId : '',
		timeoutId2 : '',
		init : function(domainid,isAdvertise) {
			chatAd.domainid = domainid;
			chatAd.isAdvertise = isAdvertise;
		},
		initTime : function(remainTime){
			chatAd.remainTime = remainTime;
			var oDate = new Date();
			chatAd.initSec = Date.parse(oDate);
			chatAd.changeTime();
			if(chatAd.changeTime)
				clearInterval(chatAd.timeoutId);
			chatAd.timeoutId = setInterval("chatAd.changeTime();",1000);
		},
		set : function() {
			if (chatAd.isAdvertise)
			{
				var url = _staticUrl+"/ajax/html/saycast/room/getAdvertiseBox";
				var param = {domainid:chatAd.domainid};
				$.get(url,param,function(data) {
					if (data)
					{
						$("#voiceAdBox").html(data);
						if (chatAd.timeoutId2)
							clearTimeout(chatAd.timeoutId2);
						chatAd.timeoutId2 = setTimeout("$('#voiceAdInfo').hide();",60000);
					}
					else
					{
						$("#voiceAdBox").html("");						
					}					 
				});
			}			
			$(".recommendRsoe").hide(); // 추천장미꽃 수 보이게
		},
		changeTime : function() {
			var oDate = new Date();
			var remainTime = chatAd.remainTime - Math.floor((Date.parse(oDate) - chatAd.initSec) / 1000);
			if(remainTime == 0 || remainTime == 60 || remainTime == 300)
			{
				chatAd.set();
				if($("#idAdPop").attr("checked"))
					PopupHandler.openWin(_staticSaycastUrl+"/saycast/room/adPop","adpop",240,137);
			}
			else
			{
				var min = parseInt(remainTime / 60);
				if (min < 10) min = "0" + min;
				var sec = remainTime % 60;
				if (sec < 10) sec = "0" + sec;
				$("#remainTime").html(min+":"+sec);				
			}
		},
		remove : function() {
			$("#voiceAdBox").empty();
			if (chatAd.timeoutId)
				clearInterval(chatAd.timeoutId);
			if (chatAd.timeoutId2)
				clearTimeout(chatAd.timeoutId2);			
		},
		popMoney : function() {
			PopupHandler.openWin(_staticUrl+"/saycast/room/popMoney/"+chatAd.domainid+"/1","popMoney",450,600);
		},
		updateAdPopYN : function(){
			if($("#idAdPop").attr("checked")) var adPopYN = "Y";
			else var adPopYN = "N";
			var url = _staticUrl+"/ajax/json/saycast/room/updateAdPopYN";
			var param = {adPopYN:adPopYN};
			$.getJSON(url,param,function(data){
				if(!data.result)
				{
					alert("오류입니다. 다시 시도해 주세요.");
					if(adPopYN == "Y") $("#idAdPop").attr("checked","");
					else $("#idAdPop").attr("checked","checked");
				}
			});
		}
	}
}

// ---------------
//  -chatWhisper-
// ---------------
if("undefined" == typeof chatWhisper)
{
	chatWhisper = {
		init : function(){
			chatWhisper.layer = $("#participantLayer");
			chatWhisper.listbox = $("#whisperList");
			chatWhisper.listbox.append($("<li id=\"whisper_all\"><a href=\"#none\" onclick=\"chatWhisper.setTarget('all','모두에게'); return false;\">모두에게</a></li>"));
			chatWhisper.layer.hover(
				function(){},
				function(){
					chatWhisper.layer.hide();
				}
			);
			chatWhisper.whisperTo = $("#whisperTo"); 
			chatWhisper.whisperTo.bind("click",function(){
				chatWhisper.layer.show();
			});
			chatWhisper.target = "all";
			chatWhisper.setScroll();
		},
		add : function(msrl,nick){
			if(chatUser.msrl == msrl) return false;
			chatWhisper.listbox.prepend($("<li id=\"whisper_"+msrl+"\"><a href=\"#none\" onclick=\"chatWhisper.setTarget('"+msrl+"','"+nick+"'); return false;\">"+nick+"</a></li>"));
			chatWhisper.setScroll();
		},
		remove : function(msrl){
			$("#whisper_"+msrl).remove();
			chatWhisper.setScroll();
		},
		setTarget : function(msrl,nick){
			chatWhisper.target = msrl;
			chatWhisper.whisperTo.text(nick);
			chatWhisper.whisperTo.attr("title",nick);
			chatWhisper.layer.hide();
		},
		getTarget : function(){
			return chatWhisper.target;
		},
		setScroll : function(){
			if(chatUser.getCnt() > 8)
			{
				chatWhisper.layer.removeClass("participantLayer");
				chatWhisper.layer.addClass("participantLayerSC");
				chatWhisper.listbox.removeClass("whisperList");
				chatWhisper.listbox.addClass("whisperListSC");
			}
			else
			{
				chatWhisper.layer.removeClass("participantLayerSC");
				chatWhisper.layer.addClass("participantLayer");
				chatWhisper.listbox.removeClass("whisperListSC");
				chatWhisper.listbox.addClass("whisperList");
			}
		}
	}
}