/*****                         ALIMI CHAT 1.21.49                       *****/
/*****                              Last Update 2004.02.12, 18:04:21     *****/
/*****                  Copyright ¨Ï Simplex Internet Inc, 2000-2001     *****/
function MemoControl()
{
	var oMemo =[],sMSG=[];
	var oTag;
	var sMEMOURL="/html/memo.html";
	var sSENDURL="/html/memo_send.html";
	var width=352;
	var height=243;
	var bnDEAF=false;

	this.initMemo			= initMemo;
	this.send    			= send;
	this.receive 			= receive;
	this.realReceive	= realReceive;	
	this.nick    			= nick;
	this.part    			= part;
	this.memoSend			= memoSend;
	this.getHtml 			= getHtml;
	this.getUser 			= getUser;
	this.getMsg  			= getMsg;
	this.setMsg  			= setMsg;

	initiate();
	
	function initiate()
	{
		window.attachEvent("onunload",	deleteMemoAll);
		oTag=oClient.oTag;
	}
	
	function initMemo(receiver,sender,msg)
	{
		if (msg) 	setMsg(receiver,msg);
		var rannum = parseInt(Math.random() * 100000);
		if (oMemo[receiver])
		{
			if (!oMemo[receiver].closed)
			{
				oMemo[receiver].focus();
				return;	
			}
		}		
		oMemo[receiver] = window.open(sMEMOURL+ "?sender="+ escape(sender) +"&receiver="+escape(receiver),rannum.toString(),"width="+width+",height="+height+",menubar=no,scrollbars=auto,resizable=yes");
	}
	
	function receive(sender,receiver,msg)
	{
	  	setTimeout('mc.realReceive("'+sender+'","'+receiver+'","'+msg+'")',10);
  }
  
	function realReceive(sender,receiver,msg)
	{
		msg = oClient.oTag.getEmoticon(msg);
		msg=getHtml(sender,msg);
		if (oMemo[sender])
		{
			if (!oMemo[sender].closed)
			{
				oMemo[sender].writeMsg(msg);
				oMemo[sender].focus();
				return;
			}
		}
		initMemo(sender,receiver,msg);
	}
	
	function send(sTO,msg,oConfig,bnOPEN)
	{
		msg = oTag.getHtml(msg,true);
		var html=msg.replace(/\n|\r\n/g,"<br>");
		var tail='';
		var css='';
		if (oConfig.bnBold)		html=html.bold();
		if (oConfig.bnItalic)		html=html.italics();
		if (oConfig.bnUnderline)	html="<u>"+html+"</u>";
		if (oConfig.sColor !="black")	css +="color:"+oConfig.sColor+";";
		if (oConfig.nFontSize !=9)	css +="font-size:"+oConfig.nFontSize+"pt;";
		if (oConfig.sFontFace !="±¼¸²")	css +="font-family:"+oConfig.sFontFace+";";
		if (css)			html="<font style="+css+">"+html+"</font>";
		html+="&nbsp;";
		
		if (oClient && sTO) 
		{
			var cMsg = html;
			var prop = new RegExp("'","gi");
			cMsg = cMsg.replace(prop, "\\'");
			if (!bnDEAF)	oClient.privmsg(sTO,"<MEMO> :"+cMsg);
			
			if (bnOPEN)	{
				initMemo(sTO,oChatInfo.nick,getHtml(oChatInfo.nick,html));
				return;
			}
		}

		if (!oMemo[sTO].closed)
		{
			var temp = getHtml(oChatInfo.nick,html);
			temp = oClient.oTag.getEmoticon(temp);
			oMemo[sTO].writeMsg(temp);
		}
	}
	
	function nick(oldNick,newNick)
	{
		if (oMemo[oldNick]) 
		{
			if (!oMemo[oldNick].closed) 
			{
				oMemo[newNick]=oMemo[oldNick];
				oMemo[newNick].changeTo(newNick);
			}
			oMemo[oldNick]=null;
		}
	}
	
	function part(nick)
	{
	}

	function deleteMemoAll()
	{
		for(prop in oMemo)
			deleteMemo(prop);
	}
	
	function deleteMemo(nick)
	{
		if (!nick)	return;
		if (oMemo[nick]) 
		{
			if (!oMemo[nick].closed)	oMemo[nick].close();
			else				oMemo[nick]=null;
		}
	}
	
	function memoSend()
	{
		if(oChatInfo.isMember()) oc.innerOpen(sSENDURL,310,177,"no");	
		else alert("¸ÕÀú ·Î±×ÀÎ ÇØÁÖ¼¼¿ä");
	}

	function getHtml(nick,msg,color)
	{
		var color="";
		if (!color)	color="black";
		var oUser=getUser(nick);
		var html="";
		html  = "<table width=100% cellpadding=0 cellspacing=0><tr>";
		html += "<td width=26 valign=top>"+oUser.getIcon(nick)+"</td>";
		
		if (oClient.isMe(nick))
		{
			html +="<td valign=top width=80 align=right bgcolor="+color+"><b><font color=white><nobr>"+oUser.getName(nick)+" ¢º</font></td>";
		}
		else	html +="<td valign=top width=80 align=right><b><nobr>"+oUser.getName(nick)+" ¢º</font></td>";
		html +="<td>&nbsp;"+msg+"</td>";
		html +="</tr></table>";
		return html;
	}
	
	function getUser(nick)
	{
		var oUser=new ChatUser(nick);
		return oUser;
	}
	
	function getMsg(nick)
	{
		var tmsg=sMSG[nick];
		sMSG[nick]=null;
		return tmsg;	
	}
	
	function setMsg(nick,msg)
	{
		return sMSG[nick]=msg;	
	}
}

