var is_ie=!!(window.attachEvent&&!window.opera);var is_khtml=!!(navigator.appName.match("Konqueror")||navigator.appVersion.match("KHTML"));var is_gecko=navigator.userAgent.indexOf('Gecko')>-1&&navigator.userAgent.indexOf('KHTML')==-1;var is_ie7=navigator.userAgent.indexOf('MSIE 7')>0;var is_opera=!!window.opera;var is_webkit=navigator.userAgent.indexOf('AppleWebKit/')>-1;var pfcClient=Class.create();pfcClient.prototype={initialize:function()
{this.gui=new pfcGui();this.res=new pfcResource();this.nickname=pfc_nickname;this.nickid=pfc_nickid;this.usermeta=$H();this.chanmeta=$H();this.nickwhoisbox=$H();this.cmdhistory=Array();this.cmdhistoryid=-1;this.cmdhistoryissearching=false;this.privmsgs=Array();this.privmsgids=Array();this.timeout=null;this.timeout_time=new Date().getTime();this.refresh_delay=pfc_refresh_delay;this.refresh_delay_steps=pfc_refresh_delay_steps;this.last_response_time=new Date().getTime();this.last_request_time=new Date().getTime();this.last_activity_time=new Date().getTime();this.clientid=pfc_clientid;this.isconnected=false;this.nicklist=$H();this.nickcolor=Array();this.colorlist=Array();this.blinktmp=Array();this.blinkloop=Array();this.blinktimeout=Array();},loadChat:function(){new Ajax.Request(pfc_server_script_url,{method:'get',parameters:{pfc_ajax:1,f:'loadChat'},onSuccess:function(transport){eval(transport.responseText);}});},connectListener:function()
{this.el_words=$('pfc_words');this.el_handle=$('pfc_handle');this.el_container=$('pfc_container');this.el_errors=$('pfc_errors');this.detectactivity=new DetectActivity(this.el_container);if(pfc_notify_window)this.detectactivity.onunactivate=this.gui.unnotifyWindow.bindAsEventListener(this.gui);this.el_words.onkeypress=this.callbackWords_OnKeypress.bindAsEventListener(this);Event.observe(this.el_words,'keydown',this.callbackWords_OnKeydown.bindAsEventListener(this),false);Event.observe(this.el_words,'keyup',this.callbackWords_OnKeyup.bindAsEventListener(this),false);Event.observe(this.el_words,'mouseup',this.callbackWords_OnMouseup.bindAsEventListener(this),false);Event.observe(this.el_words,'focus',this.callbackWords_OnFocus.bindAsEventListener(this),false);Event.observe(document.body,'unload',this.callback_OnUnload.bindAsEventListener(this),false);},refreshGUI:function()
{this.minmax_status=pfc_start_minimized;var cookie=getCookie('pfc_minmax_status');if(cookie!=null)
this.minmax_status=(cookie=='true');cookie=getCookie('pfc_nickmarker');this.nickmarker=(cookie=='true');if(cookie==''||cookie==null)
this.nickmarker=pfc_nickmarker;cookie=getCookie('pfc_clock');this.clock=(cookie=='true');if(cookie==''||cookie==null)
this.clock=pfc_clock;cookie=getCookie('pfc_showsmileys');this.showsmileys=(cookie=='true');if(cookie==''||cookie==null)
this.showsmileys=pfc_showsmileys;cookie=getCookie('pfc_showwhosonline');this.showwhosonline=(cookie=='true');if(cookie==''||cookie==null)
this.showwhosonline=pfc_showwhosonline;this.current_text_color='';cookie=getCookie('pfc_current_text_color');if(cookie!=null)
this.switch_text_color(cookie);cookie=getCookie('pfc_issoundenable');this.issoundenable=(cookie=='true');if(cookie==''||cookie==null)
this.issoundenable=pfc_startwithsound;this.refresh_loginlogout();this.refresh_minimize_maximize();this.refresh_Smileys();this.refresh_sound();this.refresh_nickmarker();},askNick:function(nickname,error_text)
{if(nickname==''||nickname==undefined)nickname=this.nickname;var pfcp=this.getPrompt();pfcp.callback=function(v){pfc.askNickResponse(v);}
pfcp.prompt((error_text!=undefined?'<span style="color:red">'+error_text+'</span><br/>':'')+this.res.getLabel('Please enter your nickname'),nickname);pfcp.focus();},askNickResponse:function(newnick)
{if(newnick)
{if(this.isconnected)
this.sendRequest('/nick "'+newnick+'"');else
this.sendRequest('/connect "'+newnick+'"');}},handleResponse:function(cmd,resp,param)
{if(pfc_debug)
if(cmd!="update")
{var param2=param;if(cmd=="who"||cmd=="who2")
{param2=$H(param2);param2.set('meta',$H(param2.get('meta')));param2.get('meta').set('users',$H(param2.get('meta').get('users')));trace('handleResponse: '+cmd+"-"+resp+"-"+param2.inspect());}
else
if(cmd=="whois"||cmd=="whois2")
{param2=$H(param2);trace('handleResponse: '+cmd+"-"+resp+"-"+param2.inspect());}
else
if(cmd=="getnewmsg"||cmd=="join")
{param2=$A(param2);trace('handleResponse: '+cmd+"-"+resp+"-"+param2.inspect());}
else
trace('handleResponse: '+cmd+"-"+resp+"-"+param);}
if(cmd!="update")
{this.last_activity_time=new Date().getTime();var delay=this.calcDelay();if(this.timeout_time-new Date().getTime()>delay)
{clearTimeout(this.timeout);this.timeout=setTimeout('pfc.updateChat(true)',delay);this.timeout_time=new Date().getTime()+delay;}}
if(cmd=="connect")
{if(resp=="ok")
{this.nickname=param[0];this.isconnected=true;this.updateChat(true);}
else
this.isconnected=false;this.refresh_loginlogout();}
else if(cmd=="quit")
{if(resp=="ok")
{this.updateChat(false);this.isconnected=false;this.refresh_loginlogout();}}
else if(cmd=="join"||cmd=="join2")
{if(resp=="ok")
{var tabid=param[0];var name=param[1];this.gui.createTab(name,tabid,"ch");if(cmd!="join2"||this.gui.tabs.length==1)this.gui.setTabById(tabid);this.refresh_Smileys();this.refresh_WhosOnline();}
else if(resp=="max_channels")
{this.displayMsg(cmd,this.res.getLabel('Maximum number of joined channels has been reached'));}
else
alert(cmd+"-"+resp+"-"+param);}
else if(cmd=="leave")
{if(resp=="ok")
{var tabid=param;this.gui.removeTabById(tabid);index=-1;index=indexOf(this.privmsgids,tabid);this.privmsgids=without(this.privmsgids,tabid);this.privmsgs=without(this.privmsgs,this.privmsgs[index]);}}
else if(cmd=="privmsg"||cmd=="privmsg2")
{if(resp=="ok")
{var tabid=param[0];var name=param[1];this.gui.createTab(name,tabid,"pv");if(cmd!="privmsg2"||this.gui.tabs.length==1)this.gui.setTabById(tabid);this.privmsgs.push(name);this.privmsgids.push(tabid);}
else if(resp=="max_privmsg")
{this.displayMsg(cmd,this.res.getLabel('Maximum number of private chat has been reached'));}
else if(resp=="unknown")
{this.displayMsg(cmd,this.res.getLabel('You are trying to speak to a unknown (or not connected) user'));}
else if(resp=="speak_to_myself")
{this.displayMsg(cmd,this.res.getLabel('You are not allowed to speak to yourself'));}
else
alert(cmd+"-"+resp+"-"+param);}
else if(cmd=="nick")
{if(pfc_focus_on_connect)this.el_words.focus();if(resp=="connected"||resp=="notchanged")
{cmd='';}
if(resp=="ok"||resp=="notchanged"||resp=="changed"||resp=="connected")
{this.setUserMeta(this.nickid,'nick',param);this.el_handle.innerHTML=this.getUserMeta(this.nickid,'nick').escapeHTML();this.nickname=this.getUserMeta(this.nickid,'nick');this.updateNickBox(this.nickid);this.clearError(Array(this.el_words));}
else if(resp=="isused")
{this.setError(this.res.getLabel('Chosen nickname is already used'),Array());this.askNick(param,this.res.getLabel('Chosen nickname is already used'));}
else if(resp=="notallowed")
{this.setError(this.res.getLabel('Chosen nickname is not allowed'),Array());this.updateChat(false);this.isconnected=false;this.refresh_loginlogout();}}
else if(cmd=="update")
{}
else if(cmd=="version")
{if(resp=="ok")
{this.displayMsg(cmd,this.res.getLabel('phpfreechat current version is %s',param));}}
else if(cmd=="help")
{if(resp=="ok")
{this.displayMsg(cmd,param);}}
else if(cmd=="rehash")
{if(resp=="ok")
{this.displayMsg(cmd,this.res.getLabel('Configuration has been rehashed'));}
else if(resp=="ko")
{this.displayMsg(cmd,this.res.getLabel('A problem occurs during rehash'));}}
else if(cmd=="banlist")
{if(resp=="ok"||resp=="ko")
{this.displayMsg(cmd,param);}}
else if(cmd=="unban")
{if(resp=="ok"||resp=="ko")
{this.displayMsg(cmd,param);}}
else if(cmd=="auth")
{if(resp=="ban")
{alert(param);}
if(resp=="frozen")
{alert(param);}
else if(resp=="nick")
{this.displayMsg(cmd,param);}}
else if(cmd=="debug")
{if(resp=="ok"||resp=="ko")
{this.displayMsg(cmd,param);}}
else if(cmd=="clear")
{var tabid=this.gui.getTabId();var container=this.gui.getChatContentFromTabId(tabid);container.innerHTML="";}
else if(cmd=="identify")
{this.displayMsg(cmd,param);}
else if(cmd=="checknickchange")
{this.displayMsg(cmd,param);}
else if(cmd=="whois"||cmd=="whois2")
{param=$H(param);var nickid=param.get('nickid');if(resp=="ok")
{this.setUserMeta(nickid,param);this.updateNickBox(nickid);this.updateNickWhoisBox(nickid);}
if(cmd=="whois")
{var um=this.getAllUserMeta(nickid);var um_keys=um.keys();var msg='';for(var i=0;i<um_keys.length;i++)
{var k=um_keys[i];var v=um.get(k);if(v&&k!='nickid'&&k!='floodtime'&&k!='flood_nbmsg'&&k!='flood_nbchar')
msg=msg+'<strong>'+k+'</strong>: '+v+'<br/>';}
this.displayMsg(cmd,msg);}}
else if(cmd=="who"||cmd=="who2")
{param=$H(param);var chan=param.get('chan');var chanid=param.get('chanid');var meta=$H(param.get('meta'));meta.set('users',$H(meta.get('users')));if(resp=="ok")
{this.setChanMeta(chanid,meta);for(var i=0;i<meta.get('users').get('nickid').length;i++)
{var nickid=meta.get('users').get('nickid')[i];var nick=meta.get('users').get('nick')[i];var um=this.getAllUserMeta(nickid);if(!um)this.sendRequest('/whois2 "'+nickid+'"');}
this.updateNickListBox(chanid);}
if(cmd=="who")
{var cm=this.getAllChanMeta(chanid);var cm_keys=cm.keys();var msg='';for(var i=0;i<cm_keys.length;i++)
{var k=cm_keys[i];var v=cm[k];if(k!='users')
{msg=msg+'<strong>'+k+'</strong>: '+v+'<br/>';}}
this.displayMsg(cmd,msg);}}
else if(cmd=="getnewmsg")
{if(resp=="ok")
{this.handleComingRequest(param);}}
else if(cmd=="send")
{}
else
alert(cmd+"-"+resp+"-"+param);},getAllUserMeta:function(nickid)
{if(nickid&&this.usermeta.get(nickid))
return this.usermeta.get(nickid);else
return null;},getUserMeta:function(nickid,key)
{if(nickid&&key&&this.usermeta.get(nickid)&&this.usermeta.get(nickid).get(key))
return this.usermeta.get(nickid).get(key);else
return'';},setUserMeta:function(nickid,key,value)
{if(nickid&&key)
{if(!this.usermeta.get(nickid))this.usermeta.set(nickid,$H());if(value)
this.usermeta.get(nickid).set(key,value);else
this.usermeta.set(nickid,$H(key));}},getAllChanMeta:function(chanid)
{if(chanid&&this.chanmeta.get(chanid))
return this.chanmeta.get(chanid);else
return null;},getChanMeta:function(chanid,key)
{if(chanid&&key&&this.chanmeta.get(chanid)&&this.chanmeta.get(chanid).get(key))
return this.chanmeta.get(chanid).get(key);else
return'';},setChanMeta:function(chanid,key,value)
{if(chanid&&key)
{if(!this.chanmeta.get(chanid))this.chanmeta.set(chanid,$H());if(value)
this.chanmeta.get(chanid).set(key,value);else
this.chanmeta.set(chanid,$H(key));}},doSendMessage:function()
{var w=this.el_words;var wval=w.value;this.cmdhistory.push(wval);this.cmdhistoryid=this.cmdhistory.length;this.cmdhistoryissearching=false;re=new RegExp("^(\/[a-zA-Z0-9]+)( (.*)|)");if(wval.match(re))
{cmd=wval.replace(re,'$1');param=wval.replace(re,'$3');this.sendRequest(cmd+' '+param.substr(0,pfc_max_text_len+2*this.clientid.length));}
else
{rx=new RegExp('^[ ]*$','g');wval=wval.replace(rx,'');wval=wval.substr(0,pfc_max_text_len);if(this.current_text_color!=''&&wval.length!='')
wval='[color=#'+this.current_text_color+'] '+wval+' [/color]';this.sendRequest('/send '+wval);}
w.value='';return false;},completeNick:function()
{var w=this.el_words;var selStart=w.value.length;var selEnd=selStart;if(w.setSelectionRange)
{selStart=w.selectionStart;selEnd=w.selectionEnd;}
else if(w.createTextRange&&document.selection)
{selStart=(w.selStart!=null)?w.selStart:w.value.length;selEnd=(w.selEnd!=null)?w.selEnd:w.value.length;}
var begin=w.value.lastIndexOf(' ',selStart-1)+1;var end=(w.value.indexOf(' ',selStart)>=0)?w.value.indexOf(' ',selStart):w.value.length;var nick_src=w.value.substring(begin,end);var non_nick_begin=w.value.substring(0,begin);var non_nick_end=w.value.substring(end,w.value.length);if(nick_src!='')
{var tabid=this.gui.getTabId();var n_list=this.getChanMeta(tabid,'users')['nick'];var nick_match=false;for(var i=0;i<n_list.length;i++)
{var nick_tmp=n_list[i];nick_tmp=nick_tmp.replace(/ /g,'\240');if(nick_tmp.indexOf(nick_src)==0)
{if(!nick_match)
{nick_match=true;nick_replace=nick_tmp;}
else
{var nick_len=Math.min(nick_tmp.length,nick_replace.length);var j=0;for(j=0;j<nick_len;j++)
if(nick_tmp.charAt(j)!=nick_replace.charAt(j))
break;nick_replace=nick_replace.substr(0,j);}}}
if(nick_match)
{w.value=non_nick_begin+nick_replace+non_nick_end;w.selStart=w.selEnd=non_nick_begin.length+nick_replace.length;if(w.setSelectionRange)
w.setSelectionRange(w.selEnd,w.selEnd);else
this.setSelection(w);}}},historyUp:function()
{if(this.cmdhistory.length>0)
{var w=this.el_words;if(this.cmdhistoryissearching==false&&w.value!="")
this.cmdhistory.push(w.value);this.cmdhistoryissearching=true;this.cmdhistoryid=this.cmdhistoryid-1;if(this.cmdhistoryid<0)
this.cmdhistoryid=0;w.value=this.cmdhistory[this.cmdhistoryid];}},historyDown:function()
{if(this.cmdhistory.length>0)
{var w=this.el_words;if(this.cmdhistoryissearching==false&&w.value!="")
this.cmdhistory.push(w.value);this.cmdhistoryissearching=true;this.cmdhistoryid=this.cmdhistoryid+1;if(this.cmdhistoryid>=this.cmdhistory.length)
{this.cmdhistoryid=this.cmdhistory.length;w.value="";}
else
w.value=this.cmdhistory[this.cmdhistoryid];}},callbackWords_OnKeypress:function(evt)
{var code=(evt.which)?evt.which:evt.keyCode;if(code==Event.KEY_RETURN)
{return this.doSendMessage();}
else
{return true;}},callbackWords_OnKeydown:function(evt)
{if(!this.isconnected)return false;this.clearError(Array(this.el_words));var code=(evt.which)?evt.which:evt.keyCode
if(code==38&&(is_gecko||is_ie||is_opera||is_webkit))
{this.historyUp();if(evt.returnValue)
evt.returnValue=false;if(evt.preventDefault)
evt.preventDefault();return false;}
else if(code==40&&(is_gecko||is_ie||is_opera||is_webkit))
{this.historyDown();if(evt.returnValue)
evt.returnValue=false;if(evt.preventDefault)
evt.preventDefault();return false;}
else if(code==9)
{this.completeNick();if(is_opera)
{evt.target.onblur=function(){this.focus();this.onblur=null;};}
if(evt.returnValue)
evt.returnValue=false;if(evt.preventDefault)
evt.preventDefault();return false;}
else
{return true;}},callbackWords_OnKeyup:function(evt)
{this.storeSelectionPos(this.el_words);},callbackWords_OnMouseup:function(evt)
{this.storeSelectionPos(this.el_words);},callbackWords_OnFocus:function(evt)
{this.setSelection(this.el_words);},callback_OnUnload:function(evt)
{if(pfc_quit_on_closedwindow)
{if(!this.isconnected)return false;this.sendRequest('/quit');}},clearError:function(ids)
{this.el_errors.style.display='none';for(var i=0;i<ids.length;i++)
this.blink(ids[i].id,'stop');},setError:function(str,ids)
{this.el_errors.innerHTML=str;this.el_errors.style.display='block';for(var i=0;i<ids.length;i++)
this.blink(ids[i].id,'start');},blink:function(id,action)
{clearTimeout(this.blinktimeout[id]);if($(id)==null)return;if(action=='start')
{this.blinktmp[id]=$(id).style.backgroundColor;clearTimeout(this.blinktimeout[id]);this.blinktimeout[id]=setTimeout('pfc.blink(\''+id+'\',\'loop\')',500);}
if(action=='stop')
{$(id).style.backgroundColor=this.blinktmp[id];}
if(action=='loop')
{if(this.blinkloop[id]==1)
{$(id).style.backgroundColor='#FFDFC0';this.blinkloop[id]=2;}
else
{$(id).style.backgroundColor='#FFFFFF';this.blinkloop[id]=1;}
this.blinktimeout[id]=setTimeout('pfc.blink(\''+id+'\',\'loop\')',500);}},displayMsg:function(cmd,msg)
{this.setError(msg,Array());},handleComingRequest:function(cmds)
{var msg_html=$H();var max_msgid=$H();for(var mid=0;mid<cmds.length;mid++)
{var id=cmds[mid][0];var date=cmds[mid][1];var time=cmds[mid][2];var sender=cmds[mid][3];var recipientid=cmds[mid][4];var cmd=cmds[mid][5];var param=cmds[mid][6];var fromtoday=cmds[mid][7];var oldmsg=cmds[mid][8];var line='';line+='<div id="pfc_msg_'+recipientid+'_'+id+'" class="pfc_cmd_'+cmd+' pfc_message';line+=(id%2==0)?' pfc_evenmsg':' pfc_oddmsg';if(oldmsg==1)line+=' pfc_oldmsg';line+='">';line+='<span class="pfc_date';if(fromtoday==1)line+=' pfc_invisible';line+='">'+date+'</span> ';line+='<span class="pfc_heure">'+time+'</span> ';if(cmd=='send')
{line+=' <span class="pfc_nick">';line+='&#x2039;';line+='<span ';line+='onclick="pfc.insert_text(\''+sender.escapeHTML().replace("'",'\\\'')+', \',\'\',false)" ';line+='class="pfc_nickmarker pfc_nick_'+_to_utf8(sender).md5()+'">';line+=sender.escapeHTML();line+='</span>';line+='&#x203A;';line+='</span> ';}
if(cmd=='notice'||cmd=='me')
line+='<span class="pfc_words">* '+this.parseMessage(param)+'</span> ';else
line+='<span class="pfc_words">'+this.parseMessage(param)+'</span> ';line+='</div>';if(oldmsg==0)
if(cmd=='send'||cmd=='me')
{var tabid=recipientid;if(this.gui.getTabId()!=tabid)
this.gui.notifyTab(tabid);if(!this.detectactivity.isActive()&&pfc_notify_window)
this.gui.notifyWindow();}
if(msg_html.get(recipientid)==null)
msg_html.set(recipientid,line);else
msg_html.set(recipientid,msg_html.get(recipientid)+line);if(!max_msgid.get(recipientid))max_msgid.set(recipientid,0);if(max_msgid.get(recipientid)<id)max_msgid.set(recipientid,id);}
var keys=msg_html.keys();for(var i=0;i<keys.length;i++)
{var recipientid=keys[i];var tabid=recipientid;var recipientdiv=this.gui.getChatContentFromTabId(tabid);var m=document.createElement('div');m.innerHTML=msg_html.get(recipientid);this.colorizeNicks(m);this.refresh_clock(m);recipientdiv.appendChild(m);this.gui.scrollDown(tabid,m);var limit_msgid=max_msgid.get(recipientid)-pfc_max_displayed_lines;var elt=$('pfc_msg_'+recipientid+'_'+limit_msgid);while(elt)
{if(elt.parentNode)
elt.parentNode.removeChild(elt);else if(elt.parentElement)
elt.parentElement.removeChild(elt);else
elt.innerHTML='';limit_msgid--;elt=$('pfc_msg_'+recipientid+'_'+limit_msgid);}}},calcDelay:function()
{var lastact=new Date().getTime()-this.last_activity_time;var dlist=this.refresh_delay_steps.slice();var delay=dlist.shift();if(this.refresh_delay>delay)delay=this.refresh_delay;var limit;while(typeof(limit=dlist.shift())!="undefined")
{var d=dlist.shift();if(d<delay)continue;if(lastact>limit)delay=d;}
return delay;},sendRequest:function(cmd,recipientid)
{if(cmd=='/update'&&this.pfc_ajax_connected)return;var delay=this.calcDelay();if(cmd!="/update")
{clearTimeout(this.timeout);this.timeout=setTimeout('pfc.updateChat(true)',delay);this.timeout_time=new Date().getTime()+delay;if(pfc_debug)
trace('sendRequest: '+cmd);}
var rx=new RegExp('(^\/[^ ]+) *(.*)','ig');if(!recipientid)recipientid=this.gui.getTabId();cmd=cmd.replace(rx,'$1 '+this.clientid+' '+(recipientid==''?'0':recipientid)+' $2');var url=pfc_server_script_url;new Ajax.Request(url,{method:'post',parameters:{'pfc_ajax':1,'f':'handleRequest','cmd':cmd},onCreate:function(transport){this.pfc_ajax_connected=true;this.last_request_time=new Date().getTime();}.bind(this),onSuccess:function(transport){if(!transport.status)return;this.last_response_time=new Date().getTime();eval(transport.responseText);}.bind(this),onComplete:function(transport){this.pfc_ajax_connected=false;this.ping=Math.abs(this.last_response_time-this.last_request_time);if($('pfc_ping'))$('pfc_ping').innerHTML=this.ping+'ms'+' ['+parseInt(this.calcDelay()/1000)+'s]';}.bind(this)});},updateChat:function(start)
{clearTimeout(this.timeout);if(start)
{this.sendRequest('/update');var delay=this.calcDelay();this.timeout=setTimeout('pfc.updateChat(true)',delay);this.timeout_time=new Date().getTime()+delay;}},storeSelectionPos:function(obj)
{if(obj.setSelectionRange)
{obj.selStart=obj.selectionStart;obj.selEnd=obj.selectionEnd;return true;}
else if(obj.createTextRange&&document.selection)
{var range=document.selection.createRange();var isCollapsed=range.compareEndPoints("StartToEnd",range)==0;if(!isCollapsed)
range.collapse(true);var b=range.getBookmark();obj.selStart=b.charCodeAt(2)-b.charCodeAt(0)-1;range=document.selection.createRange();isCollapsed=range.compareEndPoints("StartToEnd",range)==0;if(!isCollapsed)
range.collapse(false);b=range.getBookmark();obj.selEnd=b.charCodeAt(2)-b.charCodeAt(0)-1;return true;}
else
return false;},setSelection:function(obj)
{if(obj.setSelectionRange)
{return null;}
else if(obj.createTextRange)
{var range=obj.createTextRange();range.collapse(true);range.moveStart("character",obj.selStart);range.moveEnd("character",obj.selEnd-obj.selStart);range.select();return range;}
else
return null;},insertSmiley:function(smiley)
{var w=this.el_words;if(w.setSelectionRange)
{var s=w.selectionStart;var e=w.selectionEnd;w.value=w.value.substring(0,s)+smiley+w.value.substr(e);w.setSelectionRange(s+smiley.length,s+smiley.length);w.focus();}
else if(w.createTextRange)
{w.focus();var range=this.setSelection(w);range.text=smiley;w.selStart=(w.selStart)?w.selStart+smiley.length:smiley.length;w.selEnd=w.selStart;}
else
{w.value+=smiley;w.focus();}},updateNickBox:function(nickid)
{var chanids=this.chanmeta.keys();for(var i=0;chanids.length>i;i++)
{this.updateNickListBox(chanids[i]);}},updateNickListBox:function(chanid)
{var className=(!is_ie)?'class':'className';var nickidlst=this.getChanMeta(chanid,'users').get('nickid');var nickdiv=this.gui.getOnlineContentFromTabId(chanid);var ul=document.createElement('ul');ul.setAttribute(className,'pfc_nicklist');for(var i=0;i<nickidlst.length;i++)
{var nickid=nickidlst[i];var li=this.buildNickItem(nickid);li.setAttribute(className,'pfc_nickitem_'+nickid);ul.appendChild(li);}
var fc=nickdiv.firstChild;if(fc)
nickdiv.replaceChild(ul,fc);else
nickdiv.appendChild(ul,fc);this.colorizeNicks(nickdiv);},getNickWhoisBox:function(nickid)
{if(!this.nickwhoisbox.get(nickid))
this.updateNickWhoisBox(nickid);return this.nickwhoisbox.get(nickid);},updateNickWhoisBox:function(nickid)
{var className=(!is_ie)?'class':'className';var usermeta=this.getAllUserMeta(nickid);var div=document.createElement('div');div.setAttribute(className,'pfc_nickwhois');var p=document.createElement('p');p.setAttribute(className,'pfc_nickwhois_header');div.appendChild(p);var img=document.createElement('img');img.setAttribute(className,'pfc_nickwhois_close');img.pfc_parent=div;img.onclick=function(evt){this.pfc_parent.style.display='none';return false;}
img.setAttribute('src',this.res.getFileUrl('images/close-whoisbox.gif'));img.alt=this.res.getLabel('Close');p.appendChild(img);p.appendChild(document.createTextNode(usermeta.get('nick')));var table=document.createElement('table');var tbody=document.createElement('tbody');table.appendChild(tbody);var um_keys=usermeta.keys();var msg='';for(var i=0;i<um_keys.length;i++)
{var k=um_keys[i];var v=usermeta.get(k);if(v&&k!='nickid'&&k!='nick'&&k!='isadmin'&&k!='floodtime'&&k!='flood_nbmsg'&&k!='flood_nbchar')
{var tr=document.createElement('tr');if(pfc_nickmeta_key_to_hide.indexOf(k)!=-1)
{var td2=document.createElement('td');td2.setAttribute(className,'pfc_nickwhois_c2');td2.setAttribute('colspan',2);td2.innerHTML=v;tr.appendChild(td2);}
else
{var td1=document.createElement('td');td1.setAttribute(className,'pfc_nickwhois_c1');var td2=document.createElement('td');td2.setAttribute(className,'pfc_nickwhois_c2');td1.innerHTML=k;td2.innerHTML=v;tr.appendChild(td1);tr.appendChild(td2);}
tbody.appendChild(tr);}}
div.appendChild(table);if(pfc.getUserMeta(nickid,'nick')!=this.nickname)
{var p=document.createElement('p');p.setAttribute(className,'pfc_nickwhois_pv');var a=document.createElement('a');a.setAttribute('href','');a.pfc_nickid=nickid;a.pfc_parent=div;a.onclick=function(evt){var nick=pfc.getUserMeta(this.pfc_nickid,'nick');pfc.sendRequest('/privmsg "'+nick+'"');this.pfc_parent.style.display='none';return false;}
var img=document.createElement('img');img.setAttribute('src',this.res.getFileUrl('images/openpv.gif'));img.alt=document.createTextNode(this.res.getLabel('Private message'));a.appendChild(img);a.appendChild(document.createTextNode(this.res.getLabel('Private message')));p.appendChild(a);div.appendChild(p);}
this.nickwhoisbox.set(nickid,div);},buildNickItem:function(nickid)
{var className=(!is_ie)?'class':'className';var nick=this.getUserMeta(nickid,'nick');var isadmin=this.getUserMeta(nickid,'isadmin');if(isadmin=='')isadmin=false;var li=document.createElement('li');var a=document.createElement('a');a.setAttribute('href','#');a.pfc_nick=nick;a.pfc_nickid=nickid;a.onclick=function(evt){var d=pfc.getNickWhoisBox(this.pfc_nickid);document.body.appendChild(d);d.style.display='block';d.style.zIndex='400';d.style.position='absolute';d.style.left=(mousePosX(evt)-7)+'px';d.style.top=(mousePosY(evt)-7)+'px';return false;}
li.appendChild(a);var img=document.createElement('img');if(isadmin)
img.setAttribute('src',this.res.getFileUrl('images/user-admin.gif'));else
img.setAttribute('src',this.res.getFileUrl('images/user.gif'));img.style.marginRight='5px';img.setAttribute(className,'pfc_nickbutton');a.appendChild(img);var nobr=document.createElement('nobr');var span=document.createElement('span');span.setAttribute(className,'pfc_nickmarker pfc_nick_'+nickid);span.innerHTML=nick.escapeHTML();nobr.appendChild(span);a.appendChild(nobr);return li;},clearNickList:function()
{},clearMessages:function()
{},parseMessage:function(msg)
{var rx=null;if(false)
{rx=new RegExp('<a href="mailto:(.*?)".*?>.*?<\/a>','ig');msg=msg.replace(rx,'$1');rx=new RegExp('<a href="(.*?)".*?>.*?<\/a>','ig');msg=msg.replace(rx,'$1');}
rx=new RegExp(' (?= )(?![^<]*>)','g');msg=msg.replace(rx,'&nbsp;');rx=new RegExp('\\[b\\](.+?)\\[\/b\\]','ig');msg=msg.replace(rx,'<span style="font-weight: bold">$1</span>');rx=new RegExp('\\[i\\](.+?)\\[\/i\\]','ig');msg=msg.replace(rx,'<span style="font-style: italic">$1</span>');rx=new RegExp('\\[u\\](.+?)\\[\/u\\]','ig');msg=msg.replace(rx,'<span style="text-decoration: underline">$1</span>');rx=new RegExp('\\[s\\](.+?)\\[\/s\\]','ig');msg=msg.replace(rx,'<span style="text-decoration: line-through">$1</span>');rx=new RegExp('\\[color=([a-zA-Z]+|\\#?[0-9a-fA-F]{6}|\\#?[0-9a-fA-F]{3})](.+?)\\[\/color\\]','ig');msg=msg.replace(rx,'<span style="color: $1">$2</span>');rx=new RegExp('\\[color=([a-zA-Z]+|\\#?[0-9a-fA-F]{6}|\\#?[0-9a-fA-F]{3})](.+?)\\[\/color\\]','ig');msg=msg.replace(rx,'<span style="color: $1">$2</span>');var smileys=this.res.getSmileyHash();var sl=this.res.getSmileyKeys();for(var i=0;i<sl.length;i++)
{rx=new RegExp(RegExp.escape(sl[i])+'(?![^<]*>)','g');msg=msg.replace(rx,'<img src="'+smileys.get(sl[i])+'" alt="'+sl[i]+'" title="'+sl[i]+'" />');}
rx=new RegExp('(^|[ :,;])'+RegExp.escape(this.nickname)+'([ :,;]|$)','gi');msg=msg.replace(rx,'$1<strong>'+this.nickname+'</strong>$2');return msg;},colorizeNicks:function(root)
{if(this.nickmarker)
{var nicklist=this.getElementsByClassName(root,'pfc_nickmarker','');for(var i=0;i<nicklist.length;i++)
{var cur_nick=nicklist[i].innerHTML;var cur_color=this.getAndAssignNickColor(cur_nick);nicklist[i].style.color=cur_color;}}},reloadColorList:function()
{this.colorlist=$A(pfc_nickname_color_list);},getAndAssignNickColor:function(nick)
{var already_colorized=false;var nc='';for(var j=0;j<this.nickcolor.length&&!already_colorized;j++)
{if(this.nickcolor[j][0]==nick)
{already_colorized=true;nc=this.nickcolor[j][1];}}
if(!already_colorized)
{if(this.colorlist.length==0)this.reloadColorList();var cid=Math.round(Math.random()*(this.colorlist.length-1));nc=this.colorlist[cid];this.colorlist.splice(cid,1);this.nickcolor.push(new Array(nick,nc));}
return nc;},applyNickColor:function(root,nick,color)
{var nicktochange=this.getElementsByClassName(root,'pfc_nick_'+_to_utf8(nick).md5(),'');for(var i=0;nicktochange.length>i;i++)
nicktochange[i].style.color=color;},getElementsByClassName:function(root,clsName,clsIgnore)
{var i,matches=new Array();var els=root.getElementsByTagName('*');var rx1=new RegExp('.*'+clsName+'.*');var rx2=new RegExp('.*'+clsIgnore+'.*');for(i=0;i<els.length;i++){if(els.item(i).className.match(rx1)&&(clsIgnore==''||!els.item(i).className.match(rx2)))
{matches.push(els.item(i));}}
return matches;},showClass:function(root,clsName,clsIgnore,show)
{var elts=this.getElementsByClassName(root,clsName,clsIgnore);for(var i=0;elts.length>i;i++)
if(show)
elts[i].style.display='inline';else
elts[i].style.display='none';},nickmarker_swap:function()
{if(this.nickmarker){this.nickmarker=false;}else{this.nickmarker=true;}
this.refresh_nickmarker()
setCookie('pfc_nickmarker',this.nickmarker);},refresh_nickmarker:function(root)
{var nickmarker_icon=$('pfc_nickmarker');if(!root)root=$('pfc_channels_content');if(this.nickmarker)
{nickmarker_icon.src=this.res.getFileUrl('images/color-on.gif');nickmarker_icon.alt=this.res.getLabel("Hide nickname marker");nickmarker_icon.title=nickmarker_icon.alt;this.colorizeNicks(root);}
else
{nickmarker_icon.src=this.res.getFileUrl('images/color-off.gif');nickmarker_icon.alt=this.res.getLabel("Show nickname marker");nickmarker_icon.title=nickmarker_icon.alt;var elts=this.getElementsByClassName(root,'pfc_nickmarker','');for(var i=0;elts.length>i;i++)
{elts[i].style.color='';}}},clock_swap:function()
{if(this.clock){this.clock=false;}else{this.clock=true;}
this.refresh_clock();setCookie('pfc_clock',this.clock);},refresh_clock:function(root)
{var clock_icon=$('pfc_clock');if(!root)root=$('pfc_channels_content');if(this.clock)
{clock_icon.src=this.res.getFileUrl('images/clock-on.gif');clock_icon.alt=this.res.getLabel('Hide dates and hours');clock_icon.title=clock_icon.alt;this.showClass(root,'pfc_date','pfc_invisible',true);this.showClass(root,'pfc_heure','pfc_invisible',true);}
else
{clock_icon.src=this.res.getFileUrl('images/clock-off.gif');clock_icon.alt=this.res.getLabel('Show dates and hours');clock_icon.title=clock_icon.alt;this.showClass(root,'pfc_date','pfc_invisible',false);this.showClass(root,'pfc_heure','pfc_invisible',false);}},sound_swap:function()
{if(this.issoundenable){this.issoundenable=false;}else{this.issoundenable=true;}
this.refresh_sound();setCookie('pfc_issoundenable',this.issoundenable);},refresh_sound:function(root)
{var snd_icon=$('pfc_sound');if(this.issoundenable)
{snd_icon.src=this.res.getFileUrl('images/sound-on.gif');snd_icon.alt=this.res.getLabel('Disable sound notifications');snd_icon.title=snd_icon.alt;}
else
{snd_icon.src=this.res.getFileUrl('images/sound-off.gif');snd_icon.alt=this.res.getLabel('Enable sound notifications');snd_icon.title=snd_icon.alt;}},connect_disconnect:function()
{if(this.isconnected)
this.sendRequest('/quit');else
{if(this.nickname=='')
this.askNick();else
this.sendRequest('/connect "'+this.nickname+'"');}},refresh_loginlogout:function()
{var loginlogout_icon=$('pfc_loginlogout');if(this.isconnected)
{loginlogout_icon.src=this.res.getFileUrl('images/logout.gif');loginlogout_icon.alt=this.res.getLabel('Disconnect');loginlogout_icon.title=loginlogout_icon.alt;}
else
{this.clearMessages();this.clearNickList();loginlogout_icon.src=this.res.getFileUrl('images/login.gif');loginlogout_icon.alt=this.res.getLabel('Connect');loginlogout_icon.title=loginlogout_icon.alt;}},swap_minimize_maximize:function()
{if(this.minmax_status){this.minmax_status=false;}else{this.minmax_status=true;}
setCookie('pfc_minmax_status',this.minmax_status);this.refresh_minimize_maximize();},refresh_minimize_maximize:function()
{var content=$('pfc_content_expandable');var btn=$('pfc_minmax');if(this.minmax_status)
{btn.src=this.res.getFileUrl('images/maximize.gif');btn.alt=this.res.getLabel('Magnify');btn.title=btn.alt;content.style.display='none';}
else
{btn.src=this.res.getFileUrl('images/minimize.gif');btn.alt=this.res.getLabel('Cut down');btn.title=btn.alt;content.style.display='block';}},insert_text:function(open,close,promptifselempty)
{var msgfield=$('pfc_words');var pfcp=this.getPrompt();pfcp.msgfield=msgfield;pfcp.open=open;pfcp.close=close;pfcp.promptifselempty=promptifselempty;pfcp.callback=this.insert_text_callback;if(msgfield.selectionStart||msgfield.selectionStart=='0')
{var startPos=msgfield.selectionStart;var endPos=msgfield.selectionEnd;var text=msgfield.value.substring(startPos,endPos);if(startPos==endPos&&promptifselempty)
{pfcp.prompt(this.res.getLabel('Enter the text to format'),'');pfcp.focus();}
else
this.insert_text_callback(text,pfcp);}
else if(document.selection&&document.selection.createRange)
{msgfield.focus();pfcp.range=this.setSelection(msgfield);var text=pfcp.range.text;if(text==""&&promptifselempty)
{pfcp.prompt(this.res.getLabel('Enter the text to format'),'');pfcp.focus();}
else
this.insert_text_callback(text,pfcp);}
else
{pfcp.prompt(this.res.getLabel('Enter the text to format'),'');pfcp.focus();}
return;},insert_text_callback:function(text,pfcp)
{var open=pfcp.open;var close=pfcp.close;var promptifselempty=pfcp.promptifselempty;var msgfield=pfcp.msgfield;var range=pfcp.range;if(msgfield.selectionStart||msgfield.selectionStart=='0')
{var startPos=msgfield.selectionStart;var endPos=msgfield.selectionEnd;var extralength=0;if(startPos==endPos&&promptifselempty)
{if(text==null)text="";extralength=text.length;}
if(text.length>0||!promptifselempty)
{msgfield.value=msgfield.value.substring(0,startPos)+open+text+close+msgfield.value.substring(endPos,msgfield.value.length);var caretPos=endPos+open.length+extralength+close.length;msgfield.setSelectionRange(caretPos,caretPos);msgfield.focus();}}
else if(document.selection&&document.selection.createRange)
{if(text==null)text="";if(text.length>0||!promptifselempty)
{msgfield.focus();range.text=open+text+close;msgfield.selStart=(msgfield.selStart)?msgfield.selStart+open.length+text.length+close.length:open.length+text.length+close.length;msgfield.selEnd=msgfield.selStart;msgfield.focus();}}
else
{if(text==null)text="";if(text.length>0||!promptifselempty)
{msgfield.value+=open+text+close;msgfield.focus();}}},minimize_maximize:function(idname,type)
{var element=$(idname);if(element.style)
{if(element.style.display==type)
{element.style.display='none';}
else
{element.style.display=type;}}},switch_text_color:function(color)
{var colorbtn=this.getElementsByClassName($('pfc_colorlist'),'pfc_color','');for(var i=0;colorbtn.length>i;i++)
{colorbtn[i].style.border='none';colorbtn[i].style.padding='0';}
this.current_text_color=color;setCookie('pfc_current_text_color',this.current_text_color);var idname='pfc_color_'+color;$(idname).style.border='1px solid #555';$(idname).style.padding='1px';this.el_words.style.color='#'+color;this.el_words.focus();},showHideSmileys:function()
{if(this.showsmileys)
{this.showsmileys=false;}
else
{this.showsmileys=true;}
setCookie('pfc_showsmileys',this.showsmileys);this.refresh_Smileys();},refresh_Smileys:function()
{var content=$('pfc_smileys');if(this.showsmileys)
content.style.display='block';else
content.style.display='none';var btn=$('pfc_showHideSmileysbtn');if(this.showsmileys)
{if(btn)
{btn.src=this.res.getFileUrl('images/smiley-on.gif');btn.alt=this.res.getLabel('Hide smiley box');btn.title=btn.alt;}}
else
{if(btn)
{btn.src=this.res.getFileUrl('images/smiley-off.gif');btn.alt=this.res.getLabel('Show smiley box');btn.title=btn.alt;}}},showHideWhosOnline:function()
{if(this.showwhosonline)
{this.showwhosonline=false;}
else
{this.showwhosonline=true;}
setCookie('pfc_showwhosonline',this.showwhosonline);this.refresh_WhosOnline();},refresh_WhosOnline:function()
{var root=$('pfc_channels_content');var contentlist=this.getElementsByClassName(root,'pfc_online','');for(var i=0;i<contentlist.length;i++)
{var content=contentlist[i];if(this.showwhosonline)
content.style.display='block';else
content.style.display='none';content.style.zIndex='100';}
var btn=$('pfc_showHideWhosOnlineBtn');if(!btn)return;if(this.showwhosonline)
{btn.src=this.res.getFileUrl('images/online-on.gif');btn.alt=this.res.getLabel('Hide online users box');btn.title=btn.alt;}
else
{btn.src=this.res.getFileUrl('images/online-off.gif');btn.alt=this.res.getLabel('Show online users box');btn.title=btn.alt;}
this.refresh_Chat();},refresh_Chat:function()
{var root=$('pfc_channels_content');var contentlist=this.getElementsByClassName(root,'pfc_chat','');for(var i=0;i<contentlist.length;i++)
{var chatdiv=contentlist[i];if(!this.showwhosonline)
{chatdiv.style.width='100%';}
else
{chatdiv.style.width='';}}},getPrompt:function()
{if(!this.pfc)
this.pfc=new pfcPrompt($('pfc_container'));return this.pfc;}};
