

var gPopupTimerId;
var gDivIdMouseIn="";
var g_sLnkSpan="onmouseenter=\"this.style.color='#FF0000';\" onmouseleave=\"this.style.color='';\"";
//iFlags 1- showX, 2 - sEvalExpr is HTML
function PopDivShow(sDivId,e,sEvalExpr,iOffsetX,iOffsetY,iFlags){
	var sHtml="";
	if (String(sEvalExpr).length>0)
		sHtml=((0==(iFlags & 2))? eval(sEvalExpr): sEvalExpr);
	if (gDivIdMouseIn!=sDivId)
		DivHide(gDivIdMouseIn,true);
	if (!document.getElementById) return;
	var divEl=document.getElementById(sDivId);
	if (!divEl) return;
	divEl.innerHTML=popupFormat((iFlags & 1)?sDivId:'',sHtml);
	DivObjSetPosRelev(divEl,e,iOffsetX,iOffsetY);
	if(divEl.scrollIntoView)
		window.setTimeout("document.getElementById('" + sDivId + "').scrollIntoView(false)",10);
	divEl.style.visibility = "visible";
	gPopupTimerId=window.setTimeout("DivHide('" + sDivId + "',false)",4000);
}
function DivHide(sDivId,bForce){
	if (sDivId.length<1) return;
	if (gDivIdMouseIn==sDivId && !bForce) return;
	var divEl=document.getElementById(sDivId);
	if (divEl){
		divEl.style.visibility = "hidden";
		divEl.style.left='-600px';
		divEl.style.top='-600px';
	}
}
function DivObjSetPosRelev(divEl,e,iOffsetX,iOffsetY){
	if(divEl && e){
		if (document.body && document.body.scrollLeft) iOffsetX+=document.body.scrollLeft;
		if (document.body && document.body.scrollTop) iOffsetY+=document.body.scrollTop;
		divEl.style.left=e.clientX+iOffsetX;
		divEl.style.top=e.clientY+iOffsetY;
	}
}
function mOver(sDivId){
	var divEl=document.getElementById(sDivId);		
	if (gPopupTimerId)	window.clearTimeout(gPopupTimerId);
	gDivIdMouseIn=sDivId;
}
function mOut(sDivId){
	if (gDivIdMouseIn!=sDivId){
		DivHide(gDivIdMouseIn,true);
	}
	var divEl=document.getElementById(sDivId);
	gDivIdMouseIn="";
	gPopupTimerId=window.setTimeout("DivHide('" + sDivId + "',false)",800);
}
function popupFormat(sDivId,sHtml){
	var sOut='<table border=0 cellpadding=0 cellspacing=0 style="filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=3, OffY=3, Color=\'#CCCCCC\')"><tr>' +
	'	<td><table border=0 cellpadding=0 cellspacing=0 width="100%">' +
	'	<tr><td rowspan=2 width=9 height=11><img src="images/chat/fr_lt.gif" width=9 height=11></td>'+
	'		<td class="brdr"><img src="images/spacer.gif" width=1 height=1></td>' +
	'		<td rowspan=2 width=12 height=11>';
	if(sDivId.length>0){
		sOut+='<img src="images/chat/fr_rt_x.gif" width=12 height=11 border=0 alt="close" onclick="DivHide(\'' + sDivId + '\',true)"></td></tr>';
	}else{
		sOut+='<img src="images/chat/fr_rt.gif" width=12 height=11 border=0></td></tr>';
	}
	sOut+='	<tr><td class="popw"><img src="images/spacer.gif" width=1 height=10></td></tr>' +
	'	</table></td>' +
	'</tr><tr>' +
	'	<td><table border=0 cellpadding=0 cellspacing=0><tr>' +
	'		<td class="brdr"><img src="images/spacer.gif" width=1 height=1></td>' +
	'		<td class="popw">&nbsp;</td>' +
	'		<td class="popw" align="center">' + sHtml +		
	'		</td>' +
	'		<td class="popw">&nbsp;</td>' +
	'		<td class="brdr"><img src="images/spacer.gif" width=1 height=1></td>' +
	'	</tr></table></td>' +
	'</tr><tr>' +
	'	<td><table border=0 cellpadding=0 cellspacing=0 width="100%">' +
	'	<tr><td rowspan=2 width=9><img src="images/chat/fr_lb.gif" width=9 height=8></td>' +
	'		<td class="popw"><img src="images/spacer.gif" width=1 height=7></td>' +
	'		<td rowspan=2 width=12><img src="images/chat/fr_rb.gif" width=12 height=8></td></tr>' +
	'	<tr><td class="brdr"><img src="images/spacer.gif" width=1 height=1></td></tr>' +
	'	</table></td>' +
	'</tr></table>';
	return sOut;
}