function ChatUserControl()
{
	var oc =		arguments[0];
	var idLIST =		arguments[1];
  var idCOUNTER =	idLIST+"COUNT";
  
	var nVer      =		5;
	var nMAXUSER  =		0;
	var nCOUNT    =		0;
	var sUSERLIST =		'';
	var sROOT =		null;
	
  var oTemp =		{};
	var oUser = 		{};
	/* Public */
	this.init =		init;
	this.list =		list;
	this.exists =		exists;
	this.addList =		addList;
	this.addUser =		addUser;
	this.delUser = 		delUser;
	this.setMaxUser =	setMaxUser;
	this.copyList =		copyList;
	this.getCount =		getCount;
	this.getUser =		getUser;
	this.getMaxUser =	getMaxUser;
	this.getIcon =		getIcon;
	this.getAvatar =	getAvatar;
	this.getHtml =		getHtml;
	this.getSpan =		getSpan;
	this.getSpanHtml =	getSpanHtml;
	this.getName =		getName;
	this.setOper =		setOper;
	this.setDeaf = 	setDeaf;
	this.isMember =		isMember;
	this.isOper =		isOper;
	this.isDeaf =		isDeaf;
	this.isIrcOper=		isIrcOper;

	function init(){
		sUSERLIST='';
		nCOUNT=0;
		oTemp={};
	}
	
	function list()
	{
		init();
		makeList(sROOT);
		oc.rewrite(idLIST,sUSERLIST);
		counter();
	}
	
	function addList(names)
	{
		var temp= names.split(" ");
		for (i=0;i<temp.length;i++)
		{
			if (temp[i])	addNode(temp[i]);
		}
		list();
	}
	
	function exists(nick)
	{
		if (typeof(oUser[nick])=="object")	return true;
		else					return false;
	}
	
	function copyList(oTarget)
	{
		init();
		makeList(sROOT);
		oc.rewrite(oTarget,sUSERLIST);
	}
	
	function getCount()
	{
		return nCOUNT;
	}
	
	function setMaxUser(n)
	{
		nMAXUSER = n;
	}
	
	function getMaxUser()
	{
		return nMAXUSER;
	}
	
	function addUser(nick,oper,id)
	{
		addNode(nick,oper,id);
		var html=oUser[nick].getSpan();
		if (oUser[nick].left)		oc.writeAfter(oUser[nick].left,html);
		else if (oUser[nick].right)	oc.writeBefore(oUser[nick].right,html);
		else{
			var root=oUser[nick].root;
			if (root && oUser[root]){
				if (nick==oUser[root].left)	oc.writeBefore(root,html);
				else oc.writeAfter(root,html);
			}else	oc.rewrite(idLIST,html);
		}
		counter();  
	}
	
	function delUser(nick)
	{
		if (delNode(nick)){
		  oc.remove(nick);
		  counter();
		}
	}
	
	function setOper(nick,oper)
	{
		if (oUser[nick]){
			oUser[nick].setOper(oper);			
			if(oChatInfo.nick == nick) oChatInfo.oper = true;
			oc.rewrite(nick,oUser[nick].getSpanHtml());
		}
	}
	
	function setDeaf(nick,deaf) 
	{
		if (oUser[nick])	oUser[nick].setDeaf(deaf);
	}
	
	function getIcon(nick)
	{
		if (oUser[nick])	return oUser[nick].getIcon();
		else
		{
			addTemp(nick);
			return oTemp[nick].getIcon();
		}
	}
	
	function getHtml(nick)
	{
		if (oUser[nick])	return oUser[nick].getHtml();
		else
		{
			addTemp(nick);
			return oTemp[nick].getHtml();
		}
	}
	
	function getUser(nick)
	{
		if (oUser[nick])	return oUser[nick];
		else
		{
			addTemp(nick);
			return oTemp[nick];
		}
	}
	
	function getSpan(nick)
	{
		if (oUser[nick])	return oUser[nick].getSpan();
		else
		{
			addTemp(nick);
			return oTemp[nick].getSpan();
		}
	}
	
	function getSpanHtml(nick)
	{
		if (oUser[nick])	return oUser[nick].getSpanHtml();
		else
		{
			addTemp(nick);
			return oTemp[nick].getSpan();
		}
	}
	
	function getAvatar(nick)
	{
		if (oUser[nick])	return oUser[nick].getAvatar();
		else
		{
			addTemp(nick);
			return oTemp[nick].getAvatar();
		}
	}
	
	function getName(nick)
	{
		if (oUser[nick])	return oUser[nick].name;
		else
		{
			addTemp(nick);
			return oTemp[nick].name;
		}
	}
	
	function isMember(nick)
	{
		if (oUser[nick])	return oUser[nick].isMember();
		else
		{
			addTemp(nick);
			return oTemp[nick].isMember();
		}
	}
	
	function isOper(nick)
	{
		if (oUser[nick])	return oUser[nick].isOper();
		else			return false;
	}
	
	function isDeaf(nick)
	{
		if (oUser[nick])	return oUser[nick].isDeaf;
		else 				return false;
	}
	
	function isIrcOper(nick)
	{
		if (oUser[nick]) 	return oUser[nick].isIrcOper();
		else			return false;
	}
	
	/* Private */
	function counter()
	{
		var title;
		if (nMAXUSER)	title= nCOUNT+"/"+ nMAXUSER+"¸í";
		else		title= "ÇöÀç Á¢¼ÓÀÚ: "+nCOUNT+"¸í";
		oc.rewrite(idCOUNTER,title);
	}
	
	function addTemp(nick)
	{
		if (oTemp[nick])	return;
		else			oTemp[nick]=new ChatUser(nick);
	}
	
	function getChild(nick,root)
	{
		if (oUser[root].nick == oChatInfo.nick)		return "right";
		var order= compare(oUser[nick].weight,oUser[root].weight);

		if (order==0)	order=compare(nick.toLowerCase(),root.toLowerCase());
		if (order==1)	return "right";
		else		return "left";
	}
	
	function compare(a,b)
	{
		if (a>b)	return 1;
		else if (a==b)	return 0;
		else		return -1;
	}
	
	function getMaxNode(nick)
	{
		if (oUser[nick].right)		return getMaxNode(oUser[nick].right);
		else				return nick;
	}
	
	function makeList(nick)
	{
		if (oUser[nick]){
			makeList(oUser[nick].left);
			sUSERLIST += oUser[nick].getSpan();
			nCOUNT++;
			makeList(oUser[nick].right);
		}
	}	
	
	function addNode(nick,oper,id,flag)
	{
		if (nick.charAt(0)=="@")
		{
			oper=true;
			nick=nick.substring(1);
		}
		else if(!oper)
			oper=false;		
			
		if(oUser[nick])	return false;
		else
		{
			oUser[nick] = new ChatUser(nick,oper,id,flag);
			if (sROOT)	insertNode(nick,sROOT);
			else		sROOT=nick;
			nCOUNT++;
			return true;
		}
	}
	
	function delNode(nick)
	{
		if (nick.charAt(0)=="@")	nick=nick.substring(1);
		if (!oUser[nick])		return false;
		else
		{
			removeNode(nick);
			delete oUser[nick];
			nCOUNT--;
			return true;
		}
	}
	
	function insertNode(nick,root)
	{
		var child= getChild(nick,root);
		if (oUser[root][child])	insertNode(nick,oUser[root][child]);
		else
		{
			oUser[root][child]=nick;
			oUser[nick].root=root;
		}
	}
	
	function removeNode(nick)
	{
		var root = 	oUser[nick].root;
		var left = 	oUser[nick].left;
		var right = 	oUser[nick].right;
		var subRoot;
		
		if (left && right)
		{
			subRoot=getMaxNode(left);
			removeNode(subRoot);
			oUser[subRoot].root=root;

			oUser[subRoot].right=right;
			oUser[right].root=subRoot;

			if (subRoot == left)
			{
				var childLeft = oUser[subRoot].left;
				if (childLeft)	oUser[childLeft].root=subRoot;
			}
			else
			{
				oUser[subRoot].left=left;
				oUser[left].root=subRoot;
			}
		}
		else if(left)
		{
			subRoot = left;
			oUser[subRoot].root=root;
		}
		else if (right)
		{
			subRoot = right;
			oUser[subRoot].root=root;
		}
		else	subRoot = null;

		if (root)
		{
			var child = getChild(nick,root);
			oUser[root][child]=subRoot;
		}
		else
			sROOT = subRoot;
	}
}

function ChatUser(nick,oper,id,flag)
{
	var old_ver=false;
	this.nick =	nick;
	this.oper =	oper;				/* alimi oper */
	this.id =		id;	
	this.group =	nick.charAt(0);	
	this.perm =	nick.charAt(1);		/* member of cafe24? */
	this.avatar =	nick.substring(2,4);	/* avatar image */
	if (this.avatar == '0n') {old_ver=true;this.avatar='00';}
	/*this.flag =	nick.charAt(4);		*/ 
	this.status =	nick.charAt(4);		/* preserved */
	this.ref =		nick.substring(5,13);	/* reference index */
	/* nick/real  name */	
	if (old_ver ==false) this.name =	nick.substring(13); 	
	else this.name =	nick.substring(11);

	this.ircOper=	false;
	this.isDeaf=	false;
	this.root =	null;
	this.left =	null;
	this.right =	null;
	this.loginID ='';
	this.weight=	this.getWeight();
}

