ips.templates.set('chat.tabs.tab'," <li role='presentation' data-roomID='{{roomID}}'> <a href='#' role='tab' id='{{roomID}}' class='ipsFaded_withHover ipsTabs_item ipsType_blendLinks {{#active}}ipsTabs_activeItem{{/active}}' aria-selected='false'>  {{roomTitle}} {{#close}}&nbsp;<span class='ipsFaded ipsFaded_more' data-action='closeTab' data-ipsTooltip title='{{#lang}}closeThisTab{{/lang}}'><i class='fa fa-times'></i></span>{{/close}} </a></li>");ips.templates.set('chat.tabs.main'," <div id='ipsTabs_elChatTabs_chatroom_panel' class='ipsTabs_panel' data-tab='chatroom'> <div class='ipsColumns ipsColumns_noSpacing ipsColumns_collapsePhone'>  <div class='ipsColumn ipsColumn_fluid cChatTab'>   <ul class='ipsList_reset cChatContainer {{#loading}}ipsLoading{{/loading}}'></ul>   <div class='cChatCompose ipsAreaBackground ipsPad'>    <div class='ipsColumns ipsColumns_collapsePhone'>     <div class='ipsColumn ipsColumn_fluid'>      <textarea name='message' class='cMessageTextarea' tabindex='0' maxlength='450'></textarea>     </div>     <div class='ipsColumn ipsColumn_veryNarrow cEmoticonsButton'>      <button type='button' data-action='emoticons' class='ipsButton ipsButton_narrow ipsButton_veryLight ipsButton_large ipsButton_fullWidth' data-ipsTooltip title='{{#lang}}insertEmoticon{{/lang}}' data-ipsMenu data-ipsMenu-above='true' data-ipsMenu-appendTo='#elChatWrapper' data-ipsMenu-closeOnClick='false' id='elEmoticons_chatroom'><i class='fa fa-smile-o'></i></button>     </div>     <div class='ipsColumn ipsColumn_narrow cSendButton'>      <button type='submit' class='ipsButton ipsButton_primary ipsButton_large ipsButton_fullWidth cMessageSubmit'>{{#lang}}sendChat{{/lang}}</button>     </div>    </div>   </div>  </div>  <div class='ipsColumn ipsColumn_wide'>   <div class='ipsAreaBackground ipsPad_half'>    <strong data-role='onlineChatters'>{{#lang}}noUsersChatting{{/lang}}</strong>   </div>   <ol id='elUserList' class='ipsList_reset'></ol>  </div> </div> {{{emoticons}}}</div>");ips.templates.set('chat.tabs.panel'," <div id='ipsTabs_elChatTabs_{{roomID}}_panel' class='ipsTabs_panel' data-tab='{{roomID}}' style='display: none'> <div class='ipsColumns ipsColumns_noSpacing ipsColumns_collapsePhone'>  <div class='ipsColumn ipsColumn_fluid cChatTab'>   <ul class='ipsList_reset cChatContainer'></ul>   <div class='cChatCompose ipsAreaBackground ipsPad'>    <div class='ipsColumns ipsColumns_collapsePhone'>     <div class='ipsColumn ipsColumn_fluid'>      <textarea name='message' class='cMessageTextarea' tabindex='0' maxlength='450'></textarea>     </div>     <div class='ipsColumn ipsColumn_veryNarrow'>      <button type='button' data-action='emoticons' class='ipsButton ipsButton_narrow ipsButton_veryLight ipsButton_large ipsButton_fullWidth' data-ipsTooltip title='{{#lang}}insertEmoticon{{/lang}}' data-ipsMenu data-ipsMenu-above='true' data-ipsMenu-appendTo='#elChatWrapper' data-ipsMenu-closeOnClick='false' id='elEmoticons_{{roomID}}'><i class='fa fa-smile-o'></i></button>     </div>     <div class='ipsColumn ipsColumn_narrow'>      <button type='submit' class='ipsButton ipsButton_primary ipsButton_large ipsButton_fullWidth cMessageSubmit'>{{#lang}}sendChat{{/lang}}</button>     </div>    </div>   </div>  </div>  <div class='ipsColumn ipsColumn_wide'>   <div class='ipsAreaBackground ipsPad_half'>    <strong>{{#lang}}privateChat{{/lang}}</strong>   </div>   <div class='cChatUserInfo'></div>  </div> </div> {{{emoticons}}}</div>");ips.templates.set('chat.userStatus'," <li class='cChatRow cChatRow_notice ipsContained ipsType_break'> <div class='cChatRow_user'></div> <div class='cChatRow_content'>{{action}}</div> <div class='cChatRow_date'></div></li>");ips.templates.set('chat.normalCompound'," <li class='cChatRow cChatRow_message {{#own}}cChatRow_own{{/own}} cChatRow_compound ipsContained ipsType_break'> <div class='cChatRow_user'></div> <div class='cChatRow_content'>{{{message}}}</div> <div class='cChatRow_date'>{{date}}</div></li>");ips.templates.set('chat.normal'," <li class='cChatRow cChatRow_message {{#own}}cChatRow_own{{/own}} ipsContained ipsType_break'> <div class='cChatRow_user'>{{{username}}} <span class='ipsResponsive_showPhone ipsResponsive_inline cChatRow_responsiveDate ipsType_light'>{{date}}</span></div> <div class='cChatRow_content'>{{{message}}}</div> <div class='cChatRow_date'>{{date}}</div></li>");ips.templates.set('chat.me'," <li class='cChatRow cChatRow_me ipsContained ipsType_break'> <div class='cChatRow_user'></div> <div class='cChatRow_content'>{{{text}}}</div> <div class='cChatRow_date'>{{date}}</div></li>");ips.templates.set('chat.system'," <li class='cChatRow cChatRow_system ipsContained ipsType_break'> <div class='cChatRow_user'>{{#lang}}system{{/lang}} <span class='ipsResponsive_showPhone ipsResponsive_inline cChatRow_responsiveDate ipsType_light'>{{date}}</span></div> <div class='cChatRow_content'>{{text}}</div> <div class='cChatRow_date'>{{date}}</div></li>");ips.templates.set('chat.chatDate'," <li class='cChatRow cChatRow_date ipsContained ipsType_break'> <div class='cChatRow_user'></div> <div class='cChatRow_content'>{{date}}</div> <div class='cChatRow_date'>{{date}}</div></li>");ips.templates.set('chat.parsedImage'," <div class='cChatParsedImage ipsFaded_withHover'><a href='{{url}}' target='_blank' rel='noopener noreferrer' data-ipsLightbox><img src='{{url}}'></a> <span class='ipsType_light ipsHide' data-role='imageHidden'>{{#lang}}imageHidden{{/lang}}</span> <a href='#' class='ipsFaded ipsFaded_more ipsButton ipsButton_narrow ipsButton_verySmall ipsButton_primary' title='{{#lang}}hideImage{{/lang}}' data-ipsTooltip data-action='toggleImage'><i class='fa fa-caret-up'></i></a></div>");;
;(function($,_,undefined){"use strict";ips.controller.register('chat.front.chatcompat.main',{_polling:3,_lastPolled:0,_lastMsgId:0,_lastTime:null,_doneInitialLoad:false,_kicked:false,_chattingUpdate:60,_bypassFlag:false,_templates:[],_emoticons:{},_unreadTabs:{},_lastAction:null,_lastUser:{},_poller:null,_updater:null,_charset:'',_iframe:null,_iframeWindow:null,_secure:true,_urlRegex:/\b(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:localhost)|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,}))\.?)(?::\d{2,5})?(?:[/?#]\S*)?\b/ig,_imgRegex:/^(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;\(\)]*[-A-Z0-9+&@#\/%=~_|])(\.jpg|\.png|\.gif)$/ig,initialize:function(){this.on(window,'message',this.windowMessage);this.on('tabShown','#elChatTabs',this.tabShown);this.on('click','[data-action="closeTab"]',this.closeTab);this.on('keypress','.cMessageTextarea',this.messageBoxKeypress);this.on('click','.cMessageSubmit',this.submitButtonClick);this.on('menuItemSelected','.cChatUserRow',this.userMenu);this.on('click','[data-action="toggleSound"]',this.toggleSound);this.on('click','[data-action="toggleImage"]',this.toggleImage);this.on(window,'focus',this.windowFocus);this.on(window,'blur',this.windowBlur);this.on(document,'insertEmoticon',this.insertEmoticon);this.setup();},setup:function(){var self=this;if(window.btoa&&window.atob){this._doSetup();}else{ips.loader.get(['chat/interface/base64/base64.js']).then(function(){self._doSetup();});}},_doSetup:function(){var self=this;this._setUpMainPanel();this._createBadge();this._lastAction=this._getCurrentTime();this._createIFrame();this._buildInitialList();this.scope.find('[data-action="toggleSound"] .fa').replaceWith($('<i/>').addClass('fa').addClass(ips.getSetting('soundEnabled')?'fa-volume-up':'fa-volume-off'));this._poller=setInterval(_.bind(this._getMessages,this),this._polling*1000);this._updater=setInterval(_.bind(this._ping,this),this._chattingUpdate*1000);this._charset=$('meta[charset]').attr('charset');},windowFocus:function(){this._windowHasFocus=true;this._cleanTitle();},windowBlur:function(){this._windowHasFocus=false;this._unreadCount=0;},tabShown:function(e,data){this._activeTab=data.tabID;this._updateTabCount(data.tabID,0);if(!_.isUndefined(this._unreadTabs[data.tabID])){this._unreadTabs[data.tabID]=0;}},insertEmoticon:function(e,data){var room=this.scope.find('[data-tab="'+data.editorID+'"]');if(!data.text||!room.length){return;}
if(this._activeTab!=data.editorID){return;}
var textarea=room.find('textarea');var startSpace=(textarea.val()!=='');textarea.focus();textarea.replaceSelectedText((startSpace?' ':'')+data.text+' ');},windowMessage:function(e){var response=e.originalEvent.data;if(this._kicked||!response.length){return;}
if(response.substr(0,7)=='height='){return false;}
if(response.substr(0,9)=='__ready__'||response.substr(0,8)=='__post__'||response.substr(0,12)=='__moderate__'){this._getMessages();}else{this._updateMessages(response);}},messageBoxKeypress:function(e){if(e.keyCode==ips.ui.key.ENTER){this._sendChat(e);}},submitButtonClick:function(e){e.currentTarget=$(e.currentTarget).closest('.cChatCompose').find('textarea.cMessageTextarea');this._sendChat(e);},userMenu:function(e,data){var userRow=$(data.triggerElem);var userID=userRow.attr('data-userID');var forumUserID=userRow.attr('data-forumUserID');var username=userRow.attr('data-username');switch(data.selectedItemID){case'private':data.originalEvent.preventDefault();if(!ips.getSetting('private')){return;}
this._doPrivateChat(forumUserID,userID,username);break;case'ignore':data.originalEvent.preventDefault();this._ignoreUser(forumUserID,userID,username);break;case'unignore':data.originalEvent.preventDefault();this._unignoreUser(forumUserID,userID,username);break;case'kick':data.originalEvent.preventDefault();if(!ips.getSetting('moderator')){return;}
this._kickUser(forumUserID,userID,username);break;case'ban':data.originalEvent.preventDefault();if(!ips.getSetting('moderator')){return;}
this._kickUser(forumUserID,userID,username);this._banUser(forumUserID,userID,username);break;}},toggleSound:function(e){e.preventDefault();this.scope.find('[data-action="toggleSound"] .fa').replaceWith($('<i/>').addClass('fa').addClass(ips.getSetting('soundEnabled')?'fa-volume-off':'fa-volume-up').removeClass(ips.getSetting('soundEnabled')?'fa-volume-up':'fa-volume-off'));ips.setSetting('soundEnabled',!ips.getSetting('soundEnabled'));ips.utils.db.set('chat','sounds',ips.getSetting('soundEnabled'));ips.ui.flashMsg.show(ips.getSetting('soundEnabled')?ips.getString('soundEnabled'):ips.getString('soundDisabled'));},closeTab:function(e,data){var tab=$(e.currentTarget).closest('.ipsTabs_item');this._doCloseTab(tab);},toggleImage:function(e){e.preventDefault();var container=$(e.currentTarget).closest('.cChatParsedImage');if(container.attr('data-isHidden')){container.removeAttr('data-isHidden').find('img').show().end().find('[data-role="imageHidden"]').hide().end().find('.fa').removeClass('fa-caret-down').addClass('fa-caret-up');}else{container.attr('data-isHidden',true).find('img').hide().end().find('[data-role="imageHidden"]').show().end().find('.fa').addClass('fa-caret-down').removeClass('fa-caret-up');}},_createBadge:function(){},_setUpMainPanel:function(){var tabTemplate=ips.templates.render('chat.tabs.tab',{roomID:'chatroom',roomTitle:ips.getString('chatroom'),tooltip:ips.getString('chatroomTooltip'),close:false,active:true});var panelTemplate=ips.templates.render('chat.tabs.main',{roomID:'chatroom',roomTitle:ips.getString('chatroom'),emoticons:ips.templates.render('core.editor.emoticons',{id:'elEmoticons_chatroom',editor:'chatroom'}),loading:true});this.scope.find('#elChatTabsContent').append(panelTemplate);this.scope.find('#elChatTabBar').append(tabTemplate);this.scope.find('#elChatTabs').attr('data-ipsTabBar','').attr('data-ipsTabBar-contentarea','#elChatTabsContent');$(document).trigger('contentChange',[this.scope.find('#elChatWrapper')]);},_doCloseTab:function(tab){if(!tab.length){return;}
var tabParent=tab.closest('li');var active=tab.hasClass('ipsTabs_activeItem');var switchTo=null;var tabID=tab.attr('id');if(active){switchTo=tabParent.prev().length?tabParent.prev():(tabParent.next().length)?tabParent.next():tabParent.siblings('#chatroom');switchTo.find('> a').click();}
ips.utils.anim.go('fadeOutDown fast',tabParent).done(function(){tabParent.remove();});this.scope.find('.ipsTabs_panel[data-tab="'+tabID+'"]').remove();},_cleanTitle:function(){if(document.title.match(/\(\d+\) (.+?)/gi)){setTimeout(function(){document.title=document.title.replace(/\(\d+\) (.+?)/gi,"$1")},200);}
this._unreadCount=0;},_doPrivateChat:function(forumUserID,userID,username){if(userID==ips.getSetting('userID')){Debug.error("Can't chat with yourself");return;}
if(!_.isUndefined(ips.getSetting('ignoredChats')[userID])){ips.ui.alert.show({type:'alert',icon:'info',message:ips.getString('cantChatWithSelf'),callbacks:{}});return;}
if(!this.scope.find('[data-roomid="private_'+userID+'"]').length){this._createTab(userID,forumUserID,username);}
this._switchToTab('private_'+userID);},_ping:function(){var url='?app=chat&module=chat&controller=action&do=ping';var self=this;ips.getAjax()(url,{data:{id:ips.getSetting('userID')}}).done(function(response){}).fail(function(response){if(response.responseJSON.message){var containers=self._getAllStorageContainers();containers.append(ips.templates.render('chat.system',{text:response.responseJSON.message,date:self._getChatTime(self._getCurrentTime())}));self._kicked=true;self._scrollToBottom(self._activeTab);}});},_banUser:function(forumUserID,userID,username){if(userID==ips.getSetting('userID')){Debug.error("Can't ban yourself");return;}
if(!ips.getSetting('moderator')){Debug.error("You aren't a moderator.");return;}
if(!forumUserID){Debug.error("Can't ban guests.");return;}
var url='?app=chat&module=chat&controller=action&do=banUser';ips.getAjax()(url,{data:{id:forumUserID,block:0},type:'post'});this._syncMenuOptions(userID,forumUserID);this._lastAction=this._getCurrentTime();},_kickUser:function(forumUserID,userID,username){if(!ips.getSetting('moderator')){Debug.error("You aren't a moderator.");return;}
if(userID==ips.getSetting('userID')){Debug.error("Can't kick yourself");return;}
this._sendMessageToServer({action:'kick',against:userID});Debug.log("Kicked "+username+" from the chatroom.");},_unignoreUser:function(forumUserID,userID,username){if(userID==ips.getSetting('userID')){Debug.error("Can't unignore yourself");return;}
var url='?app=chat&module=chat&controller=action&do=blockUser';var tmpID=forumUserID;if(forumUserID){ips.getAjax()(url,{data:{id:forumUserID,block:0},type:'post'});}else{var ignoredGuests=ips.utils.db.get('chat','ignoredGuests')||[];if(_.indexOf(ignoredGuests,userID)!==-1){ignoredGuests=_.without(ignoredGuests,userID);}
ips.utils.db.set('chat','ignoredGuests',ignoredGuests);tmpID='g_'+userID;}
if(!_.isUndefined(ips.getSetting('ignoredChats')[tmpID])){delete ips.getSetting('ignoredChats')[tmpID];}
this._syncMenuOptions(userID,forumUserID);this._lastAction=this._getCurrentTime();},_ignoreUser:function(forumUserID,userID,username){if(userID==ips.getSetting('userID')){Debug.error("Can't ignore yourself");return;}
var user=ips.getSetting('forumIDMap')[userID];if(_.isUndefined(user)||!user.canBeIgnored){ips.ui.alert.show({type:'alert',icon:'info',message:ips.getString('cantIgnoreUser',{user:username}),callbacks:{}});return;}
var url='?app=chat&module=chat&controller=action&do=blockUser';var tmpID=forumUserID;if(forumUserID){ips.getAjax()(url,{data:{id:forumUserID,block:1},type:'post'});}else{var ignoredGuests=ips.utils.db.get('chat','ignoredGuests')||[];ignoredGuests.push(userID);ips.utils.db.set('chat','ignoredGuests',ignoredGuests);tmpID='g_'+userID;}
ips.getSetting('ignoredChats')[tmpID]=tmpID;this._syncMenuOptions(userID,forumUserID);this._lastAction=this._getCurrentTime();},_syncMenuOptions:function(userID,forumUserID){var menu=this.scope.find('.cChatUserMenu[data-userID="'+userID+'"]');if(!ips.getSetting('moderator')){menu.find('[data-ipsMenuValue="kick"], [data-ipsMenuValue="ban"], [data-role="modSep"]').remove();}
if(!ips.getSetting('private')){menu.find('[data-ipsMenuValue="private"], [data-role="privateSep"]').remove()}
var ignoring=!_.isUndefined(ips.getSetting('ignoredChats')[forumUserID?forumUserID:'g_'+userID]);var isSelf=userID==ips.getSetting('userID');menu.find('[data-ipsMenuValue="unignore"]').toggle(ignoring&&!isSelf).end().find('[data-ipsMenuValue="ignore"]').toggle(!ignoring&&!isSelf);},_switchToTab:function(tabID){this.scope.find('#'+tabID).click().end().find('[name="message"]').focus();},_createTab:function(userID,forumUserID,tabTitle){var tabTemplate=ips.templates.render('chat.tabs.tab',{roomID:'private_'+userID,roomTitle:tabTitle,tooltip:ips.getString('privateChatWith',{user:tabTitle}),close:true});var panelTemplate=ips.templates.render('chat.tabs.panel',{roomID:'private_'+userID,roomTitle:tabTitle,emoticons:ips.templates.render('core.editor.emoticons',{id:'elEmoticons_private_'+userID,editor:'private_'+userID})});this.scope.find('#elChatTabBar').append(tabTemplate);this.scope.find('#elChatTabsContent').append(panelTemplate);var userInfoArea=this.scope.find('[data-tab="private_'+userID+'"]').find('.cChatUserInfo');var url='?app=chat&module=chat&controller=action&do=loadUserInfo';ips.getAjax()(url,{data:{id:forumUserID}}).done(function(response){userInfoArea.removeClass('ipsLoading').html(response);});},_sendChat:function(e){if(e){e.preventDefault();}
var message=this._cleanMessage($.trim($(e.currentTarget).val()));var tab=$(e.currentTarget).closest('[data-tab]').attr('data-tab');var tabID=$(e.currentTarget).closest('[data-tab]').attr('data-tab').replace('private_','');if(!message||!tabID){Debug.log("No message or no tab");return;}
var extra='';var data={lmsg:this._lastMsgId,message:message};if(tab=='chatroom'){data.action='post';extra='0';}else{data.action='private';data.toUser=tabID;extra='private='+tabID;}
if(this._sendMessageToServer(data)){this._scrollToBottom(tab);var post=this._escapeHTML(message);this._bypassFlag=true;this._updateMessages("1,0~~||~~"+Math.round(new Date().getTime()/ 1000)+",1,"+ips.getSetting('username').replace(',','~~#~~')+","+post+","+extra+","+ips.getSetting('userID')+"~~||~~");this._bypassFlag=false;}
$(e.currentTarget).val('');this._scrollToBottom(tab);this._lastAction=this._getCurrentTime();},_getMessages:function(){var curtime=this._getCurrentTime();this._checkInactivity(curtime);if(this._kicked){clearInterval(this._poller);clearInterval(this._updater);}
if((curtime-this._lastPolled)<this._polling){return false;}
this._lastPolled=curtime;this._sendMessageToServer({msg:this._lastMsgId});},_checkInactivity:function(timestamp){if(!ips.getSetting('inactiveKick')){return;}
if(timestamp-this._lastAction>ips.getSetting('inactiveKick')){var whateverItWas=this._bypassFlag;this._bypassFlag=true;this._updateMessages("0,"+this._lastMsgId+"~~||~~"+this._getCurrentTime()+",5,"+ips.getSetting('username').replace(',','~~#~~')+",,1_"+ips.getSetting('userID')+","+ips.getSetting('userID')+"~~||~~");this._bypassFlag=whateverItWas;this._kicked=true;}
return;},_sendMessageToServer:function(data){var url='http'+(this._secure?'s':'')+'://'+ips.getSetting('serverHost');var self=this;if(this._kicked){return false;}
data=_.defaults(data,{server:ips.getSetting('serverHost'),path:ips.getSetting('serverPath'),room:ips.getSetting('roomID'),user:ips.getSetting('userID'),access_key:ips.getSetting('accessKey'),charset:this._charset});Debug.log("Sending: "+JSON.stringify(data));this._iframeWindow.postMessage(JSON.stringify(data),url);return true;},_playSound:function(soundName){if(_.isUndefined(ips.getSetting('sounds')[soundName])||!ips.getSetting('soundEnabled')){return;}
var sound=new buzz.sound(ips.getSetting('baseURL')+'applications/chat/interface/sounds/'+ips.getSetting('sounds')[soundName],{webAudioApi:true,formats:["mp3"]});sound.play();},_updateMessages:function(response){if(!response){return;}
this.scope.find('.cChatContainer').removeClass('ipsLoading');if(response.substr(0,2)!='0,'&&response.substr(0,2)!='1,'){return true;}
var messages=response.split("~~||~~");var state={showOwn:false,initialEmpty:false,previousLastMsgID:this._lastMsgId,updatedCount:0,alsoTo:null};for(var i=0;i<messages.length;i++){messages[i]=this._parseMessage(messages[i]);var msgDetails=messages[i].split(',');if(i===0){if(msgDetails[0]!=1){var containers=this._getAllStorageContainers();containers.append(ips.templates.render('chat.system',{text:ips.getString('kickedFromServer'),date:this._getChatTime(this._getCurrentTime())}));this._kicked=true;this._scrollToBottom(this._activeTab);return true;}else{if(!this._bypassFlag&&msgDetails[1]==this._lastMsgId){if(this._lastMsgId==0){this._bypassFlag=true;this._lastMsgId=1;state.initialEmpty=true;msgDetails[1]=2;msgDetails[2]=ips.getSetting('username');msgDetails[3]='';msgDetails[4]='1_'+ips.getSetting('userID');msgDetails[5]=ips.getSetting('userID');}else{return true;}}
if(!this._bypassFlag){if(this._lastMsgId==0){state.showOwn=true;}
this._lastMsgId=msgDetails[1];}
if(!state.initialEmpty){continue;}}}
if(!state.previousLastMsgID&&ips.getSetting('noBuffer')){continue;}
if(msgDetails[1]){if(!this._bypassFlag&&msgDetails[5]==ips.getSetting('userID')&&(msgDetails[1]==1||msgDetails[1]==3)&&!state.showOwn){continue;}
var thisRoomID='chatroom';if(msgDetails[1]==1){if(msgDetails[4]){var userDetails=msgDetails[4].split('=');if(userDetails[1]){var user=msgDetails[5]==ips.getSetting('userID')?userDetails[1]:msgDetails[5];var forumUser=ips.getSetting('forumIDMap')[user];if(_.isUndefined(forumUser)){continue;}
if(!this.scope.find('[data-tab="private_'+user+'"]').length){var blocked=0;if(forumUser.forumUserID){blocked=ips.getSetting('ignoredChats')[forumUser.forumUserID];}else{blocked=ips.getSetting('ignoredChats')['g_'+user];}
if(blocked){Debug.log('blocked');continue;}
this._createTab(user,forumUser.forumUserID,forumUser.username);}
thisRoomID='private_'+user;}
msgDetails[4]=msgDetails[4].replace('~~#~~',",");}}
var ulList=this._getStorageContainer(thisRoomID);var scrollBottom=this._scrollIsAtBottom(thisRoomID);var itemDate=this._getChatTime(msgDetails[0]);msgDetails[2]=msgDetails[2].replace('~~#~~',",");msgDetails[2]=this._unCleanMessage(msgDetails[2]);msgDetails[3]=msgDetails[3].replace('~~#~~',",");msgDetails[3]=this._unCleanMessage(msgDetails[3]);msgDetails[3]=this._parseEmoticonsAndBbcode(msgDetails[3],msgDetails[5]);if(msgDetails[1]==1){if(!_.isUndefined(msgDetails[3])&&msgDetails[3].match(/^\/me /gi)){msgDetails[1]=3;msgDetails[3]=msgDetails[3].replace(/^\/me /gi,'');}}
var handlers=["normal","userStatus","me","system","modAction"];if(!_.isUndefined(handlers[(msgDetails[1]-1)])){var handlerReturn=this._handlers[handlers[(msgDetails[1]-1)]].call(this,msgDetails,thisRoomID,itemDate,state);}
if(handlerReturn===false){continue;}
if(handlers[(msgDetails[1]-1)]=='system'){ulList=this._getAllStorageContainers();}else if(handlers[(msgDetails[1]-1)]=='userStatus'){ulList=this._getAllStorageContainers(msgDetails[4].split('_')[1]);}
ulList.append(handlerReturn);if(ips.getSetting('maxMessages')>0){var rowCount=ulList.find('> li');if(rowCount.length>ips.getSetting('maxMessages')){rowCount.slice(0,rowCount.length-ips.getSetting('maxMessages')).remove();}}
if(!this._bypassFlag){this._lastTime=itemDate;}
if(scrollBottom||!this._doneInitialLoad){this._scrollToBottom(thisRoomID);}}}
if(!this._windowHasFocus&&this._unreadCount>0){if(document.title.match(/\(\d+\) (.+?)/gi)){document.title=document.title.replace(/\(\d+\) (.+?)/gi,"("+this._unreadCount+") $1");}else{document.title="("+this._unreadCount+") "+document.title;}}
this._updateTabUnreadCount();if(state.updatedCount){this._playSound('message');}
if(state.initialEmpty){this._bypassFlag=false;}
this._doneInitialLoad=true;},_getChatTime:function(timestamp){var itemDate=new Date();var secs=parseInt(timestamp)?parseInt(timestamp):parseInt(new Date().getTime());itemDate.setTime(secs*1000);var hours=itemDate.getHours();var mins=itemDate.getMinutes()+"";if(mins.length==1){mins="0"+mins;}
if(ips.getSetting('user24hour')){itemDate=hours+':'+mins;}else{if(hours>12){itemDate=(hours-12)+':'+mins+' '+ips.getString('time_pm');}else if(hours==0){itemDate=12+':'+mins+' '+ips.getString('time_am');}else if(hours==12){itemDate=hours+':'+mins+' '+ips.getString('time_pm');}else{itemDate=hours+':'+mins+' '+ips.getString('time_am');}}
return itemDate;},_getStorageContainer:function(containerID){return this.scope.find('[data-tab="'+containerID+'"] .cChatContainer');},_getAllStorageContainers:function(filter){if(!filter){return this.scope.find('[data-tab] .cChatContainer');}else{return this.scope.find('[data-tab="chatroom"] .cChatContainer, [data-tab="private_'+filter+'"] .cChatContainer');}},_updateTabUnreadCount:function(){},_formatName:function(userID,username){var details=ips.getSetting('forumIDMap')[userID];if(!_.isUndefined(details)){return details.prefix.replace(/__DBQ__/g,'"')+username+details.suffix.replace(/__DBQ__/g,'"');}
return username;},_buildInitialList:function(){this.scope.find('#elUserList').html(this.scope.find('#elInitialUserList').html());this.scope.find('#elInitialUserList').remove();var self=this;this.scope.find('#elUserList li').each(function(){self._syncMenuOptions($(this).find('[data-userID]').attr('data-userID'),$(this).find('[data-forumUserID]').attr('data-forumUserID'));});this._syncTotalChatters();},_addUserToList:function(userID,username,forumUserID){var userlist=this.scope.find('#elUserList');var url=ips.getSetting('baseURL')+'index.php?app=chat&module=chat&controller=action&do=addUser';var self=this;if(userlist.find('[data-userID="'+userID+'"]').length){return;}
ips.getAjax()(url,{dataType:'json',data:{id:forumUserID,user:userID}}).done(function(response){ips.getSetting('forumIDMap')[userID]=response.user;var done=false;userlist.find('[data-userID]').each(function(){var name=$(this).attr('data-userID');if(ips.getSetting('username')<name){$(this).before(response.html);done=true;}});if(!done){userlist.append(response.html);}
self._syncMenuOptions(userID,forumUserID);$(document).trigger('contentChange',[userlist]);self._playSound('enter');self._syncTotalChatters();});},_removeUserFromList:function(userID,username,forumUserID){var userlist=this.scope.find('#elUserList');var row=userlist.find('#elChatUserRow_'+userID);var self=this;if(!row.length){return;}
userlist.find('[data-userID="'+userID+'"]').slideUp(function(){row.remove();self._syncTotalChatters();});self._playSound('leave');},_syncTotalChatters:function(){var userlist=this.scope.find('#elUserList');var total=userlist.find('> li').length;this.scope.find('[data-role="onlineChatters"]').html(ips.pluralize(ips.getString('usersChatting'),total));$('.ipsNavBar_primary [data-navapp="chat"] .ipsNotificationCount').text(total);},_cleanMessage:function(message){return message.replace(/\r/g,'').replace(/\n/g,"__N__").replace(/,/g,"__C__").replace(/=/g,"__E__").replace(/\+/g,"__PS__").replace(/&/g,"__A__").replace(/%/g,"__P__").replace(/~~\|\|~~/,"~~###~~");},_unCleanMessage:function(message){return message.replace(/__PS__/g,"+").replace(/__E__/g,"=").replace(/__P__/g,"%").replace(/__A__/g,"&").replace(/__C__/g,",").replace(/__N__/g,"<br />").replace(/~~###~~/,"~~||~~");},_parseEmoticonsAndBbcode:function(message,chatUserID){var self=this;message=message.replace('!','&#33;');_.each(ips.getSetting('chatEmoticons'),function(url,emoticon){var img=$('<img/>').attr({'src':url['image'],'data-emoticon':'true'});if(url['width']){img.attr('width',url['width']);}
if(url['height']){img.attr('height',url['height']);}
if(url['image_2x']){img.attr('srcset',url['image_2x']);}
img="$1"+$('<div/>').append(img).html()+"$2";var regexp=new RegExp("(^|\\s)"+self._escapeRegex(emoticon.replace(/</g,"&lt;").replace(/>/g,"&gt;"))+"(\\s|$)","gi");while(message.match(regexp)){message=message.replace(regexp,img);}});var canBypassBadwords=false;if(chatUserID){var forumUser=ips.getSetting('forumIDMap')[chatUserID];if(!_.isUndefined(forumUser)){canBypassBadwords=forumUser.canBypassBadwords;}}
if(!canBypassBadwords){var replaceMap={};var iteration=0;_.each(ips.getSetting('badwords'),function(info,badword){var regex=null;var matches=null;if(_.isUndefined(info.swop)){info.swop='#####';}
if(info.m_exact){regex=new RegExp('(^|\\b|\\s)'+self._escapeRegex(badword)+'(\\b|!|\\?|\\.|,|$)',"gi");}else{regex=new RegExp(self._escapeRegex(badword),"gi");}
while(matches=regex.exec(message)){if(matches!==null){if(info.m_exact){replaceMap["__BW"+iteration+"__"]=matches[1]+info.swop+matches[2];}else{replaceMap["__BW"+iteration+"__"]=info.swop;}
message=message.replace(matches[0],"__BW"+iteration+"__");iteration++;}}});_.each(replaceMap,function(value,key){message=message.replace(key,value);});}
message=message.replace(/\[b\](.+?)\[\/b\]/gi,"<strong class='ipsStyle'>$1</strong>");message=message.replace(/\[i\](.+?)\[\/i\]/gi,"<em class='ipsStyle'>$1</em>");message=message.replace(/\[u\](.+?)\[\/u\]/gi,"<u class='ipsStyle'>$1</u>");return message;},_parseMessage:function(message){message=message.replace(/&amp;/gi,'&');message=message.replace(/%20/gi,' ');message=message.replace(/%23/gi,'#');message=message.replace(/%22/gi,'&quot;');message=message.replace(/%3C/gi,'&lt;');message=message.replace(/%3E/gi,'&gt;');message=message.replace(/\</gi,'&lt;');message=message.replace(/\>/gi,'&gt;');message=message.replace(/\%([a-zA-Z0-9]{2})/gi,function(hex){return String.fromCharCode(parseInt(hex.replace('%',''),16));});return message;},_getCurrentTime:function(){return parseInt(new Date().getTime().toString().substring(0,10));},_scrollIsAtBottom:function(rowID){var container=this._getStorageContainer(rowID);if(container.scrollTop()+container.innerHeight()>=container.get(0).scrollHeight){Debug.log("At bottom of "+rowID);return true;}
return false;},_updateUnread:function(rowID,lastUserID,state){state.updatedCount++;this._unreadCount++;if(rowID!=this._activeTab){if(this._unreadTabs[rowID]){this._unreadTabs[rowID]=parseInt(this._unreadTabs[rowID])+1;}else{this._unreadTabs[rowID]=1;}}
var self=this;_.each(this._unreadTabs,function(value,key){if(key!=self._activeTab){self._updateTabCount(key,value);}});this._lastUser[rowID]=lastUserID;},_updateTabCount:function(roomID,count){var tab=this.scope.find('[data-roomid="'+roomID+'"] a');if(!tab.length){return;}
var text=tab.html();text=text.replace(/^\(\d+\) /i,'');if(count){text="("+count+") "+text;}
tab.html(text);},_createIFrame:function(){this._iframe=$('<iframe/>');this.scope.find('#elChatIFrame').append(this._iframe);this._iframe.attr('id','elChatProxy').css({position:'absolute',top:'0px',left:'0px',width:'1px',height:'1px'}).hide().attr('src','http'+((this._secure)?'s':'')+'://'+ips.getSetting('serverHost')+ips.getSetting('serverPath')+'web/postMessage40.php?parent='+encodeURIComponent(ips.getSetting('ourURL')));this._iframeWindow=this._iframe.get(0).contentWindow;},_escapeHTML:function(message){var div=document.createElement('div');div.appendChild(document.createTextNode(message));return div.innerHTML;},_escapeRegex:function(text){if(!this._sRE){var specials=['/','.','*','+','?','|','(',')','[',']','{','}','\\','$','^'];this._sRE=new RegExp('(\\'+specials.join('|\\')+')','g');}
return text.replace(this._sRE,'\\$1');},_scrollToBottom:function(tabID){var ulList=this._getStorageContainer(tabID);if(!ulList.length){return;}
ulList.scrollTop(ulList[0].scrollHeight);},_parseForContent:function(text){if($.trim(text).match(this._imgRegex)){return ips.templates.render('chat.parsedImage',{url:text});}else{var lastPos=0;return text.replace(this._urlRegex,function(url){var indexOfURL=text.indexOf(url,lastPos);var returnURL=url;if(text.substring(indexOfURL,indexOfURL-5)!=='src="'&&text.substring(indexOfURL,indexOfURL-8)!=='srcset="'){returnURL='<a href="'+url+'" target="_blank" rel="noopener noreferrer">'+url+'</a>';}
lastPos=indexOfURL+url.length;return returnURL;});}},_handlers:{normal:function(msgDetails,rowID,itemDate,state){var isOwn=false;if(msgDetails[5]==ips.getSetting('userID')){isOwn=true;}else if(!this._doneInitialLoad&&msgDetails[2]===ips.getSetting('username')){isOwn=true;}
if(isOwn){msgDetails[2]=this._formatName(ips.getSetting('userID'),msgDetails[2]);}else{msgDetails[2]=this._formatName(msgDetails[5],msgDetails[2]);}
var template=ips.templates.render((msgDetails[5]==this._lastUser[rowID])?'chat.normalCompound':'chat.normal',{date:itemDate,username:msgDetails[2],photo:ips.getSetting('forumIDMap')[msgDetails[5]]?ips.getSetting('forumIDMap')[msgDetails[5]].photo:'',message:this._parseForContent(msgDetails[3]),own:isOwn});this._updateUnread(rowID,msgDetails[5],state);return template;},userStatus:function(msgDetails,rowID,itemDate,state){var details=msgDetails[4].split('_');if(details[0]==1){var action=ips.getString('enteredRoom',{username:msgDetails[2]});if(state.previousLastMsgID>0){this._addUserToList(details[1],msgDetails[2],details[2]);}
var _details=ips.getSetting('groups')[details[3]];if(_details){msgDetails[2]=_details.prefix.replace(/__DBQ__/g,'"')+msgDetails[2]+_details.suffix.replace(/__DBQ__/g,'"');}
state.alsoTo=details[1];}else if(details[0]==2){var action=ips.getString('leftRoom',{username:msgDetails[2]});if(state.previousLastMsgID>0){this._removeUserFromList(details[1],msgDetails[2]);}
msgDetails[2]=this._formatName(details[1],msgDetails[2]);}
if(!this._bypassFlag&&ips.getSetting('hideEnterExit')){return false;}
var photo=!_.isUndefined(ips.getSetting('forumIDMap')[details[1]])?ips.getSetting('forumIDMap')[details[1]].photo:'<!--uid'+details[1]+'-->';this._lastUser[rowID]=0;return ips.templates.render('chat.userStatus',{date:itemDate,username:msgDetails[2],photo:photo,action:action});},me:function(msgDetails,rowID,itemDate,state){var text=msgDetails[2]+' '+msgDetails[3];this._updateUnread(rowID,0,state);return ips.templates.render('chat.me',{date:itemDate,username:msgDetails[2],photo:ips.getSetting('forumIDMap')[msgDetails[5]]?ips.getSetting('forumIDMap')[msgDetails[5]].photo:'',message:msgDetails[3],text:text});},system:function(msgDetails,rowID,itemDate,state){return ips.templates.render('chat.system',{date:itemDate,text:msgDetails[3]});},modAction:function(msgDetails,rowID,itemDate,state){this._removeUserFromList(msgDetails[4],msgDetails[3]);msgDetails[2]=this._formatName(msgDetails[5],msgDetails[2]);msgDetails[3]=this._formatName(msgDetails[4],msgDetails[3]);this._lastUser[rowID]=0;}}});}(jQuery,_));;