function formatRoomList(aRooms,sCurrentUser){
	var sHtml="",iRoomId,oRoom,sImg,sFunc,sOnclick,sOnContx,bIsInThisRoom,bIsInAnyRoom;
	
	var bIsAdmin=((g_iUserType & CHAT_USRT_SITEADMIN) || (g_iUserType & CHAT_USRT_SUPERUSER));
	sHtml="<table border=0 cellpadding=1 cellspacing=0 width=\"100%\">";
	var sAlt="";
	bIsInAnyRoom=(firstRm()>=0);
	for(iRoomId in aRooms){
		if(isNaN(parseInt(iRoomId))) continue;
		oRoom=aRooms[iRoomId];
		if(null==oRoom) continue;
				
		if (oRoom.isPrivate){
			sImg="images/chat/group_priv";
		}else{	
			sImg="images/chat/group";
		}
		if (oRoom.isModer) sImg+="_moder";
		sImg+=".gif";
		bIsInThisRoom=isInRm(iRoomId);
		if (bIsInThisRoom && !oRoom.isPrivate && oRoom.owner!=sCurrentUser){
			sOnclick="";
			sOnContx="";
		}else{
										//formatPopRoomMenu(iRoomId,bEnterRoom,bShowSwitch,bShowDelete,bShowTopic,bShowInvite,bShowKickBan)
			sFunc="PopDivShow('popRoomMenu',event,'formatPopRoomMenu(" + iRoomId + "," + (!bIsInAnyRoom) + "," + (bIsInAnyRoom && !bIsInThisRoom) + "," + (bIsAdmin || oRoom.owner==sCurrentUser) + "," + (bIsAdmin || oRoom.owner==sCurrentUser) + "," + (oRoom.isPrivate) + "," + (bIsAdmin || oRoom.owner==sCurrentUser) + ")',-15,-20,0)";
			sOnclick=" onclick=\"" + sFunc + "\"";
			sOnContx=" oncontextmenu=\"" + sFunc + ";return false;\"";
		}
		sImg="<img src=\"" + sImg + "\" width=16 height=16 border=0" + sOnclick + sOnContx + " alt=\"" + iRoomId + ". " + hEsc(oRoom.topic) + " (" + hEsc(oRoom.owner) + ")\">";
		sClass=(bIsInThisRoom)?"rmCur":"rmOth";
		sAlt=(sAlt.length>0)?"":"Alt";
		sHtml+="<tr><td class=\"lstImg\">" + sImg + "</td><td class=lst" + sAlt + "><span " + g_sLnkSpan + " class=\"" + sClass + "\" " + sOnclick + sOnContx + ">" + hEsc(oRoom.name) + "</span> (" + oRoom.userCount + ")</td></tr>";
	}
	sHtml+="</table>";		
	return sHtml;
}