ChatUser.prototype=new ChatUserMethod;

function ChatUserMethod()
{
	this.setOper =		setOper;
	this.setDeaf = 	setDeaf;
	this.getIcon =		getIcon;
	this.getStatIcon =	getStatIcon;
	this.getOperIcon =	getOperIcon;
	this.getHtml =		getHtml;
	this.getSpan =		getSpan;
	this.getSpanHtml =	getSpanHtml;
	this.getAvatar =	getAvatar;
	this.getName=		getName;
	this.getIsMe=		getIsMe;
	this.isMember =		isMember;
	this.isOper =		isOper;
	this.isDeaf = 		isDeaf;
	this.isMe   =		isMe;
	this.isIrcOper=		isIrcOper;
	this.updateNick =	updateNick;
	this.getWeight =	getWeight;

	function isMember()
	{
		if (this.perm >=1)	return true;
		else			return false;
	}
	
	function isIrcOper()
	{
		if (this.ircOper == true) return true;
		else		return false;
	}
	
	function setOper(oper)
	{
		this.oper=oper;
	}
	
	function setDeaf(bDeaf)
	{
		this.isDeaf = bDeaf;
	}
	function getIcon(){
		return " <img src=http://webimg.cafe24.com/img/avatar/C/" + this.avatar+".gif align=absmiddle>";
		
		/*
		if (this.group == 'C')  return " <img src=http://webimg.cafe24.com/img/avatar/"+ this.group + "/" + this.avatar + this.flag + ".gif align=absmiddle>";
		else			return " <img src=/img/avatar/"+ this.group + "/" + this.avatar + ".gif align=absmiddle>";*/
	}
	function getStatIcon(){
		if (this.status !=1)	return "";
		else			return " <img src=/img2/status/cast.gif align=absmiddle> ";
	}
	function getOperIcon(){
		if (this.oper)	return " <img src=/img2/status/oper.gif align=absmiddle> ";
		else		return "";
	}
	function getHtml(){
		return this.getIcon() + this.name;
	}
	function getSpan(){
		return "<SPAN class=userspan id="+this.nick+ " onmouseover='this.style.backgroundColor=\"#"+oAlimi.moverColor+"\"' onmouseout='this.style.backgroundColor=\"transparent\"'>"+ this.getSpanHtml() + "</SPAN>";
	}
	function getSpanHtml(){
		/*return this.getHtml() + this.getStatIcon() + this.getIsMe();*/
		return this.getHtml() + this.getStatIcon() + this.getOperIcon() + this.getIsMe();
	}
	function getAvatar(){
		return this.avatar;
	}
	function isOper(){
		if (this.oper)	return true;
		else		return false;
	}
	function isDeaf(){
		if (this.isDeaf)		return true;
		else 		return false;
	}
	function updateNick(){
		/*this.nick=this.group + this.perm + this.avatar + this.flag + this.status+ this.ref + this.name;*/
		this.nick=this.group + this.perm + this.avatar + this.status+ this.ref + this.name;
		this.weight=	this.getWeight();
	}
	function getName(){
		return this.name;
	}
	/* special method for allimi */
	function getIsMe(){
		if (this.isMe())	return "<³ª>";
		else			return "";
	}
	function isMe(){
		if (oClient)
			return oClient.isMe(this.nick);
	}
	function getWeight(){
		if (this.isMe())		return '0' + this.name;
		else if (this.avatar == '00')	return '2' + this.name;
		else				return '1' + this.name;
	}
}
var oClient,oChannel;
var mc;
var oChatInfo = new Object();
var randAttach='';
var oPrompt;
var emoticons = '';

function MiniChatClient(){
	var ID_DOMAIN     = ".cafe24.com";
	var ID_STATISTIC  = "STATISTICS";	
	var ID_USERLIST   = "USERLIST";
	var ID_CMSG       = "CMSG";
  var	ID_PRIVMENU   = "PRIVMENU";
	var sCHANNELNAME  = CHANNE_TYPE + oChatInfo.id;	/* -> channel name */
	var oChatBoard    = new ChatBoard();		    /*Ã¤ÆÃ¹æ */	
	var oP2P          = new P2PControl();

	/* emoticon ¹Þ¾Æ¿À±â */
	emoticons = arguments[0];
	
	var oCmd,oCmdWeb,oTarget;
	var oPrivate = {'nMemo':0,'bDeaf':0, 'nFile':0};		/* Ã¤ÆÃÁ¤º¸, ¸Þ¸ð¼ö½ÅÇã¶ô? */
	var skinOpt={'upcolor':'#000000','upbg':'#b0b0b0','rtblock':'#FFFFFF','nskin':'00'};
	var oIPLOGGEDUSER =		{};
	var oSession;
	var oSProp = ['nick3','avatar3'];	
	oSession = new DhtmlUserDataCookie(ID_DOMAIN,'/',1,'');

	var oEvent  =	{
	      //'004'     : eventLogged,
				'PRIVMSG'	: eventPrivmsg,
				'JOIN'		: eventJoin,
				'JOINOPER'	: eventJoinOper,
				'PART'		: eventPart,
				'QUIT'		: eventQuit,
				'MODE'		: eventMode,
				'NICK'		: eventNick,
				'KICK'		: eventKick,
				'WALLOPS'	: eventWallops,
				'ERROR'		: eventError,
				'DISCON'	: eventDiscon,
				'307'		  : eventUserip,
				'311'		  : eventWhois,				
				'353'			: eventAddList,
				'366'			: eventEndList,
				'401'			: eventNoSuchNick,
				'404'			: eventCantSay,
				'432'			: eventNickError,
				'433'			: eventNickError,
				'438'			: eventNickChangeError,
				'471'     : eventMaxuserError,
				'474'			: eventBanned,
				/* Web Event */
				'PRIVMENU'	: eventPrivMenu,
				'MEMO'		: eventMemo,
				'P2P'     : eventP2P,
				'BTN'		: eventBtn,
				'RELAYMSG'	: eventRelayMsg,
				'RELAYERR'	: eventRelayErr,
				'DEAF'		: eventDeaf
			};

	/* Public Applet Related */
	this.init =		init;
	this.send =		send;
	this.receive =		receive;
	this.connect =		connect;
	this.disconnect =	disconnect;
	this.reset =		reset;


	/* public web related */
	this.isOper       = isOper;
	this.isMe			=isMe;
	this.isAllowed		= isAllowed;
	this.showPrivMenu = showPrivMenu;
	this.hidePrivMenu = hidePrivMenu;	
	this.getTarget		= getTarget;
	this.setTarget		= setTarget;
	this.getPrivate		= getPrivate;
	this.setPrivate		= setPrivate;
	this.getUser      = getUser;
	this.execMenu		  = execMenu;
	this.privmsg		  = privmsg;
	this.channelMsg		= channelMsg;
	this.myMsg        = myMsg;
	this.nick			    = nick;
	this.getCmd		    = getCmd;
	this.getSession		= getSession;
	this.saveSession		=saveSession;
	this.getChannelName = getChannelName;
	this.init         = init;
	/* member */
	this.oTag = new TagControl();
	
	/*public method*/
	function send(msg){
		var chatTmp = document.all['CHATAPPLET'];
		if(typeof(chatTmp.send) == 'undefined')	return false;
		
    document.all['CHATAPPLET'].send(msg);
	}
	function receive(msg){
		//alert(msg);
		/*oChatBoard.wallops(msg); */
		parseAppletMsg(msg);
	}
	function connect(){
		var chatTmp = document.all['CHATAPPLET'];
		if(typeof(chatTmp.connect) == 'undefined')	return false;
		
    if(document.all['CHATAPPLET'].connect(oChatInfo.nick,"site_" + oChatInfo.id)) return true;    
    else return false;
	}
	function disconnect(){
		var chatTmp = document.all['CHATAPPLET'];
		if(typeof(chatTmp.disconnect) == 'undefined')	return false;
			
		document.all['CHATAPPLET'].discon();
	}
	function reset(){
		document.location.reload();
	}
	function showPrivMenu(){
		var oUserSpan=arguments[0];
		if (isMe(oUserSpan.id))		{	/* myself */
			hidemenu("PRIVMENU_MEMO","PRIVMENU_P2P");
			hidemenu("PRIVMENU_OPMODE","PRIVMENU_OPGETIP","PRIVMENU_OPDEAF");
			if(oChatInfo.isMember()) {	/* È¸¿øÀ¸·Î ·Î±×ÀÎÇÑ °æ¿ì */
				showmenu("PRIVMENU_MYINFO");
				showmenu("PRIVMENU_LOGOUT");
				showmenu("PRIVMENU_MULTIHOME");
				hidemenu("PRIVMENU_LOGIN");				
				if (getPrivate('nMemo')=='0') {		/* ¸Þ¸ð ¼ö½Å »óÅÂ */
					showmenu("PRIVMENU_MEMOIGN");
					hidemenu("PRIVMENU_MEMOACC"); 
				} else {             							/* ¸Þ¸ð °ÅºÎ »óÅÂ */
					showmenu("PRIVMENU_MEMOACC");
					hidemenu("PRIVMENU_MEMOIGN");
				}
				if (getPrivate('nFile')=='0') {	
					showmenu("PRIVMENU_FILEIGN");
					hidemenu("PRIVMENU_FILEACC");
				} else {
					showmenu("PRIVMENU_FILEACC");
					hidemenu("PRIVMENU_FILEIGN");
				}
			}	else {	/* ³ª¸ÓÁö °æ¿ì */
				hidemenu("PRIVMENU_LOGOUT");
				hidemenu("PRIVMENU_MEMOIGN","PRIVMENU_MEMOACC");
				hidemenu("PRIVMENU_FILEIGN","PRIVMENU_FILEACC");
  			hidemenu("PRIVMENU_MULTIHOME");			
				showmenu("PRIVMENU_MYINFO","PRIVMENU_MYCHAT","PRIVMENU_LOGIN");
			}
		}	else	{	/* ´Ù¸¥ »ç¶÷ */
			hidemenu("PRIVMENU_LOGIN","PRIVMENU_LOGOUT");
			hidemenu("PRIVMENU_MYINFO","PRIVMENU_MYCHAT");
			hidemenu("PRIVMENU_MEMOACC","PRIVMENU_MEMOIGN");
  		hidemenu("PRIVMENU_FILEIGN","PRIVMENU_FILEACC");
  		hidemenu("PRIVMENU_OPMODE","PRIVMENU_OPGETIP","PRIVMENU_OPDEAF");
			showmenu("PRIVMENU_MEMO","PRIVMENU_P2P");
			
			if(oChatInfo.isOper())
			{
			  if(oChatInfo.ref == oAlimi.operidx)
			  {
			    showmenu("PRIVMENU_OPMODE");			
			    showmenu("PRIVMENU_OPGETIP");
			  }
			  showmenu('PRIVMENU_OPDEAF');
			}
			if(oUserSpan.id.charAt(1)>0) showmenu("PRIVMENU_MULTIHOME");
			else  hidemenu("PRIVMENU_MULTIHOME");
		}
    var pos=oc.getPosition("client");
    menux = pos.x;
    var mh = oc.getObject("PRIVMENU").clientHeight;
    if(h - pos.y < mh) menuy = h - mh + 21; //statistics height : 21
    else               menuy = pos.y;    
    oc.move(ID_PRIVMENU,menux,menuy);
  	oc.show(ID_PRIVMENU);		
	}
	function hidePrivMenu(){
		oc.move(ID_PRIVMENU,0,0);
		oc.hide(ID_PRIVMENU);
	}	
	function nick(){
		oChatInfo.updateNick();		
		send("NICK "+oChatInfo.nick);
	}
	function isOper(nick){
	  send("WHOIS "+nick);	  
	}
	function isMe(nick){
		if (oChatInfo.nick == nick)	return true;
		else				return false;
	}
	function isAllowed(pkey){
		var status = getPrivate(pkey);
		switch(status){
			case '0' : return true;break;
			case '1' : return false;break;
			default  : return true;
		}
	}
	function getTarget(){
		return oTarget;
	}
	function setTarget(oUser){
		oTarget=oUser;
	}
	function setPrivate(pkey,value){
		oPrivate[pkey] = value;
	}
	function getPrivate(pkey){
		return (oPrivate[pkey]) ? oPrivate[pkey] : 0;
	}
	function getUser(nick){
		var oUser=new ChatUser(nick);
		return oUser;
	}	
	function privmsg(target,msg){
	  sMSG = "PRIVMSG "+target+" :"+msg;
 		setTimeout("oClient.send('"+sMSG+"')",0);
	}
	function channelMsg(msg, o_msg){
		privmsg("#"+sCHANNELNAME,msg);
		if(o_msg)	msg = o_msg;
	  myMsg(msg);
	}
	function myMsg(msg){
		if (oChatBoard)		oChatBoard.write(oChatInfo.nick,msg);
  }
	function getCmd(){
		return oCmd;
	}
	function getSession(prop){
		if (oSession) {
			return oSession.get(prop);
		}
	}
	function saveSession(){
		if (oSession){
			var prop;
			for(var i=0;i<oSProp.length;i++){
				prop = oSProp[i];
				if (prop == "nick3")		prop = "nick";
				else if (prop == "avatar3")	prop = "avatar";
				if (randAttach) {
					var str = oChatInfo['nick'];
					if (str) {
						var s = str.indexOf (randAttach);
						oChatInfo['nick'] = str.substring(0,s);
					}
				}
				oSession.set(oSProp[i],oChatInfo[prop]);
			}
		}
	}
	function getChannelName(){
	  return sCHANNELNAME;
	}
	/*private ircd event*/	
	function eventPrivmsg(){
		var name;
		var receiver=oCmd.param[0];
                oCmd.msg = oCmd.msg.replace(/\(/g,'{');
                oCmd.msg = oCmd.msg.replace(/\)/g,'}');
		if (oCmd.msg.charAt(0)=="<"){
			parseWebMsg(oCmd.sender,receiver,oCmd.msg);
		}	else{
			if (receiver.charAt(0)=="#")	oChatBoard.write(oCmd.sender,oCmd.msg);
			return;
			if (isBanned(oCmd.sender))		return;			
		}
	}
	function eventWhois(){
		var nick=oCmd.param[1];
		alert(nick + ' '+ oCmd.msg);
		if (oTempUser[nick]){
			oTempUser[nick].id = oCmd.msg;
			/*else if (oCmd.command=="319")	oTempUser[nick].channels=oCmd.msg;*/
		}
	}
	function eventUserip(){
		var at;
		if (at=oCmd.msg.indexOf("=")){
			var nick=oCmd.msg.substring(0,at);
			if(!oIPLOGGEDUSER[nick]){
			  at=oCmd.msg.indexOf("@")
			  var ip=oCmd.msg.substring(at+1);
			  var oForm = document.OPERFORM;
			  oForm.mode.value = "ip";
			  oForm.value.value = oAlimi.operidx+"|"+ip;
			  oForm.action = CAFEHOST + "/src/php/hidden/save_alimi_log.php";
			  hiddenFrame = document.all["HIDDENFRAME"];
			  oForm.target = hiddenFrame.name;
			  oForm.submit();
			  oIPLOGGEDUSER[nick] = ip;
			}else{
			  alert(oIPLOGGEDUSER[nick]);
			}
		}
	}	
	function eventPart(){
		oc.showProps(oCmd.param[0]);
		if(oCmd.param[0]) {
			var name=oCmd.param[0].substring(1);			
			if(!oClient.getPrivate('bDeaf')) oChannel.part(oCmd.sender);
			else  oClient.disconnect();
		}
	}	
	function eventJoin()
	{
		if (!isMe(oCmd.sender))
		{
		  oChannel.join(oCmd.sender);
		}
		else
		{
  	  if(alimiType == "gold" && oAlimi.appearance == "T") {  	  	
  	  	sendWeblog();
  	  }  	  
		}
		if(oAlimi.sounds == "T")
		{
			listenBell();
		}
	}
	
	function eventJoinOper()
	{
		var nick = oCmd.sender;
    if (!isMe(nick))
    {
    	oChannel.setOper(nick,'true');
    }
	}
	
	function eventError()
	{
		if (oCmd.msg.substring(1,13)=="Closing Link")	oCmd.msg = "°úµµÇÑ ´ëÈ­ÀÔ·Â(<font color=red>µµ¹èÇàÀ§ ±ÝÁö</font>)À¸·Î ÀÎÇØ  ¼­¹ö·ÎºÎÅÍÀÇ Á¢¼ÓÀÌ ²÷¾îÁ³½À´Ï´Ù. ÀçÁ¢¼Ó¹Ù¶ø´Ï´Ù";		
	}
	
	function eventQuit()
	{
		oChannel.part(oCmd.sender);
	}
	
	function eventMode()
	{
		if (oCmd.param.length < 3)	return;		
		var name=oCmd.param[0].substring(1);	/* channel */
		var sign=oCmd.param[1].charAt(0);		/* mode flag sign */
		var mode=oCmd.param[1].charAt(1);		/* mode char */
		if (sign=="+")	sign=true;
		else		sign=false;
		if (mode =="o"){
		  var unick = oCmd.param[2];
		  if(sign)  oChannel.setOper(unick,sign);
		}
	}
	
	function eventAddList()
	{
		var temp = oCmd.msg.split(" ");		
		if (temp.length <=2 ) 
		{ 			// The first user of this channel 			
      var sMSG1 = 'SETOPER #'+sCHANNELNAME+' +o '+oAlimi.operid;
      oClient.send(sMSG1);
      if(oAlimi.maxuser > 0) 
      {
      	var sMSG2 = 'MODE #'+sCHANNELNAME+' +l '+oAlimi.maxuser;
      	oClient.send(sMSG2);
      }
      if (parseInt(oChatInfo.ref,10) != parseInt(oAlimi.operidx,10))	oCmd.msg = oCmd.msg.substr(1);
		}
		oChannel.addNames(oCmd.msg);
	}	
	
	function eventEndList()
	{
		var name=oCmd.param[1].substring(1);
		oChannel.parseNames();
	}
	
	function eventNick(){
		if (oCmd.msg){
			var nick=oCmd.msg;			
			oChannel.nick(oCmd.sender,nick);
		}
	}
	function eventNickChangeError(){}
	function getLength(s){
		var len = 0;
		if ( s == null ) return 0;
		for(var i=0;i<s.length;i++){
			var c = escape(s.charAt(i));		
			if ( c.length == 1 ) len++;
			else if ( c.indexOf("%u") != -1 ) len+=2;
			else if ( c.indexOf("%") != -1 ) len+=c.length/3;
		} 
		return len;
	}
	function eventMaxuserError()
	{
	  oClient.disconnect();
	  var oBoard = oc.getObject(ID_CMSG);
		oBoard.insertAdjacentHTML("beforeEnd","ÃÖ´ëÁ¢¼ÓÀÚ 300¸íÀ» ÃÊ°úÇÏ¿© Á¢¼ÓÇÏ½Ç ¼ö ¾ø½À´Ï´Ù.");
	}
	function eventNickError(){
		var oldNick=oCmd.param[1];
		randAttach = parseInt (Math.random()*1000);
		oChatInfo.name += randAttach;
		if (getLength(oChatInfo.name) >18) oChatInfo.name = parseInt(Math.random()*1000000);
		oClient.nick();
	}
	function eventCantSay(){
	}
	function eventWallops(){
		if (oChatBoard) 	oChatBoard.wallops(oCmd.msg);
	}
	function eventNoSuchNick(){
	  /*
		var oName = oCmd.param[1];
		msg = oName+"°ú °°Àº »ç¶÷Àº ¾ø½À´Ï´Ù.";
		oChatBoard.write(oChatInfo.nick,msg);
		*/
	}
	function eventDiscon(){}
	function eventBanned(){
		var name=oCmd.param[1].substring(1);
	}
	function parseAppletMsg(msg){
		var more,temp;
		oCmd = new ClientCommand();
		if(msg.indexOf(":")==0){
			msg=msg.substring(1);
			more=msg.indexOf(" ");
			temp=msg.substring(0,more);
			msg=msg.substring(more+1);
			more=temp.indexOf("!");
			if (more>0){
				oCmd.sender=temp.substring(0,more);
				more=temp.indexOf("@");
				if (more>0)	oCmd.host=temp.substring(more+1);
			}
			more=msg.indexOf(":");
			if (more>0){
				oCmd.msg=msg.substring(more+1);
				msg=msg.substring(0,more-1);
			}
			more=msg.indexOf(" ");
			if (more >0){
				oCmd.command=msg.substring(0,more);
				msg=msg.substring(more+1);
				oCmd.param=msg.split(" ");
			}
			else	oCmd.command=msg;
		}	else{
			more=msg.indexOf(" ");
			oCmd.command=msg.substring(0,more);
			oCmd.msg=msg.substring(more+1);
		}
		if(oCmd.command)	execEvent(oCmd.command);
	}

	/*****  private web event *****/
	function eventPrivMenu(){
		var nick=oCmdWeb.receiver.id;
		var group=oCmdWeb.receiver.channel;
		switch(oCmdWeb.param){
			case 'MEMO' 	  : hidePrivMenu();mc.initMemo(nick,oChatInfo.nick);break;
			case 'FILE' 	  : hidePrivMenu();mc.initMemo(nick,oChatInfo.nick);break;			
			case 'LOGIN'	  : hidePrivMenu();mylogin();break;
			case 'LOGOUT'   : hidePrivMenu();mylogout();break;
			case 'MYINFO' 	: hidePrivMenu();myinfo();break;
			case 'MYCHAT'   : hidePrivMenu();goChat();break;
			case 'P2P'  	  : hidePrivMenu();oP2P.open(nick,'SERVER');break;
			
			case 'OPMODE'	  : hidePrivMenu();opMenu(nick,'MODE');break;
			case 'OPDEAF'	  : hidePrivMenu();opMenu(nick,'DEAF');break;
		  case 'OPGETIP'  : hidePrivMenu();opMenu(nick,'IP');break;		  			
			case 'MEMOIGN'	: hidePrivMenu();setPrivate('nMemo','1');break;
			case 'MEMOACC'	: hidePrivMenu();setPrivate('nMemo','0');break;
			case 'FILEIGN'	: hidePrivMenu();setPrivate('nFile','1');break;
			case 'FILEACC'	: hidePrivMenu();setPrivate('nFile','0');break;			
			case 'MULTIHOME': hidePrivMenu();mywww(nick);break;			
		}
	}
	function eventMemo(){
		var nick = oCmdWeb.sender;
		var msg = oCmdWeb.msg;
		if (getPrivate('nMemo') == '1') {
			oClient.privmsg(nick,"<MEMO> : <font color=red>"+oChatInfo.name+"´Ô²²¼­ ¸Þ¸ð¼ö½Å °ÅºÎÇÏ¼Ì½À´Ï´Ù.</red>");
			 return;
		}
		mc.receive(nick,oChatInfo.nick,msg);
	}
	function eventP2P(){
		setTarget(oCmdWeb.sender);
		if (oCmdWeb.param[0]=="REQUEST"){
			if(oClient.getPrivate('nFile') == 0) oP2P.open(oCmdWeb.sender,"CLIENT");
			else  {/*ÆÄÀÏ¼ö½Å°ÅºÎ¸Þ¼¼Áö¸¦ º¸³½´Ù.*/}
		}else if(oCmdWeb.param[0] == "REJECT"){
		  alert("ÆÄÀÏ ¼ö½ÅÀ» °ÅÀýÇß½À´Ï´Ù.");		  
		  oP2P.finishP2P(oCmdWeb.sender);
		  return;
		}else if(oCmdWeb.param[0] == "CLOSEALL"){
		  alert("ÆÄÀÏ º¸³»±â¸¦ Ãë¼ÒÇÏ¼Ì½À´Ï´Ù.");
 		  oP2P.finishP2P(oCmdWeb.sender);
		}
		oP2P.parse(oCmdWeb.sender,oCmdWeb.param);
	}

	function eventBtn(){
		if (alimi_disabled)	return; 
		switch(oCmdWeb.param){
			case 'MEMO' 	: mc.memoSend();break;
			case 'MUSIC'  	: underConstruction();break;
			case 'MYINFO'  	: myinfo();break;
			case 'LOGIN'	: mylogin();break;
		}
	}
	function eventRelayMsg(){
		if (oCmdWeb.msg.charAt(0)!="<") oCmdWeb.msg="<MEMO> :"+oCmdWeb.msg;
		parseWebMsg(oCmdWeb.param,oCmdWeb.receiver,oCmdWeb.msg);
	}
	function eventRelayErr(){
		parseAppletMsg(":"+oCmdWeb.msg);
	}
	function eventDeaf() {
		if (isMe(oCmdWeb.receiver) && oCmdWeb.msg == 'true') setPrivate('bDeaf',1);
	}
	function eventKick() {
		var name=oCmd.param[0].substring(1);
		nick=oCmd.param[1];
		var cookieKick = 'kicked_'+oChatInfo.id+'=';
		var today = new Date(); 
		var expires = new Date( today.getTime() + 60*60*1000 );
		if (isMe(nick)){
			var Sender = oCmd.sender.substring(13);
			setTimeout("oClient.send('PART')",0);
			document.cookie=cookieKick+'1 ;expires='+expires.toGMTString();
		}else{
			if(name) oChannel.part(nick);
		}
	}
	function parseWebMsg(sender,receiver,msg){
		oCmdWeb 		= new ClientCommand();
		oCmdWeb.sender		= sender;
		oCmdWeb.receiver	= receiver;
		oCmdWeb.msg 		= msg;
		var more=msg.indexOf(">");
		oCmdWeb.command = msg.substring(1,more);
		msg=msg.substring(more+1);
		if (msg){
			more=msg.indexOf(":");
			if (more >0){
				oCmdWeb.msg=msg.substring(more+1);
				msg=msg.substring(0,more-1);
			}
			more=msg.indexOf("|");
			if (more >0)	oCmdWeb.param=msg.split("|");
			else		oCmdWeb.param=msg;
		}
		if (oCmdWeb.command)	execEvent(oCmdWeb.command);		
	}
	function execMenu(command,param){
		oCmdWeb 		= new ClientCommand();
		oCmdWeb.command 	= command;
		oCmdWeb.param 		= param;
		oCmdWeb.receiver	= getTarget();
		if (command)		execEvent(command);
	}
	function execEvent(cmd){
		if (typeof(oEvent[cmd])=="function")		oEvent[cmd]();
	}
	/*********** private ************/
	function init(){
    oChannel =  new ChannelObject(ID_USERLIST,sCHANNELNAME);
		mc=new MemoControl();
		oClient.send("JOIN #"+sCHANNELNAME);
	}
  function whichItem(id){
	  var e = oc.getObject(id);
	  while(e.tagName != "TR"){
	    e = e.parentElement;
	  }
	  return e;
  }
  function showmenu(){
    for(var i=0; i<arguments.length; i++){
      var obj=whichItem(arguments[i]);
      obj.style.display="";
    }
  }
  function hidemenu(){
    for(var i=0; i<arguments.length; i++){
      var obj=whichItem(arguments[i]);
      obj.style.display="none";
    }
  }
	function listenBell(){
	  if (navigator.appName.match(/Explorer/i))	CST_VER =navigator.appVersion.match(/MSIE \d+.\d+/)[0].split(" ")[1];
	  else						CST_VER =0;	  
		if(CST_VER >= 5.5){	
			if(typeof window.document.all["mplayer"] == "object")  window.document.all["mplayer"].play();
		}
  }
	function sendWeblog(){
		var obj = document.all["totalCnt"];
		
		if( typeof(obj) == "object" )
		{
			document.all["totalCnt"].innerHTML = total_view;
			document.all["todayCnt"].innerHTML = today_view;	
		}
		/*
		var oForm = document.OPERFORM;
		oForm.mode.value = "count";		
		oForm.value.value = oAlimi.operidx;		
		oForm.action = CAFEHOST + "/src/php/alimi/save_alimi_log.php";
		hiddenFrame = document.all["HIDDENFRAME"];
		oForm.target = hiddenFrame.name;
		oForm.submit();		
		*/
	}
	function myinfo(){		
		if (oChatInfo.isOper())
			oc.open("/php/roommenu.php?id="+oChatInfo.id+"&chan=oper&loginID="+oChatInfo.loginID,"_roommenu",360,400,'yes');
		else
			oc.open("/php/roommenu.php?id="+oChatInfo.id+"&chan=nick&loginID="+oChatInfo.loginID,"_roommenu",360,400,'yes');
	}
	function goChat(){		
	  oc.open(CAFEHOST+"/mychat/index.php?operator=" + oAlimi.operid + "&unick="+oChatInfo.nick,"MYCHAT",780,500,"no");
	}
	function mylogin(){		
		if (!oChatInfo.isMember())	oc.open("/php/alimi_login.php?ver=ver2","_loginmenu",360,455,'auto');  
		else {
		  if (oChatInfo.isOper()){
		  	oc.open("/php/roommenu.php?loginID="+oChatInfo.loginID+"&chan=oper","_roommenu",360,400,'yes');
		  }else{
		    oc.open("/php/roommenu.php?loginID="+oChatInfo.loginID+"&chan=nick","_roommenu",360,400,'yes');
		  }
		}
	}
	function mylogout(){		
	  if(alimiType == "gold")	document.location = "/php/logout.php?id="+oChatInfo.id+"&red_url=goldalimi/index.php";
		else  document.location = "/php/logout.php?id="+oChatInfo.id;
	}
	function mywww(nick){		
		ref = nick.substring(5,13);
		if (ref == '0000000' ) {
			alert('ºñÈ¸¿øÀÌ¹Ç·Î ¸¶ÀÌµûµûµû°¡ ¾ø½À´Ï´Ù.');
		}	else {
			mylocation = CAFEHOST+'/src/php/mywww/index.php?uidx='+ref;
			//alert(mylocation);
			window.open(mylocation,'_blank','width=880,height=560,menubar=no,resizable=yes');
		}
	}
	function opMenu(nick,menu){
		name = nick.substring(12);
		if (!oChatInfo.isOper()) { alert('´ç½ÅÀº ¹æÀåÀÌ ¾Æ´Õ´Ï´Ù.'); return; }
		if (menu =='DEAF'){
			oChannel.setDeaf(nick,true);
			privmsg(nick,"<DEAF> :true");
			var sMSG1 = "MODE #"+sCHANNELNAME+" -o  "+nick;
			var sMSG2 = "BANIP #"+sCHANNELNAME+" "+nick;
			var sMSG3 = "KICK #"+sCHANNELNAME+" "+nick;
			setTimeout("oClient.send('"+ sMSG1 +"')",0);
			//setTimeout("oClient.send('"+ sMSG2 +"')",0);
      setTimeout("oClient.send('"+ sMSG3 +"')",0);			
		}else if(menu == "IP"){
      var sMSG1 = "USERIP "+nick;
 			setTimeout("oClient.send('"+ sMSG1 +"')",0);
		}else if(menu == "MODE"){
		  var sMSG1 = "MODE #"+sCHANNELNAME+" +o "+ nick;
 			setTimeout("oClient.send('"+ sMSG1 +"')",0);
		}
	}
	function ClientCommand(){
		this.sender='';
		this.receiver='';
		this.command='';
		this.param='';
		this.msg='';
	}
}
function underConstruction(){
	 alert ('ÁË¼ÛÇÕ´Ï´Ù. ÇöÀç ±â´ÉÁØºñÁßÀÔ´Ï´Ù');
}
function operLogin(){
	oc.open("/php/opermenu.php","_opermenu",360,260,'auto');
}
function roomMenu(){
	oc.open("/php/roommenu.php?id="+oChatInfo.id,"_roommenu",360,360,'auto');
}
function operMenu(){
	oc.open("/php/opermenu1.php?id="+oChatInfo.id,"_roommenu",360,260,'auto');
}
function ChannelObject(){
	var GROUPNAME   =	arguments[0];
	var CHANNELNAME = arguments[1];
	var oUserList   = new ChatUserControl(oc,GROUPNAME);
	var NAMES="";
	
	this.nick=nick;
	this.join=join;
	this.part=part;
	this.addNames=addNames;
	this.parseNames=parseNames;
	this.getCount=getCount;
	this.addmember=addmember;
	this.list=list;
	this.isDeaf=isDeaf;
	this.setDeaf=setDeaf;
	this.setOper=setOper;		

	function nick(oldNick,newNick){		
		if (oUserList.exists(oldNick)){
			var oper=oUserList.isOper(oldNick);
			mc.nick(oldNick,newNick);
			oUserList.delUser(oldNick);			
			oUserList.addUser(newNick,oper);
			oUserList.list();
		}
	}
	function join(nick){
		oUserList.addUser(nick);
	}
	function part(nick){
		if (oUserList.exists(nick))	oUserList.delUser(nick);
	}
	function addNames(str){
		NAMES+=str;
	}
	function parseNames(){
		if (NAMES){
			oUserList.addList(NAMES);
			NAMES ='';
		}
	}
	function getCount(){
		return oUserList.getCount();
	}
	function addmember(){
		oUserList.addmember();
	}
	function list(){
		oUserList.list();
	}
	function isDeaf(nick){
		return oUserList.isDeaf(nick);
	}
	function setDeaf(nick,deaf){
		oUserList.setDeaf(nick,deaf);
	}
	function setOper(nick,oper){
		oUserList.setOper(nick,oper);
	}
}