function formatUserList(iRoomId,aUsers,sCurrentUser){
	var sHtml="",i,iSelCount,oUsersSel;
	var oOption,oUser,sUserFormated,sImage,sClass,sFunc;
	var iLen=aUsers.length;
	
	if (!document.chatcontrols){
		fEr("chat form is not loaded.");
	}else{
		oUsersSel=document.chatcontrols.msgto;
		if(oUsersSel){
			for(i=oUsersSel.options.length-1;i>0;i-- ){
				oUsersSel.options[i]=null;
			}
		}
	}
	var sAlt="";
	sHtml="<table border=0 cellpadding=0 cellspacing=0 width=\"100%\">";
	for(i=0;i<iLen;i++){
		oUser=aUsers[i];

		if(oUser.name==sCurrentUser){
			sFunc="RequestUserInfo(event,'" + escape(oUser.name) + "')";
		}else{
			sFunc="PopDivShow('popUserMenu',event,'formatPopUserMenu(\\'" + escape(oUser.name) + "\\')',-15,-20,0)";
		}
		
		var iFlag=oUser.flagsGet();
		var sBgImage;
		if ( (iFlag & (CHAT_USRT_SUPERUSER | CHAT_USRT_SITEADMIN))!=0){
			sBgImage="images/chat/person_super.gif";
		}else if ((iFlag & CHAT_USRT_ROOMOPER)!=0){
			sBgImage="images/chat/person_oper.gif";
		}else if ((iFlag & CHAT_USRT_MODERATOR)!=0){
			sBgImage="images/chat/person_moder.gif";
		}else if ((iFlag & CHAT_USRT_SPEAKER)!=0){
			sBgImage="images/chat/person_speaker.gif";		
		}else{
			sBgImage="images/chat/person.gif";
		}
		 
		switch(oUser.statusGet()){
			case 2: sImage="<img src=\"images/chat/status_brick.gif\" alt=\"" + g_aStatuses[2];break;
			case 3:	sImage="<img src=\"images/chat/status_clock.gif\" alt=\"" + g_aStatuses[3];break;
			default: sImage="<img src=\"images/spacer.gif\" alt=\"" + g_aStatuses[0];break;
		}
		sImage+=", type:" + iFlag + ", entered:" + oUser.time + "\"";
		sImage+=" onclick=\"" + sFunc + "\" oncontextmenu=\"" + sFunc + "\" width=16 height=16 border=0>";

		sUserFormated=hEsc(oUser.name);
		var sSufix="";
		if (oUser.age>0) sSufix+=" [" + oUser.age + "]";
		if ("F"==oUser.gender){
			sSufix+=" &#9792;";
		}else if ("M"==oUser.gender){
			sSufix+=" &#9794;";
		}
		 
		if(oUser.name==sCurrentUser){
			sClass="usrCur";
		}else{
			sClass="usrOth";
			if (1==oUser.statusGet())
				sUserFormated="<span class='usrDis'>" + sUserFormated + "</span>";
			if(oUsersSel){
				iSelCount=oUsersSel.length;
				oUsersSel.options[iSelCount]= new Option(oUser.name,oUser.name);
			}
		}
		sAlt=(sAlt.length>0)?"":"Alt";
		sHtml+="<tr><td class=\"lstImg\" background=\"" + sBgImage +"\">" + sImage + "</td><td class=\"lst" + sAlt + "\"><span " + g_sLnkSpan + " onclick=\"" + sFunc + "\" oncontextmenu=\"" + sFunc + "\" class=" + sClass + ">" + sUserFormated + "</span>" + sSufix + "</td></tr>";
	}
	sHtml+="</table>";
	rewriteLayer("idChatUsers",sHtml,false);
}
function formatTrnscr(iRoomId,sTrnscr){
	rewriteLayer("idDivMsgs","<table id=\"idTblTranscr\" border=0>" + sTrnscr + "</table>",true);
}
function formatAddTrnscrTr(iRoomId,oMsg,bTopToBottom){
	var oFrame=window.frames["idDivMsgs"];
	if (!oFrame) oFrame=window;
	var oTable=null;
	if (oFrame.document.getElementById) oTable=oFrame.document.getElementById("idTblTranscr");
	
	if (!oTable){//we have to rewrite the whole thing
		RewriteTranscript(iRoomId);
		return;
	}
	var oTr=(bTopToBottom)?(oTable.insertRow(oTable.rows.length)):(oTable.insertRow(0));
	oMsg.buildTrObj(oTr);
	
	if(bTopToBottom && oFrame.scrollBy) oFrame.scrollBy(0,32000);
}
function  formatDelTrnscrTr(iRoomId,iIndx){
	var l=window.frames["idDivMsgs"];
	if (!l) l=window;
	var oTable=l.document.getElementById("idTblTranscr");
	oTable.deleteRow(iIndx);
}
function RequestUserInfo(e,sEscUsrNm){
	userInfoGet(unescape(sEscUsrNm));
	var divEl=document.getElementById("popUserProfile");
	if (divEl) DivObjSetPosRelev(divEl,e,-120,-40);
}
function formatPopSmileys(){
	return '<table cellpadding=0 cellspacing=0 border=0><tr>' +
	'	<td valign="bottom"><img src="images/chat/smiley/1.gif" border=0 onclick="textadd(\'popSmileys\',\'O:-)\')" alt="O:-)"></td><td width=8></td>' +
	'	<td valign="bottom"><img src="images/chat/smiley/2.gif" border=0 onclick="textadd(\'popSmileys\',\':-[\')" alt=":-["></td><td width=8></td>' +
	'	<td valign="bottom"><img src="images/chat/smiley/3.gif" border=0 onclick="textadd(\'popSmileys\',\':D\')" alt=":D"></td><td width=8></td>' +
	'	<td valign="bottom"><img src="images/chat/smiley/4.gif" border=0 onclick="textadd(\'popSmileys\',\':o)\')" alt=":o)"></td><td width=8></td>' +
	'	<td valign="bottom"><img src="images/chat/smiley/5.gif" border=0 onclick="textadd(\'popSmileys\',\'xx(\')" alt="xx("></td><td width=8></td>' +
	'	<td valign="bottom"><img src="images/chat/smiley/6.gif" border=0 onclick="textadd(\'popSmileys\',\':-]\')" alt=":-]"></td>' +
	'</tr>	<tr><td colspan=11 height=8></td></tr><tr>' +
	'	<td><img src="images/chat/smiley/7.gif" border=0 onclick="textadd(\'popSmileys\',\':-(\')" alt=":-("></td><td width=8></td>' +
	'	<td><img src="images/chat/smiley/8.gif" border=0 onclick="textadd(\'popSmileys\',\':O\')" alt=":O"></td><td width=8></td>' +
	'	<td><img src="images/chat/smiley/9.gif" border=0 onclick="textadd(\'popSmileys\',\':)\')" alt=":)"></td><td width=8></td>' +
	'	<td><img src="images/chat/smiley/10.gif" border=0 onclick="textadd(\'popSmileys\',\':P\')" alt=":P"></td><td width=8></td>' +
	'	<td><img src="images/chat/smiley/11.gif" border=0 onclick="textadd(\'popSmileys\',\';-)\')" alt=";-)"></td><td width=8></td>' +
	'	<td><img src="images/chat/smiley/12.gif" border=0 onclick="textadd(\'popSmileys\',\'{)\')" alt="{)"></td>' +
	'</tr><tr><td colspan=11 height=5></td></tr></table>';
}
function formatPopColors(){
	return '<table cellpadding=0 cellspacing=3 border=0><tr>' +
	'	<td bgcolor="#ff0000"><img src="images/spacer.gif" border=0 onclick="txtColorChange(\'#ff0000\')" alt="Red" WIDTH="15" HEIGHT="15"></td>' +
	'	<td bgcolor="#00ff00"><img src="images/spacer.gif" border=0 onclick="txtColorChange(\'#00ff00\')" alt="Lime" WIDTH="15" HEIGHT="15"></td>' +
	'	<td bgcolor="#0000ff"><img src="images/spacer.gif" border=0 onclick="txtColorChange(\'#0000ff\')" alt="Blue" WIDTH="15" HEIGHT="15"></td>' +
	'	<td bgcolor="#000000"><img src="images/spacer.gif" border=0 onclick="txtColorChange(\'#000000\')" alt="Black" WIDTH="15" HEIGHT="15"></td>' +
	'	<td bgcolor="#800000"><img src="images/spacer.gif" border=0 onclick="txtColorChange(\'#800000\')" alt="Maroon" WIDTH="15" HEIGHT="15"></td>' +
	'	<td bgcolor="#191970"><img src="images/spacer.gif" border=0 onclick="txtColorChange(\'#191970\')" alt="Midnightblue" WIDTH="15" HEIGHT="15"></td>' +
	'</tr><tr>' +
	'	<td bgcolor="#C0C0C0"><img src="images/spacer.gif" border=0 onclick="txtColorChange(\'#C0C0C0\')" alt="Silver" WIDTH="15" HEIGHT="15"></td>' +
	'	<td bgcolor="#ffff00"><img src="images/spacer.gif" border=0 onclick="txtColorChange(\'#ffff00\')" alt="Yellow" WIDTH="15" HEIGHT="15"></td>' +
	'	<td bgcolor="#FF00FF"><img src="images/spacer.gif" border=0 onclick="txtColorChange(\'#FF00FF\')" alt="Fuchsia" WIDTH="15" HEIGHT="15"></td>' +
	'	<td bgcolor="#E4C9A7"><img src="images/spacer.gif" border=0 onclick="txtColorChange(\'#E4C9A7\')" alt="Brown" WIDTH="15" HEIGHT="15"></td>' +
	'	<td bgcolor="#008000"><img src="images/spacer.gif" border=0 onclick="txtColorChange(\'#008000\')" alt="Green" WIDTH="15" HEIGHT="15"></td>' +
	'	<td class="defcolor"><img src="images/spacer.gif" border=0 onclick="txtColorChange(\'\')" alt="default" WIDTH="15" HEIGHT="15"></td>' +
	'</tr></table>';
}
function formatPopEmotes(){
	var i,sOut;
	
	sOut='<form name="frmemotemsg" onsubmit="return false;" style="margin-bottom:0px"><table cellpadding=0 cellspacing=3 border=0>';
	for(i=0;i<g_aStoredMsgs.length;i++){
		sOut+='<tr><td colspan=2><span class=clk ' + g_sLnkSpan + ' onclick="tEmoteMsgSend(\'' + g_aStoredMsgs[i] + '\');DivHide(\'popEmotes\',true);">' + g_aStoredMsgs[i]+ '</span></td></tr>';
	}
	sOut+='<tr><td colspan=2 bgcolor=#999999 height=1></td></tr>' +
	'<tr><td colspan=2>custom:</td></tr>' +
	'<tr><td colspan=2><input type=text name="txtemotemsg" onkeydown="TextBoxWantEnter(event)"></td></tr>' + 
	'<tr><td align=right><img src="images/chat/btn_send.gif" title="Sends Emote message" border=0 width=48 height=16 onclick="tEmoteMsgSend(document.frmemotemsg.txtemotemsg.value);DivHide(\'popEmotes\',true);"></td>'+
	'	<td><img src="images/chat/btn_close.gif" title="Close" border=0 width=48 height=16 onclick="DivHide(\'popEmotes\',true);"></td>' +
	'</tr></table></form>';
	return sOut;
}
function formatPopRoomMenu(iRoomId,bEnterRoom,bShowSwitch,bShowDelete,bShowTopic,bShowInvite,bShowKickBan){
	var sOut="<table cellpadding=2 cellspacing=1>";
	if (bEnterRoom) sOut+="<tr><td><span class=clk " + g_sLnkSpan + " onclick=\"enterRoom(" + iRoomId + ");DivHide('popRoomMenu',true);\">Enter room</span></td></tr>";
	if (bShowSwitch) sOut+="<tr><td><span class=clk " + g_sLnkSpan + " onclick=\"roomSwitch(" + iRoomId + ");DivHide('popRoomMenu',true);\">Switch room</span></td></tr>";
	if (bShowDelete) sOut+="<tr><td><span class=clk " + g_sLnkSpan + " onclick=\"roomRemove(" + iRoomId + ")\">Delete room</span></td></tr>";
	if (bShowTopic) sOut+="<tr><td nowrap><span class=clk " + g_sLnkSpan + " onclick=\"roomChangeTopic(" + iRoomId + ")\">Change name/topic</span></td></tr>";
	if (bShowInvite) sOut+="<tr><td nowrap><span class=clk " + g_sLnkSpan + " onclick=\"PopDivShow('popRoomInvite',event,'formatPopRoomInvite(" + iRoomId + ",\\'\\')',-140,-160,1)\">Invite to room</a></td></tr>";
	if (bShowKickBan) sOut+="<tr><td nowrap><span class=clk " + g_sLnkSpan + " onclick=\"PopDivShow('popUserKickBan',event,'formatPopUserKickBan(" + iRoomId + ",\\'\\')',-140,-250,1)\">Kick / Ban</a></td></tr>";
	sOut+="</table>";
	return sOut;
}
function formatPopUserMenu(sEscUsrNm){
	var sOut="<table cellpadding=0 cellspacing=4>";
	sOut+="<tr><td nowrap><span class=clk " + g_sLnkSpan + " onclick=\"PopDivShow('popPrivateMsg',event,'formatPopPrivateMsg(\\'" + sEscUsrNm + "\\')',-145,-25,1);\">Private Message</span></td></tr>";
	sOut+="<tr><td nowrap><span class=clk " + g_sLnkSpan + " onclick=\"RequestUserInfo(event,'" + sEscUsrNm + "');DivHide('popUserMenu',true);\">User Info</span></td></tr>";
	sOut+="<tr><td bgcolor=#999999 height=1></td></tr>";
	sOut+="<tr><td nowrap><span class=clk " + g_sLnkSpan + " onclick=\"userIgnore('" + sEscUsrNm + "', true);DivHide('popUserMenu',true);\">Ignore</span></td></tr>";
	sOut+="<tr><td nowrap><span class=clk " + g_sLnkSpan + " onclick=\"userIgnore('" + sEscUsrNm + "', false);DivHide('popUserMenu',true);\">Un-Ignore</span></td></tr>";
	sOut+="<tr><td bgcolor=#999999 height=1></td></tr>";
	sOut+="<tr><td nowrap><span class=clk " + g_sLnkSpan + " onclick=\"PopDivShow('popOneOnOneInvite',event,'formatPopOneOnOneInvite(\\'" + sEscUsrNm + "\\')',-140,-100,1);\">Chat one-on-one</span></td></tr>";
	sOut+="<tr><td nowrap><span class=clk " + g_sLnkSpan + " onclick=\"PopDivShow('popRoomInvite',event,'formatPopRoomInvite(-1,\\'" + sEscUsrNm + "\\')',-140,-100,1);\">Invite to a room</span></td></tr>";
	sOut+="<tr><td nowrap><span class=clk " + g_sLnkSpan + " onclick=\"PopDivShow('popUserKickBan',event,'formatPopUserKickBan(-1,\\'" + sEscUsrNm + "\\')',-140,-150,1);\">Kick / Ban</span></td></tr>";
	sOut+="<tr><td nowrap><span class=clk " + g_sLnkSpan + " onclick=\"PopDivShow('popUserPerms',event,'formatPopUserPerms(\\'" + sEscUsrNm + "\\')',-155,-180,1);\">Assign rights</span></td></tr>";
	sOut+="</table>";
	return sOut;
}
function formatPopPrivateMsg(sEscUsrNm){
	var sOut='<form name="frmprivatemsg" onsubmit="return false;" style="margin-bottom:0px"><table cellpadding=0 cellspacing=4>';
	sOut+='<tr><td>To User:</td></tr>';
	sOut+='<tr><td align="right"><input type=text class=tb name="txtprivuser" value="' + hEsc(unescape(sEscUsrNm)) + '" size=20 style="width:160px"></td></tr>';
	sOut+='<tr><td>Message:</td><td></td></tr>';
	sOut+='<tr><td><textarea class=tb name="txtprivmsg" maxlength=1024 onkeydown="TextBoxWantEnter(event)" rows=3 cols=20 style="width:160px"></textarea></td></tr>';
	sOut+='<tr><td align="center" nowrap><img src="images/chat/btn_send.gif" title="Sends message" border=0 width=48 height=16 onclick="tPrivMsgSend(document.frmprivatemsg.txtprivmsg.value)">';
	sOut+=' <img src="images/chat/btn_close.gif" title="Close" border=0 width=48 height=16 onclick="DivHide(\'popPrivateMsg\',true)"></td></tr>';
	sOut+='</table></form>';
	return sOut;
}
function OneInviteUser(){
	var f=document.formOneOnOneInvite;
	var txtUserName=f.usernameinvite;
	if(txtUserName.value.length>0){
		oneOnOneInvite(txtUserName.value,f.msgtextinvite.value);
		txtUserName.value="";
		DivHide("popOneOnOneInvite",true);
	}else{
		alert("user name can not be empty");
	}
	return false;
}
function inviteUser(){
	var f=document.formRoomInvite;
	var txtUserName=f.usernameinvite;
	var oRoomSel=f.roomidinvite;
	if(txtUserName.value.length>0){
		if (oRoomSel.selectedIndex>=0){
			roomInvite(oRoomSel.options[oRoomSel.selectedIndex].value,txtUserName.value,f.msgtextinvite.value);
			txtUserName.value="";
			DivHide("popRoomInvite",true);
		}else{
			alert("a room has to be selected");
		}
	}else{
		alert("user name can not be empty");
	}
	return false;
}
function formatPopRoomInvite(iSelRoomId,sEscUsrNm){
	var iRoomId,oRoom,sOptions='',bHavePrivRoom=false;
	
	var aRooms=ChatRooms();
	for(iRoomId in aRooms){
		if(isNaN(parseInt(iRoomId))) continue;
		oRoom=aRooms[iRoomId];
		if(null==oRoom) continue;
		if (oRoom.isPrivate){
			sOptions+='<option value="' + iRoomId + '"' + ((iSelRoomId==iRoomId)?' selected':'') + '>' + oRoom.name + '</option>';
			bHavePrivRoom=true;
		}
	}
	var sClsBtn='<input type="button" value="cancel" class="bluebutton" onclick="DivHide(\'popRoomInvite\',true);">';
	if(!bHavePrivRoom) return 'There are No Private rooms to invate to.<br>' + sClsBtn;
			
	var sOut='<form name="formRoomInvite" onsubmit="return inviteUser()" style="margin-bottom:0px">';
	sOut+='<table cellpadding=3 cellspacing=1 border=0>';
	sOut+='<tr><td>Room:<br><select name="roomidinvite" size=1 style="width:160px">' + sOptions + '</select></td></tr>';
	sOut+='<tr><td>Invite user:<br><input type=text class=tb name="usernameinvite" value="' + hEsc(unescape(sEscUsrNm)) + '" style="width: 160px"></td></tr>';
	sOut+='<tr><td><nobr>Invitation text <small>(optional)</small>:</nobr><br><textarea class=tb name="msgtextinvite" rows=2 cols=20 style="width: 160px"></textarea></td></tr>';
	sOut+='<tr><td><input type="button" value="invite" class="bluebutton" onclick="inviteUser()"> &nbsp;';
	sOut+=sClsBtn +'</td></tr></table></form>';
	return sOut;
}
function formatPopOneOnOneInvite(sEscUsrNm){
	var sOut='<form name="formOneOnOneInvite" onsubmit="return OneInviteUser()" style="margin-bottom:0px">';
	sOut+='<table cellpadding=3 cellspacing=1 border=0>';
	sOut+='<tr><td>One-on-One chat with:<br><input type=text class=tb name="usernameinvite" value="' + hEsc(unescape(sEscUsrNm)) + '" style="width: 160px"></td></tr>';
	sOut+='<tr><td><nobr>Invitation text <small>(optional)</small>:</nobr><br><textarea class=tb name="msgtextinvite" rows=2 cols=20 style="width: 160px"></textarea></td></tr>';
	sOut+='<tr><td><input type="button" value="invite" class="bluebutton" onclick="OneInviteUser()"> &nbsp;';
	sOut+='<input type="button" value="cancel" class="bluebutton" onclick="DivHide(\'popOneOnOneInvite\',true);"></td></tr></table></form>';
	return sOut;
}
function kickBanUser(iRoomId){
	var f=document.formUserKickBan;
	var sUserName=f.txtuserkickban.value;
	if(sUserName.length<1){
		alert("user name can not be empty");
	}else{
		var i,iBanType=0;
		var oRadBanType=f.radbantype;
		for(i=0;i<oRadBanType.length;i++){
			if (oRadBanType[i].checked){
				iBanType=oRadBanType[i].value;
				break;
			}
		}
		userKickBan(iRoomId,sUserName,f.chkuserkick.checked,f.chkuserban.checked,f.txtkickbanreason.value,iBanType,f.chkkickbansite.checked);
		DivHide("popUserKickBan",true);
		f.txtuserkickban.value="";
	}
	return false;
}
function formatPopUserKickBan(iRoomId,sEscUsrNm){
	var sOut='<form name="formUserKickBan" onsubmit="return kickBanUser(' + iRoomId + ');" style="margin-bottom:0px">';
	sOut+='<table cellpadding=0 cellspacing=3 border=0>';
	sOut+='<tr><td colspan=2>User Name:<br><input type=text class=tb name="txtuserkickban" value="' + hEsc(unescape(sEscUsrNm)) + '" style="width:160px" size=20></td></tr>';
	sOut+='<tr><td><input type="checkbox" name="chkuserkick"></td><td><b>Kick </b><small> (logoff user session)</small></td></tr>';
	sOut+='<tr><td><input type="checkbox" name="chkuserban"></td><td><b>Ban </b><small> (do not allow user<br> to login ever again)</small></td><tr>';
	sOut+='<tr><td>&nbsp;</td><td><small>';
	sOut+='	<input type="radio" name="radbantype" value=0 checked>Ban By Name<br>';
	sOut+='	<input type="radio" name="radbantype" value=1>Ban By IP Address<br>';
	sOut+='	<input type="radio" name="radbantype" value=2>Ban By Name and IP</small></td></tr>';
	sOut+='<tr><td colspan=2 height=1 bgcolor="#999999"></td></tr>';
	sOut+='<tr><td colspan=2><input type="checkbox" name="chkkickbansite"><b>From site</b></td></tr>';
	sOut+='<tr><td colspan=2><nobr>Reason (optional):</nobr><br><textarea class=tb name="txtkickbanreason"  rows=2 cols=20 style="width:160px"></textarea></td></tr>';
	sOut+='<tr><td colspan=2><input type="button" value="submit" class="bluebutton" onclick="kickBanUser(' + iRoomId + ')"> &nbsp;';
	sOut+='	<input type="button" value="cancel" class="bluebutton" onclick="DivHide(\'popUserKickBan\',true);"></td></tr>';
	sOut+='</table></form>';
	return sOut;
}
function userPermsSetChange(){
	var f=document.formUserPerms;
	var sUserName=f.txtuserperms.value;
	if(sUserName.length<1){
		alert("user name can not be empty");
	}else{
		var i,oRadPerms=f.raduserperms;
		for(i=0;i<oRadPerms.length;i++){
			if (oRadPerms[i].checked){
				userPermsSet(sUserName,parseInt(oRadPerms[i].value),f.txtpermsreason.value);
				break;
			}
		}
		DivHide("popUserPerms",true);
		f.txtuserperms.value="";
	}
	return false;
}
function formatPopUserPerms(sEscUsrNm){
	var sOut='<form name="formUserPerms" onsubmit="return false;" style="margin-bottom:0px">';
	sOut+='<table cellpadding=3 cellspacing=1 border=0>';
	sOut+='	<tr><td>User Name:<br><input type=text class=tb name="txtuserperms" value="' + hEsc(unescape(sEscUsrNm)) + '" style="width:160px" size=20></td></tr>';
	sOut+='	<tr><td><input type="radio" name="raduserperms" value="4"><b>Set Operator </b><small><br> (room administrator)</small></td></tr>';
	sOut+='	<tr><td><input type="radio" name="raduserperms" value="8"><b>Set Moderator </b><small></small></td></tr>';
	sOut+='	<tr><td><input type="radio" name="raduserperms" value="16"><b>Set Speaker </b><small></small></td></tr>';
	sOut+='	<tr><td><input type="radio" name="raduserperms" value="0"><b>Set Regular User</b><small></small></td></tr>';
	sOut+='	<tr><td><nobr>Reason (optional):</nobr><br><textarea class=tb name="txtpermsreason"  rows=2 cols=10 style="width:160px"></textarea></td></tr>';
	sOut+='	<tr><td><input type="button" value="submit" class="bluebutton" onclick="userPermsSetChange()"> &nbsp;';
	sOut+='		<input type="button" value="cancel" class="bluebutton" onclick="DivHide(\'popUserPerms\',true);"></td></tr>';
	sOut+='</table></form>';
	return sOut;
}
function formatPopRoomCreate(sRoomName){
	var sOut='<form name="formRoomCreate" id="formRoomCreate" onsubmit="return false;" style="margin-bottom:0px">';
	sOut+='<table cellpadding=3 cellspacing=1 border=0>';
	sOut+='	<tr><td colspan=2>Room Name:<br><input type=text class=tb name="txtroomname" value="' + hEsc(sRoomName) + '" style="width: 150px" size=15></td></tr>';
	sOut+='	<tr><td colspan=2><nobr>Topic (optional):</nobr><br><textarea class=tb name="txtroomtopic"  rows=2 cols=15 style="width: 150px"></textarea></td></tr>';
	sOut+='	<tr><td align=center><img src="images/chat/btn_private_' + (g_bIsCreatingPrivRoom?'down':'up') + '.gif" border=0 name="imgprivate" onclick="RoomCrPrivateTougle()" alt="Private: when checked, room will be created as Private."  width=30 height=15></td><td>Private</td></tr>';
	sOut+='	<tr><td align=center><img src="images/chat/btn_moder_' + (g_bIsCreatingModerRoom?'down':'up') + '.gif" border=0 name="imgmoder" onclick="RoomCrModerTougle()" alt="Moderated: when checked, room will be created as Moderated."  width=30 height=15></td><td>Moderated</td></tr>';
	sOut+='	<tr><td align=center><img src="images/chat/btn_persist_' + (g_bIsCreatingPersistRoom?'down':'up') + '.gif" border=0 name="imgpersist" onclick="RoomPersistTougle()" alt="Persist: when checked, created rooms will be saved in a datastore." width=30 height=15></td><td>Persistant</td></tr>';
	sOut+='	<tr><td colspan=2><input type="button" value="Create" class="bluebutton" onclick="rAdd(document.formRoomCreate.txtroomname.value,document.formRoomCreate.txtroomtopic.value);DivHide(\'popRoomCreate\',true)"> &nbsp;';
	sOut+='		<input type="button" value="cancel" class="bluebutton" onclick="DivHide(\'popRoomCreate\',true);"></td></tr>';
	sOut+='</table></form>';
	return sOut;
}
function userProfileStore(){
	var f=document.formUserProfile;		
	userInfoStore(f.loginid.value, f.password.value, f.usertype.value, f.fname.value, f.lname.value, f.email.value, f.address.value, f.age.value, f.oldpassword.value, f.chkallowprofile.checked,f.gender.value,null);
	DivHide('popUserProfile',true);
}
function formatUserInfo(sUserLogin,sCurrentUserLogin,sUserPsw,iUserType,sUserFName,sUserLName,sEMail,sAddress,iAge,bAllowProfile,sGender,sCustom){
	sHtml=formatPopUserInfo(sUserLogin,sCurrentUserLogin,sUserPsw,iUserType,sUserFName,sUserLName,sEMail,sAddress,iAge,bAllowProfile,sGender)
	PopDivShow("popUserProfile",null,sHtml,0,0,3);
}
function formatPopUserInfo(sUserLogin,sCurrentUserLogin,sUserPsw,iUserType,sUserFName,sUserLName,sEMail,sAddress,iAge,bAllowProfile,sGender){
	var bSelf=(sUserLogin==sCurrentUserLogin);
	var sOut='<form name="formUserProfile" id="formUserProfile" onsubmit="return false;" style="margin-bottom:0px">';
	sOut+='<table cellpadding=2 cellspacing=1 border=0>';
	sOut+='<tr><td colspan=2><b>' + (bSelf?((sUserPsw.length>0)?'Update Profile':'Create Profile'):'User Profile') + '</b></td></tr>';
	sOut+='<tr><td>Login ID:</td><td><input type=text class=tbr name="loginid" value="' + hEsc(sUserLogin) + '" readonly="readonly" size=12></td></tr>';
	sOut+='<tr><td>User Type:</td><td><input type=text class=tbr name="usertype" value="' + iUserType + '" readonly="readonly" size=2></td></tr>';
	sOut+='<tr><td nowrap>First Name:</td><td><input type=text class=tb name="fname" value="' + sUserFName + '" size=12' + ((bSelf)?'':' readonly="readonly"') +'></td></tr>';
	sOut+='<tr><td>Last Name:</td><td><input type=text class=tb name="lname" value="' + sUserLName + '" size=12' + ((bSelf)?'':' readonly="readonly"') +'></td></tr>';
	sOut+='<tr><td>Email:</td><td><input type=text class=tb name="email" value="' + sEMail + '" size=12' + ((bSelf)?'':' readonly="readonly"') +'></td></tr>';
	sOut+='<tr><td>Gender</td><td><select class=tb name="gender"' + ((bSelf)?'':' readonly="readonly"') + '><option value=" "> </option><option value="F"' + (('F'==sGender)?' selected':'') +'>F</option><option value="M"' + (('M'==sGender)?' selected':'') +'>M</option></select></td></tr>';
	sOut+='<tr><td>Age:</td><td><input type=text class=tb name="age" value="' + iAge + '" size=2' + ((bSelf)?'':' readonly="readonly"') +'></td></tr>';
	sOut+='<tr><td>Address:</td><td><input type=text class=tb name="address" value="' + sAddress + '" size=12' + ((bSelf)?'':' readonly="readonly"') +'></td></tr>';
	if(bSelf){
		sOut+='<tr><td colspan=2 height=1 bgcolor="#999999"></td></tr>';
		sOut+='<tr><td><small>Password:</small></td><td><input type=password class=tb name="password" value="' + sUserPsw + '" size=12></td></tr>';
		sOut+='<tr><td><small>' + ((sUserPsw.length>0)?'Old Password:':'Retype Password:') + '</small></td><td><input type=password class=tb name="oldpassword" size=12></td></tr>';
		sOut+='<tr><td colspan=2 nowrap><input type="checkbox" name="chkallowprofile"' + (bAllowProfile?' checked':'') + '><small>Allow others to see profile</small></td></tr>';
	}
	sOut+='<tr><td colspan=2 nowrap align="center">';
	if(bSelf){
		sOut+='<input type="button" value="' + ((sUserPsw.length>0)?'update':'save') + '" class="bluebutton" style="width: 58px" onclick="userProfileStore()" name="btnprofilesave">&nbsp;';
		if(sUserPsw.length>0){
			sOut+='<input type="button" value="delete" class="bluebutton" style="width: 58px" onclick="userProfileDelete(\'' + escape(sUserLogin) + '\')" name="btnprofiledel">&nbsp;';
		}
	}
	sOut+='<input type="button" value="cancel" class="bluebutton" style="width: 58px" onclick="DivHide(\'popUserProfile\',true)"></td></tr>';
	sOut+='</table></form>';
	return sOut;
}
function userProfileDelete(sEscUsrNm){
	var sUserName=unescape(sEscUsrNm);
	if (confirm("Are you sure you want to delete profile for user: " + sUserName + "?")){
		userInfoDelete(sUserName);
		DivHide('popUserProfile',true);
	}
}
function ChatOnIdentityRet(bExist,iFirstRmId,sFirstRmName){
	if(!bExist){
		HndlError(new Array(-200,1,"Script: User with this session id does not exist. Please Login.","client_script"));
		return;
	}
	if ((g_iUserType & CHAT_USRT_SITEADMIN) || (g_iUserType & CHAT_USRT_SUPERUSER)){
		if (document.getElementById){
			var oAdminLink=document.getElementById("idAdminPageLink");
			if (oAdminLink){
				oAdminLink.className="clk";
				oAdminLink.onclick=function(){exitRoom(-1); window.setTimeout("document.location='admin.aspx';",10)};
				oAdminLink.onmouseenter=function(){this.style.color='red';};
				oAdminLink.onmouseleave=function(){this.style.color='';};
			}
		}
	}
	SiteRoomListRequest();
	if (iFirstRmId>=0) ChatOnEnteredRoom(iFirstRmId);
	
	ChatStatusSet();
	ChatSoundSet();
	ChatAlertSet();
}
var bSessNFShowed=false;
function ChatOnSessNotFound(){
	if(!bSessNFShowed){
		HndlError(new Array(-200,1,"Script: User session was lost. Please Re-Login.","client_script"));
		bSessNFShowed=true;
	}	
}
function ChatOnSrvNoResp(iErr,sErr){
	HndlError(new Array(iErr,1,sErr));
}
function ChatOnEnteredRoom(iRoomId){
	if (iRoomId<0){
		fEr("ChatOnEnteredRoom: invalid room Id.");
		return;
	}
	RoomUserListRequest(iRoomId,false);
	transcriptReq(iRoomId);
	StoredMessegesGet();
			
	if (g_oControlsWindow.document.chatcontrols){
		var oTxtTypeBox=g_oControlsWindow.document.chatcontrols.mytext;
		if(oTxtTypeBox) oTxtTypeBox.focus();
	}
}