function TagControl(){
	var bnUseEmbed = arguments[0];
	var reTag = /^(A|B|BR|BIG|BLOCKQUOTE|BUTTON|CENTER|DIV|FONT|HR|MARQUEE|P|SMALL|SPAN)$/i;
	var reAttr = /\w+=[\'\"]?[^\'\" ]*[\'\"]?/g;
	var reStyle = /[\w\-]+:[^;\'\"]+/g;
	var reRemoveSpace = / *([=;:]) */g;
	var reInvalid = /^ON|SCRIPT/i;
	var reLink = /((http|mms|ftp):\/\/[\w\d\/\~\.\-\_\&\%\:]+)/ig;
	var nMAXPIXEL = 100; /* ÅÂ±×Áß width,height °ªÁ¦ÇÑ */

	this.getTag =		getTag;
	this.getHtml =		getHtml;
	this.getText =		getText;
	this.autolink =		autolink;
	this.getEmoticon = getEmoticon;
	
	function getTag(str)
	{
		var sTagName,sTagAttr;
		var sTag = str;
		var nIdx=str.indexOf(" ");
		
		if (nIdx >0)
		{
			sTagName = sTag.substring(0,nIdx);
			sTagAttr = getAttribute(sTag.substring(nIdx+1));
		}
		else
		{
			sTagName = sTag;
			sTagAttr = '';
		}
		
		sTagName = sTagName.toUpperCase();
		
		if (sTagName.charAt(0)=="/")
		{
			return "</" + sTagName.substring(1) + ">";
		}
		else if (reTag.test(sTagName))
		{
			if (sTagName == "A")	sTagAttr +=" target=_blank ";
			else if (sTagName=="EMBED")
			{
				if (!bnUseEmbed)
				{
					alert ('EMBED ÅÂ±×´Â È¸¿ø¸¸ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.');
					return "";
				}
				else if (sTagAttr.match(/\.swf/i)) 
				{
					alert ('Flash ÆÄÀÏÀº »ðÀÔÇÒ¼ö ¾ø½À´Ï´Ù.');
					return "";
				}
			}
			return "<" + sTagName + " " + sTagAttr +">";
		}
		else	return "&lt;"+ str + "&gt;";
	}
	
	function autolink(str){
		return str;
		//return str.replace(reLink,"<a href=$1 target=_blank>$1</a>");
	}
	
	function getEmoticon(msg)
	{
		for(prop in emoticons)
		{
			var temp = "<img src=http://chat.cafe24.com/img/emoticons/"+emoticon[prop]+" align='absmiddle'>";
			
			prop = new RegExp(prop,"gi");
			msg = msg.replace(prop, temp);
		}
		return msg;
	}
	
	function getHtml(msg,bnTag)
	{
		var lt,gt,html,tag;
		html ='';
		
		while(msg)
		{
			lt=msg.indexOf("<");
			
			if (lt >=0)
			{
				html += autolink(msg.substring(0,lt));
				msg = msg.substring(lt+1);
				gt=msg.indexOf(">");
				
				if (gt >=0)
				{
					tag= msg.substring(0,gt);
					lt=tag.indexOf("<");
					
					if (lt>=0)
					{
						html +="&lt;";
					}
					else
					{
						if (bnTag)	html += getTag(tag);
						else		html += "&lt;" + tag + "&gt;";
						msg = msg.substring(gt+1);
					}
				}
				else
				{
					msg = msg.replace(/</g,"&lt;");
					html += "&lt;" + autolink(msg);
					msg = null;
				}
			}
			else
			{
				html += autolink(msg);
				msg=null;
			}
		}
		return html;
	}
	
	function getText(msg)
	{
		var lt,gt,text;
		text ='';
		while(msg){
			lt=msg.indexOf("<");
			if (lt>=0){
				text += msg.substring(0,lt);
				msg= msg.substring(lt);
				gt=msg.indexOf(">");
				if (gt >=0)	msg = msg.substring(gt+1);
				else{
					text += msg;
					msg =null;
				}
			}
			else{
				text +=msg;
				msg =null;
			}
		}
		return text;
	}

	/* Private */
	function getAttribute(str){
		if (!str)	return '';
		var oAttr,sName,sValue,nIdx;
		var sAttr='';
		str=str.replace(reRemoveSpace,"$1");
		oAttr=str.match(reAttr);
		if (!oAttr)	return str;
		for (var i=0;i<oAttr.length;i++){
			if (!reInvalid.test(oAttr[i])){
				nIdx = oAttr[i].indexOf("=");
				if(nIdx>0){
					sName = oAttr[i].substring(0,nIdx).toUpperCase();
					sValue = oAttr[i].substring(nIdx+1);
					if (sName == "STYLE")	sAttr += sName + "='"+ getStyle(sValue) + "' ";
					else if (isValid(sName,sValue))		sAttr += oAttr[i] + " ";
				}
			}
		}
		return sAttr;
	}
	function getStyle(str){
		if (!str)	return '';
		var oStyle,nIdx,sName,sValue;
		var sStyle='';
		oStyle= str.match(reStyle);
		if (!oStyle)	return str;
		for (var i=0;i<oStyle.length;i++){
			nIdx = oStyle[i].indexOf(":");
			if (nIdx>0){
				sName = oStyle[i].substring(0,nIdx).toUpperCase();
				sValue = oStyle[i].substring(nIdx+1);
				if (isValid(sName,sValue))	sStyle += oStyle[i] + ";";
			}
		}
		return sStyle;
	}
	function isValid(name,value){
		if (value.indexOf(":") >0 && !reLink.test(value))	return false;
		value = parseInt(value);
		if ((name == "WIDTH" || name == "HEIGHT") && value > nMAXPIXEL){
			alert (name + ' ¼Ó¼º°ªÀÌ ³Ê¹« Å« °ü°è·Î ¹«½ÃµÇ¾ú½À´Ï´Ù.');
			return false;
		}
		else if (name == "FONT-SIZE" && value > 20){
			alert (name + ' ¼Ó¼º°ªÀÌ ³Ê¹« Å« °ü°è·Î ¹«½ÃµÇ¾ú½À´Ï´Ù.');
			return false;
		}
		else	return true;
	}
}
function DhtmlUserDataCookie(domain,path,dExpire,secure){	
	this.domiain=	domain;
	this.path=	path;
	this.dExpire=	dExpire;
	this.secure=	secure;	
	this.set =	setAttribute;
	this.get =	getAttribute;
	this.save =	save;
	
	function setAttribute(key,value){
	  var expires=new Date();
	  expires.setMonth(expires.getMonth() + this.dExpire);
/*    expires.setDate(expires.getDate() + this.dExpire);*/
	  if (!value)	return;	
		document.cookie = key + "=" + escape(value) + ((expires) ? "; expires=" + expires.toGMTString() : "") + ((this.path) ? "; path=" + this.path : "") + ((this.domain) ? "; domain=" + this.domain : "") + ((this.secure) ? "; secure" : "");
	}	
	function getAttribute(name){
		var arg = name + "=";
		var alen = arg.length;
		var clen = document.cookie.length;
		var i = 0;
		while (i <clen){
			var j = i + alen;
			if (document.cookie.substring(i, j) == arg)	return getCookieVal (j);
			i = document.cookie.indexOf(" ", i) + 1;
			if (i == 0)		break;
		}
		return null;
	}	
	function getCookieVal(offset){
		var endstr = document.cookie.indexOf (";", offset);
		if (endstr == -1)	endstr = document.cookie.length;
		return unescape(document.cookie.substring(offset, endstr));
	}
	function save(){
		return true;
	}
}
function ChatBoard(){
	var ID_CMSG     = "CMSG";
	var sINITVALUE  = "±ÛÀ» ÀÔ·ÂÇÏ¼¼¿ä..";
	var oBoard      = oc.getObject(ID_CMSG);
	var ID_PROMPT   = "sendPrompt";	
	oPrompt     = oc.getObject(ID_PROMPT);
	
	this.write=write;
	this.wallops=wallops;
	initiate();
	
	function initiate(){
		with(oPrompt){
			attachEvent("onfocus",focusBoard);
		}
		with(oBoard){
			onmousedown=focusBoard;
			onresize=scrollEnd;
		}	
	}	
	function scrollEnd(){	
		if ( oBoard ) {
			var value= oBoard.scrollHeight- oBoard.clientHeight;
			if (value >0)	oBoard.scrollTop=value;		
		}
	}
	function focusBoard(){
		if (oPrompt.value == sINITVALUE)	oPrompt.value='';		
	}
	function write(nick,msg){		
		var color;
		var oTemp=new ChatUser(nick);

		/* Emoticon parser */
		msg = msg.replace(/</g,"&lt;");
		msg = oClient.oTag.getEmoticon(msg);

		var html="<table cellpadding=0 cellspacing=0 border=0><tr><td valign='top' unick="+nick+">"+oTemp.getIcon()+"</td>";
    if(oClient.isMe(nick)){
      bColor = "#000000";
      fColor = "#ffffff";
    }else{
      bColor = "#ffffff";    
      fColor = "#000000";
    }
		html+="<td unick="+nick+"><table cellpadding=0 cellspacing=0 border=0 style='table-layout:fixed;word-break:break-all;'>";
		html+="<tr><td class=boardText style='cursor:hand;' unick="+nick+">";
		html+="<font unick="+nick+" style='background-color:"+bColor+";color:"+fColor+";font-weight:bold;'>"+oTemp.getName()+" ¢º</font>";
		html+="<font unick="+nick+" color='#000000'>"+msg+"</font></td></tr></table></td>";
		html+= "</tr></table>";
		oBoard.insertAdjacentHTML("beforeEnd",html);				
		scrollEnd();
	}
	function wallops(msg){
		msg="<table cellpadding=0 cellspacing=0 style=''><tr><td class=boardText><b>[°øÁö»çÇ×]</b> - "+msg+" </td></tr></table>";		
		oBoard.insertAdjacentHTML("beforeEnd",msg);				
		scrollEnd();		
	}
}
function P2PControl(){
  var oWindow = new Array;
  this.open   = open;  
  this.parse  = parse;
  this.finishP2P= finishP2P;
  
	function open(nick,type){
	  if(type == "SERVER"){
     	oWindow[nick] = oc.innerOpen("/html/P2Pserver.html",400,300);
	  }else if(type == "CLIENT"){
     	oWindow[nick] = oc.innerOpen("/html/P2Pclient.html",312,123);	     
	  }
	}
	function parse(nick,param){
	  if(oWindow[nick]){
	    oCmd = {};
	    oCmd.cmd=param[0];
	    oCmd.param=param[1];
	    oCmd.session=param[2];
	  }
	}
	function finishP2P(nick){
	  if(oWindow[nick]){
	    oWindow[nick].close();
	    delete oWindow[nick];
	  }
	}
}
