/*    HTTP Host:  static.ak.fbcdn.net                                          */
/*    Generated:  March 25th 2009 9:41:23 AM PDT                               */
/*      Machine:  10.16.140.109                                                */
/*       Source:  Global Cache                                                 */
/*     Location:  js/vfydd7vdkqowscs8.pkg.js h:chxn9neh                        */
/*       Locale:  en_US                                                        */
/*         Path:  js/vfydd7vdkqowscs8.pkg.js                                   */


function ChatBuddyListTypeaheadIndex(){buddyList.registerAvailabilityHandler(this.build.bind(this));}
ChatBuddyListTypeaheadIndex.prototype={build:function(justCameOnline){this.availableListIDs=buddyList.getSortedList();this.firstLetterIndex={};for(var i=0;i<this.availableListIDs.length;i++){var id=this.availableListIDs[i];var name=typeahead_source.tokenize(chatDisplay.userInfos[id].name);for(var token=0;token<name.length;token++){if(!this.firstLetterIndex[name[token][0]]){this.firstLetterIndex[name[token][0]]={};}
this.firstLetterIndex[name[token][0]][id]=true;}}
Arbiter.inform(ChatBuddyListTypeaheadIndex.INDEX_UPDATED);}};copy_properties(ChatBuddyListTypeaheadIndex,{INDEX_UPDATED:'buddylist_typeahead_index/updated',singleton:null,init:function(){if(!ChatBuddyListTypeaheadIndex.singleton){var index=new ChatBuddyListTypeaheadIndex();ChatBuddyListTypeaheadIndex.singleton=index;index.build();}},getSingleton:function(){return ChatBuddyListTypeaheadIndex.singleton;}});function ChatBuddyListTypeahead(obj,inputDiv,flid,excludedIds){this.curStr='';this.clearDiv=null;this.focused=false;this.selected=null;this.selectedIndex=0;this.selectableCount=0;this.minBuddyCount=10;this.flid=flid;this.excludedIds=excludedIds;this.id=ChatBuddyListTypeahead.numTypeaheads++;this.obj=obj;this.obj.typeahead=this;this.placeholderText=obj.value;this.inputDiv=inputDiv;this.shouldShowClear=!presence.isSafari2;if(!this.shouldShowClear){obj.onmousedown=this._onmousedown.bind(this);}
addEventBase(this.obj,'focus',this._onfocus.bind(this));addEventBase(this.obj,'blur',this._onblur.bind(this));addEventBase(this.obj,'keyup',function(e){e=$E(e);var keycode=e?e.keyCode:-1;this._onkeyup.bind(this,keycode).defer();}.bind(this));this.captureSubmit();Arbiter.subscribe([ChatBuddyListTypeaheadIndex.INDEX_UPDATED],this._onIndexUpdated.bind(this));ChatBuddyListTypeaheadIndex.init();}
ChatBuddyListTypeahead.numTypeaheads=0;ChatBuddyListTypeahead.prototype={_onfocus:function(e){this.focused=true;this.captureSubmit();},_onblur:function(e){this.focused=false;if(this.curStr==''){this.hideClear();}},_getIndex:function(){return ChatBuddyListTypeaheadIndex.getSingleton();},_getAvailableListIDs:function(){if(!this.availableIDs){this._refreshAvailableList();}
return this.availableIDs;},_refreshAvailableList:function(){var ids=this._getIndex().availableListIDs;if(this.excludedIds){ids=ids.filter((function(id){return this.excludedIds[id]!=1;}).bind(this));}
this.availableIDs=ids;},_onIndexUpdated:function(){this._refreshAvailableList();if(buddyList.availableCount<this.minBuddyCount){hide(this.inputDiv);this.resetSearch(true);}else{show(this.inputDiv);this.search.bind(this,true).defer();}},_onmousedown:function(){setTimeout(function(){this._onkeyup(0);}.bind(this),100);},_onkeyup:function(keycode){switch(keycode){case KEYS.ESC:if(''==this.curStr){buddyList.closeTab();}else{this.resetSearch(true);}
break;case undefined:case KEYS.LEFT:case KEYS.RIGHT:return false;break;case KEYS.UP:this.upArrowPress();break;case KEYS.DOWN:this.downArrowPress();break;case KEYS.RETURN:this.select();break;case KEYS.BACKSPACE:case 0:default:if(this.search()){this.resetSearch(true);}
break;}},focusInput:function(){if(buddyList.availableCount&&buddyList.availableCount>this.minBuddyCount){this.obj.focus();}
this.resetSearch();},captureSubmit:function(){if((!this.capturedForm||this.capturedSubstitute!=this.capturedForm.onsubmit)&&this.obj.form){this.capturedForm=this.obj.form;this.captured_event=this.obj.form.onsubmit;this.capturedSubstitute=this.obj.form.onsubmit=function(){return false;}.bind(this.obj.form);}},resetSearch:function(clear){if(!this.obj){return false;}
if(!this.obj.value||clear){this.curStr='';this.obj.value='';this.hideClear();}
this.selected=null;this.selectedIndex=-1;this.showAll();this.hideClear();buddyList.unfreezeTabSize();},search:function(force){var value=this.obj.value;if(value==this.placeholderText){return true;}
var str=typeahead_source.flatten_string(value);if(!force&&str==this.curStr){return false;}
this.curStr=str;var tokenizedStr=typeahead_source.tokenize(str).sort(typeahead_source._sort);if(!tokenizedStr[0]){return true;}
var quickIndex=this._getIndex().firstLetterIndex[tokenizedStr[0][0]];buddyList.freezeTabSize();this.showClear();buddyList.suppressNonFriendInfoInBuddyList(this.flid);this.getMatchingFriends(quickIndex,tokenizedStr);this.selected=null;this.selectMatchingFriends();return false;},getMatchingFriends:function(quickIndex,tokenizedStr){var matches=0;var showingSomething=false;var availableListIDs=this._getAvailableListIDs();for(var i=0;i<availableListIDs.length;i++){var id=availableListIDs[i];var fullName=chatDisplay.userInfos[id].name;if(quickIndex!=undefined&&quickIndex[id]&&typeahead_source.check_match(tokenizedStr,fullName)){var name=typeahead_source.highlight_found(fullName,this.curStr);buddyList.getBuddyItemName(id,this.flid).setContent(HTML(name));buddyList.showBuddyItem(id,null,this.flid);showingSomething=true;matches++;}else{CSS.removeClass(buddyList.getBuddyItem(id,this.flid),'selected');buddyList.hideBuddy(id,this.flid);}}
if(showingSomething){buddyList.hideEmptySearch(this.flid);if(matches==1){this.selected=id;this.selectedIndex=0;CSS.addClass(buddyList.getBuddyItem(id,this.flid),'selected');}}else{buddyList.showEmptySearch(this.flid);}},selectMatchingFriends:function(){this.selectableCount=0;var availableListIDs=this._getAvailableListIDs();for(var i=0;i<availableListIDs.length;i++){var id=availableListIDs[i];var buddy=buddyList.getBuddyItem(id,this.flid);if(buddy&&CSS.getStyle(buddy,'display')!='none'){if(this.selectedIndex==this.selectableCount){this.selected=id;CSS.addClass(buddy,'selected');}else{CSS.removeClass(buddy,'selected');}
this.selectableCount++;}}},downArrowPress:function(){this.selectedIndex++;var max=this.selectableCount-1;if(this.selectedIndex>=max){this.selectedIndex=max;}
this.selectMatchingFriends();},upArrowPress:function(){this.selectedIndex--;if(this.selectedIndex<0){this.resetSearch();}
this.selectMatchingFriends();},showAll:function(){this.obj.value='';buddyList.hideEmptySearch(this.flid);var availableListIDs=this._getAvailableListIDs();for(var i=0;i<availableListIDs.length;i++){var id=availableListIDs[i];var buddy=buddyList.getBuddyItem(id,this.flid);if(buddy){buddyList.updateBuddyItemName(id,this.flid);CSS.removeClass(buddyList.getBuddyItem(id,this.flid),'selected');buddyList.showBuddyItem(id,true,this.flid);}}
buddyList.unsuppressNonFriendInfoInBuddyList(this.flid);},showClear:function(){if(this.clearDiv==null&&this.shouldShowClear){this.clearDiv=document.createElement('div');this.clearDiv.setAttribute('id','clear_search'+this.id);DOM.setContent(this.clearDiv,HTML('<a href="#" class="hide"></a>'));var link=DOM.find(this.clearDiv,'a');link.listen('click',(function(){this.resetSearch(true);return false;}).bind(this));this.inputDiv.appendChild(this.clearDiv);}},hideClear:function(){if(ge('clear_search'+this.id)){this.clearDiv=null;this.inputDiv.removeChild(ge('clear_search'+this.id));}},select:function(){if(this.selected!=null){CSS.removeClass(buddyList.getBuddyItemName(this.selected,this.flid),'selected');buddyList.itemOnClick(this.selected,this.flid);this.resetSearch(true);}}};

function ChatBuddyList(openingABVersion){this.user=presence.user;this.openingABVersion=openingABVersion;this.shouldRender=true;this.haveFullList=false;this.errorMode=false;this.shouldShowLoading=false;this.availableCount=0;this.availableList={};this.sortedList=[];this.listChanged=false;this.updateTime=0;this.flLive=false;this.flMode=false;this.flData={};this.otherFriendsFlid='-1';this.botsFlid='-2';this.flSortableGroup=null;this.reorderingLists=false;this.sortables=null;this.flOpts={};this.externalFlids=[];this.updateOverlay={};this.visibilityRatio={};this.justCameOnline=false;this.maxNameLen=20;this.maxStatusLen=presence.inPopoutWindow?22:28;this.backgroundColor=presence.inPopoutWindow?'#f7f7f7':'#fff';}
copy_properties(ChatBuddyList,{OVERLAY_ONLINE:0,OVERLAY_IDLE:1,OVERLAY_OFFLINE:-1,DEFAULT_OPTS:{fullDisplay:true,showStatuses:true,sortByIdleStatus:false,excludeIds:{}},BUDDY_LIST_INITIALIZED:'buddylist/initialized',BUDDY_CLICKED:'buddylist/buddy_clicked'});ChatBuddyList.prototype={maxItemsToAnimate:10,highlightColor:'#fffbe2',expandAnimDuration:400,compactItemHeight:18,fullItemHeight:31,initError:function(){this.errorMode=true;this._init();},initNoRender:function(availableCount,availableList,updateTime,listChanged,flLive,flMode,flData,updateOverlay){this.shouldRender=false;this.shouldShowLoading=true;this.availableCount=availableCount;this.availableList=availableList;this.updateTime=updateTime;this.listChanged=listChanged;this.updateOverlay=updateOverlay;this.flLive=flLive;this.flMode=flMode;this.flData=flData;this._init();if(presence.inPopoutWindow){this._forceUpdate.bind(this).defer();}},initFullList:function(availableList,updateTime,listChanged,flLive,flMode,flData,updateOverlay){this.availableList=availableList;this.updateTime=updateTime;this.listChanged=listChanged;this.haveFullList=true;this.flLive=flLive;this.flMode=flMode;this.flData=flData;this.updateOverlay=updateOverlay;this.availableCount=count(this.availableList);this._init();},_init:function(){this.availabilityHandlers=[];this.loaded=false;this.poppedOut=presence.poppedOut;this.buddyListOpen=false;this.clickedClosed=false;this.clickedOpen=false;this.updateDiff=0;this.rendered=false;this.showingError=false;this.numRequestFailures=0;for(var id in this.availableList){this.availableList[id].i=this.availableList[id].i?1:0;}
this.tabID='buddy_list_tab';this.wrapperID='buddy_list';this.contentID='buddy_list_content';this.tabDiv=ge(this.tabID);this.wrapperDiv=ge(this.wrapperID);this.contentDiv=ge(this.contentID);this.buddyListError=ge('buddy_list_error');this.buddyCountSpan=ge('buddy_count');presenceUpdater.register('buddy_list',this._checkUpdater.bind(this),this._onUpdaterResponse.bind(this),this._onUpdaterError.bind(this),this._onUpdaterError.bind(this));presenceCookieManager.register('bl',this._getCookieData.bind(this));presence.registerStateStorer(this._storeState.bind(this));presence.registerStateLoader(this._loadState.bind(this));presence.registerTabOpenHandler(this._tabOpened.bind(this));presence.registerMsgHandler(this._handleMsg.bind(this));statusControl.registerVisibilityHandler(this._handleVisibility.bind(this));this.setCompactDisplay(statusControl.getSetting('compact_buddylist'));this._loadState(presence.state);this._postInit.bind(this).defer();if(this.openingABTestWideOnly()){Event.listen(window,'resize',this.openingABTestComputeWideAutoOpen.bind(this));}},_postInit:function(){if(presence.inPopoutWindow){this._firstRender();}
if(statusControl.visibility){this._updateCount();}
this.updateDiff=this._computeUpdateTimeDiff();this._mergeOverlay();Arbiter.inform(ChatBuddyList.BUDDY_LIST_INITIALIZED,{},Arbiter.BEHAVIOR_PERSISTENT);},openingABTestIsActive:function(){return this.openingABVersion.active;},openingABTestIsSticky:function(){return this.openingABVersion.value>='B';},openingABTestAutoOpen:function(){return this.openingABVersion.value>='B';},openingABTestWideOnly:function(){return this.openingABVersion.value=='B';},openingABTestHeightAdjust:function(){return this.openingABVersion.value=='C';},openingABTestHalfHeight:function(){return this.openingABVersion.value=='D';},openingABTestFlipped:function(){return this.openingABVersion.value=='D';},registerAvailabilityHandler:function(fn){this.availabilityHandlers.push(fn);},_storeState:function(presenceState){presenceState.blo=this.buddyListOpen?1:0;presenceState.bvt=parseInt(this.buddyViewTime*0.001);if(this.openingABTestAutoOpen()){presenceState.bcc=this.clickedClosed;presenceState.bco=this.clickedOpen;}
return presenceState;},_loadState:function(presenceState){this.buddyViewTime=verifyNumber(presenceState.bvt)*1000;var openBuddyList=!!presenceState.blo;if(this.openingABTestAutoOpen()){this.clickedClosed=this.clickedClosed||!!presenceState.bcc;this.clickedOpen=this.clickedOpen||!!presenceState.bco;if(!openBuddyList&&!this.loaded&&!this.clickedClosed){if(this.openingABTestWideOnly()){this.openingABTestComputeWideAutoOpen.bind(this).defer();}else{openBuddyList=true;}}}
if(!presence.poppedOut&&this.poppedOut){this._showLoading();this._forceUpdate();}
this.poppedOut=presence.poppedOut;var fn=null;if(!this.poppedOut){if(openBuddyList){fn=this.openTab.bind(this);}else{fn=this.closeTab.bind(this);}}
if(fn){if(this.loaded){fn();}else{fn.defer();}}
this.loaded=true;},setCompactDisplay:function(isCompact){this.isCompactDisplay=isCompact;if(this.isCompactDisplay){this.itemHeight=this.compactItemHeight;}else{this.itemHeight=this.fullItemHeight;}
if(this.rendered){this._render();}},_handleVisibility:function(){if(statusControl.visibility){this._showLoading();this._show();this._forceUpdate();this.justCameOnline=true;}else{this._hide();}},_handleMsg:function(channel,obj){if(obj.type=='fl_settings'){this.setVisibilityRatio({});if(!this._flChanged(obj.fl_mode,obj.fl_data)){return true;}
if(obj.fl_live!=this.flLive){this._handleFlLiveChanged();}
this._onFlChange(obj.fl_mode,obj.fl_data);return true;}
return false;},_flChanged:function(newFlMode,newFlData){return(newFlMode!=this.flMode||!are_equal(newFlData,this.flData));},_massageNowAvailableList:function(nowAvailableList,newFlMode,newFlData){for(var id in nowAvailableList){var buddyInfo=nowAvailableList[id];if(newFlMode!=this.flMode){if(newFlMode){delete buddyInfo.fl;}else{buddyInfo['fl']=[this.otherFriendsFlid];}}else{var flids=buddyInfo.fl||[];for(var i=0;i<flids.length;i++){var flid=flids[i];if(typeof this.flData[flid]=='undefined'){buddyInfo.fl.remove(flid);}}
if(buddyInfo.fl.length==0){buddyInfo.fl=[this.otherFriendsFlid];}}
nowAvailableList[id]=buddyInfo;}
return nowAvailableList;},_handleFlLiveChanged:function(){URI.getRequestURI().go();},_onFlChange:function(newFlMode,newFlData){if(!this.flLive){return;}
var toAddFlids=[];var toRemoveFlids=[];var onlineFlids=[];var offlineFlids=[];if(this.flMode&&this.flMode==newFlMode){var groupedList=this._groupAvailableListByFl(true);for(var flid in newFlData){if(typeof this.flData[flid]=='undefined'){if(newFlData[flid].h){continue;}
toAddFlids.push(flid);onlineFlids.push(flid);}else{if(this.flData[flid].h!=newFlData[flid].h){if(newFlData[flid].h){toRemoveFlids.push(flid);}else{toAddFlids.push(flid);if(newFlData[flid].o){onlineFlids.push(flid);}}}
else if(this.flData[flid].o!=newFlData[flid].o){if(newFlData[flid].o){onlineFlids.push(flid);}else{offlineFlids.push(flid);}}}}
for(var flid in this.flData){if(typeof newFlData[flid]=='undefined'){toRemoveFlids.push(flid);}}
this.flMode=newFlMode;if(toRemoveFlids.length!=0){this._removeFlidsFromBuddyList(toRemoveFlids,groupedList);this._removeFlidsFromDOM(toRemoveFlids);}
if(offlineFlids.length!=0){this._goOfflineToLists(offlineFlids,true);}
this.flData=newFlData;if(toAddFlids.length!=0){this._addFlidsToDOM(toAddFlids,groupedList);}
if(onlineFlids.length!=0){this._goOnlineToLists(onlineFlids,true);}}else if(this.flMode&&this.flMode!=newFlMode){var groupedList=this._groupAvailableListByFl(true);toRemoveFlids=keys(this.flData);this.flMode=newFlMode;this.flData=newFlData;this._addFlidsToDOM([null]);this._removeFlidsFromBuddyList(toRemoveFlids,groupedList);this._removeFlidsFromDOM(toRemoveFlids);}else{for(var flid in newFlData){if(newFlData[flid].h){continue;}
toAddFlids.push(flid);if(newFlData[flid].o){onlineFlids.push(flid);}}
this.flMode=newFlMode;this.flData=newFlData;this._removeFlidsFromDOM([null]);if(toAddFlids.length>0){this._addFlidsToDOM(toAddFlids);}
if(onlineFlids.length>0){this._goOnlineToLists.bind(this,onlineFlids,true).defer();}}},_addFlidsToDOM:function(flids,groupedList){groupedList=groupedList||this._groupAvailableListByFl(true);var allFlids=this._getRenderedFriendLists();var firstFlid=allFlids[0];var parentOfThemAll=$('buddy_list_parent');for(var i=0;i<flids.length;i++){var flid=flids[i];if(this.flMode&&flid){var sacred=typeof this.flData[flid].s!='undefined';var elem=DOM.create('li',{'id':this._getFriendListId(flid),'className':this._getFriendListItemClasses(flid,groupedList)});if(!sacred&&flid!=this.otherFriendsFlid){elem.listen('mouseover',this._friendListHandleMouseOver.bind(this,flid));elem.listen('mouseout',this._friendListHandleMouseOut.bind(this,flid));}
DOM.setContent(elem,HTML(this._renderFriendListHeader(flid)));DOM.appendContent(elem,HTML(this._renderFriendListContent(flid,[])));if(firstFlid==flid){parentOfThemAll.prependContent(elem);}else{var prevIndex=allFlids.indexOf(flid);var prevFlid=allFlids[prevIndex-1];DOM.insertAfter(ge(this._getFriendListId(prevFlid)),elem);}
this._addFlSortable(flid);this._initFlidSortable(flid,[]);}else{parentOfThemAll.prependContent(HTML(this._renderFriendListContent(null,[],true)));}}},_removeFlidsFromDOM:function(flids){for(var i=0;i<flids.length;i++){var flid=flids[i];if(flid){if(ge(this._getFriendListId(flid))){DOM.remove($(this._getFriendListId(flid)));this._removeFlSortable(flid);this._destroyFlidSortable(flid);}}else{DOM.remove($(this._getAvailableMarkerId(flid)));DOM.remove($(this._getIdleMarkerId(flid)));DOM.remove($(this._getBuddyListEmptyItemId(flid)));}}},loadTypeahead:function(){if(!this.flLive){this.typeahead=new ChatBuddyListTypeahead($("buddy_list_typeahead_input"),$("buddy_list_typeahead"));}},isWideViewport:function(){return Vector2.getViewportDimensions().x>=1457;},openingABTestComputeWideAutoOpen:function(){if(!this.buddyListOpen&&!this.clickedClosed){if(this.isWideViewport()){Util.log('auto-opening from width increase');this.openTab();}}else if(this.buddyListOpen&&!this.clickedOpen){if(!this.isWideViewport()){Util.log('auto-closing from width decrease');this.closeTab();}}},resizeTab:function(force){if(this.resizeFrozen){if(force){this.resizeFrozen=false;}else{return;}}
presence.tabContentResize(this.wrapperID,this.contentID);},freezeTabSize:function(){if(this.resizeFrozen||this.showingError){return;}
this.resizeFrozen=true;presence.tabContentResize(this.wrapperID,this.contentID,true);},unfreezeTabSize:function(){if(!this.resizeFrozen){return;}
this.resizeFrozen=false;this.resizeTab();presence.contentChanged(this.contentID);},_hide:function(){if(presence.inPopoutWindow){CSS.addClass(presence.popoutSidebar,'buddy_list_hidden');}else{CSS.addClass(presence.holder,'buddy_list_hidden');if(this.flLive){this.closeTab();DOM.setContent(this.buddyCountSpan,_tx("Chat (Offline)"));}}},_show:function(){if(presence.inPopoutWindow){CSS.removeClass(presence.popoutSidebar,'buddy_list_hidden');}else{CSS.removeClass(presence.holder,'buddy_list_hidden');if(this.flLive){this.openTab();this._updateCount();}}},toggleTab:function(){if(CSS.hasClass(presence.holder,'buddy_list_hidden')&&!this.flLive){return;}
if(!this.buddyListOpen){this.clickedOpen=true;this.openTab(true);}else{this.clickedClosed=true;this.closeTab();}},openTab:function(focusTypeahead){if(this.buddyListOpen){return;}
if(CSS.hasClass(presence.holder,'buddy_list_hidden')){if(this.flLive){statusControl.sendVisibility(true);}else{this.buddyListOpen=false;}
return;}
if(!this.rendered){var availableList=this.availableList;this.availableList={};this.shouldShowLoading=true;this._firstRender();presence.openTab(this.wrapperID,this.tabID);this.availableList=availableList;if(this.haveFullList){this._render.bind(this).defer();setTimeout(this._availableListChanged.bind(this,true),10);}}else{presence.openTab(this.wrapperID,this.tabID,this.contentID);}
this.buddyListOpen=true;setTimeout(this._openTabPostProcess.bind(this,focusTypeahead),50);},_openTabPostProcess:function(focusTypeahead){this.buddyViewTime=(new Date()).getTime();var sinceLastUpdate=(presence.getTime()-this.updateTime)*0.001;if(this.showingError||sinceLastUpdate>presence.sitevars.BUDDY_VIEW_FETCH_WINDOW){this._forceUpdate();}
presence.doSync();if(focusTypeahead&&!this.flLive){this.typeahead.focusInput();}},closeTab:function(){if(!this.buddyListOpen){return;}
this.buddyListOpen=false;presence.toggleTab(this.wrapperID,this.tabID,this.contentID);if(statusControl.visibility){setTimeout(this._closeTabPostProcess.bind(this),50);}
if(this.flLive){buddyListDisplay.closeOpenFlyout();this.exitReorderingFlMode();}},_closeTabPostProcess:function(){if(!this.flLive){this.typeahead.resetSearch(true);}
this.buddyViewTime=(new Date()).getTime();presence.doSync();},_tabOpened:function(){if(!this.buddyListOpen){return;}
this.buddyListOpen=false;this.buddyViewTime=(new Date()).getTime();presence.doSync();},_mergeOverlay:function(){if(!this.haveFullList){return;}
var time=presence.getTime();var nowAvail={};var wasAvail=[];for(var id in this.updateOverlay){if(time<this.updateOverlay[id].exp){var buddyInfo=this.availableList[id];if(!chatDisplay.userInfos[id]){continue;}
if(this.updateOverlay[id].ol!=ChatBuddyList.OVERLAY_OFFLINE){if(!buddyInfo){buddyInfo={i:0};if(this.flMode){buddyInfo.fl=[this.otherFriendsFlid];}
nowAvail[id]=buddyInfo;}else{}}else{wasAvail.push(id);}}else{delete this.updateOverlay[id];}}
if(!is_empty(nowAvail)||!is_empty(wasAvail)){this._updateAvailableListWithDiff(nowAvail,wasAvail);}},getAvailability:function(id){if(id==this.user){return statusControl.visibility;}
if(typeof this.availableList[id]!='undefined'){return this.availableList[id];}else{return null;}},setAvailable:function(id,keepIdle){this._manageOverlay(id,ChatBuddyList.OVERLAY_ONLINE);this._addToBuddyList([id],keepIdle);},_addToBuddyList:function(ids,keepIdle){var availDiff={};var wasAvail=[];for(var i=0;i<ids.length;i++){var id=ids[i];var availability=this.getAvailability(id);if(availability&&(availability.i==0||keepIdle)){continue;}
availDiff[id]={i:0};if(this.flMode){if(this.availableList[id]&&this.availableList[id].fl){availDiff[id]['fl']=this.availableList[id].fl;}else{availDiff[id]['fl']=[this.otherFriendsFlid];}}
if(availability&&availability.i==1){wasAvail.push(id);}}
this._updateAvailableListWithDiff(availDiff,wasAvail);},setFlids:function(id,flids){if(!this.getAvailability(id)){return;}
if(this.availableList[id].fl[0]==this.otherFriendsFlid){var nowAvail={};nowAvail[id]=this.availableList[id];nowAvail[id]['fl']=flids;this._updateAvailableListWithDiff(nowAvail,[],this.otherFriendsFlid);}},setUnavailable:function(id){this._manageOverlay(id,ChatBuddyList.OVERLAY_OFFLINE);this._removeFromBuddyList([id]);},_removeFromBuddyList:function(ids,flid){var toRemove=[];for(var i=0;i<ids.length;i++){var id=ids[i];if(!this.getAvailability(id)){continue;}
toRemove.push(id);}
if(toRemove.length>0){this._updateAvailableListWithDiff({},toRemove,flid);}},addOverlayInfo:function(overlay){for(var id in overlay){this._manageOverlay(id,overlay[id].ol);}
this._mergeOverlay();},_manageOverlay:function(id,new_state){var exp=presence.getTime()+60000;this.updateOverlay[id]={'ol':new_state,'exp':exp};if(this.rendered){presenceCookieManager.store();}},hideBuddy:function(id,flid){this._toggleBuddy(id,false,[flid]);},_toggleBuddy:function(id,show,flids){flids=flids||this._getUserFlids(id);var newDisplay=show?'block':'none';for(var i=0;i<flids.length;i++){var flid=flids[i];var listItem=ge(this._getBuddyListItemId(id,flid));if(listItem){listItem.style.display=newDisplay;}}},showBuddyItem:function(id,showAll,flid){showAll=showAll||false;var flids;if(flid){flids=[flid];}else{var flids=this._getUserFlids(id,null,true);if(flids.length>1&&!showAll){var hideFlids=flids.slice(1);this._toggleBuddy(id,false,hideFlids);flids=flids.splice(1);}}
this._toggleBuddy(id,true,flids);},getBuddyItem:function(id,flid){flid=this._getUserFlid(id,flid);return ge(this._getBuddyListItemId(id,flid));},getBuddyItemName:function(id,flid){flid=this._getUserFlid(id,flid);return ge(this._getBuddyListItemNameId(id,flid));},updateBuddyItemName:function(id,flid){var userInfo=chatDisplay.userInfos[id];var name=userInfo.name;var nameCapped;if(name.length>this.maxNameLen){nameCapped=name.substring(0,this.maxNameLen-2)+'...';}else{nameCapped=name;}
this.getBuddyItemName(id,flid).innerHTML=nameCapped;},_getUserFlid:function(id,flid){if(flid===null){var flids=this._getUserFlids(id);flid=flids[0];}
return flid;},showEmptySearch:function(flid){show(this._getEmptySearchId(flid));},hideEmptySearch:function(flid){hide(this._getEmptySearchId(flid));},getSortedList:function(){if(this.sortedList.length==0&&count(this.availableList)==this.availableCount){this.sortedList=this._sort(keys(this.availableList));}
return this.sortedList;},getFriendLists:function(){var res={};copy_properties(res,this.flData);delete res[this.otherFriendsFlid];delete res[this.botsFlid];return res;},_getRenderedFriendLists:function(){var flids=[];for(var flid in this.flData){if(!this.flData[flid].h){flids.push(flid);}}
return flids;},_getFriendListsInChat:function(){var flids=this._getRenderedFriendLists();flids.remove(this.otherFriendsFlid);flids.remove(this.botsFlid);return flids;},suppressNonFriendInfoInBuddyList:function(flid){this._updateNonFriendInfoInBuddyList(flid,true);},unsuppressNonFriendInfoInBuddyList:function(flid){this._updateNonFriendInfoInBuddyList(flid,false);},_updateNonFriendInfoInBuddyList:function(flid,suppress){var flids=flid?[flid]:this._getGlobalFlids(true);for(var i=0;i<flids.length;i++){var flid=flids[i];CSS.conditionClass(this._getIdleMarkerId(flid),'suppress',suppress);}},_updateCount:function(){if(this.buddyCountSpan){this.buddyCountSpan.innerHTML=_tx("Online Friends {number-available}",{'number-available':'<span class="buddy_count_num">(<strong>'+this.availableCount+'</strong>)</span>'});}},setVisibilityRatio:function(cvr){this.visibilityRatio=cvr;presence.doSync();},_getCookieData:function(){var availableListCache={};for(var id in chatDisplay.tabs){if(this.availableList[id]){availableListCache[id]=this.availableList[id];}}
var buddyState={'ac':this.availableCount,'al':availableListCache,'ut':parseInt(this.updateTime*0.001),'ud':parseInt(this.updateDiff),'lc':this.listChanged?1:0,'uo':this.updateOverlay,'cvr':this.visibilityRatio};return buddyState;},_computeUpdateTimeDiff:function(){if(!statusControl.visibility||(presence.poppedOut&&!presence.inPopoutWindow)){return Math.round(presence.sitevars.BUDDY_MAX_TIME);}
var newUpdateTime=presence.sitevars.BUDDY_BASE_TIME;var now=presence.getTime();if(!chatDisplay.everSentMessage){newUpdateTime+=presence.sitevars.BUDDY_COST_NEVER_SENT_MESSAGE;}
if(!this.listChanged){newUpdateTime+=presence.sitevars.BUDDY_COST_NO_LIST_CHANGE;}
if(chatTabSlider.numTabs==0){newUpdateTime+=presence.sitevars.BUDDY_COST_NO_CHAT_TABS;}
var chatActivityMins=(now-chatDisplay.chatActivityTime)/60000;if(chatActivityMins>presence.sitevars.BUDDY_MAX_ACTIVITY_MINS){chatActivityMins=presence.sitevars.BUDDY_MAX_ACTIVITY_MINS;}
newUpdateTime+=(presence.sitevars.BUDDY_COST_CHAT_ACTIVITY/presence.sitevars.BUDDY_MAX_ACTIVITY_MINS)*chatActivityMins;if(!presence.poppedOut){var pageLoadMins=(now-presence.pageLoadTime)/60000;if(pageLoadMins<chatActivityMins){if(pageLoadMins>presence.BUDDY_MAX_ACTIVITY_MINS){pageLoadMins=presence.BUDDY_MAX_ACTIVITY_MINS;}
newUpdateTime+=(presence.sitevars.BUDDY_COST_PAGE_ACTIVITY/presence.sitevars.BUDDY_MAX_ACTIVITY_MINS)*pageLoadMins;}
if(!this.buddyListOpen){var buddyViewMins=(now-this.buddyViewTime)/60000;if(buddyViewMins>presence.sitevars.BUDDY_MAX_ACTIVITY_MINS){buddyViewMins=presence.sitevars.BUDDY_MAX_ACTIVITY_MINS;}
newUpdateTime+=(presence.sitevars.BUDDY_COST_VIEW_ACTIVITY/presence.sitevars.BUDDY_MAX_ACTIVITY_MINS)*buddyViewMins;}}
if(!newUpdateTime||newUpdateTime>presence.sitevars.BUDDY_MAX_TIME){newUpdateTime=presence.sitevars.BUDDY_MAX_TIME;}
return Math.round(newUpdateTime);},_checkUpdater:function(time,asyncData,forceUpdate){this.updateDiff=this._computeUpdateTimeDiff();if(forceUpdate||(time-this.updateTime)>this.updateDiff*1000){asyncData.popped_out=presence.poppedOut;asyncData.available_list=this.haveFullList?this.availableList:{};asyncData.force_render=this.shouldRender;return true;}},_forceUpdate:function(){this.shouldRender=true;presenceUpdater.forceUpdate();},updateUserInfos:function(userInfos){for(var id in userInfos){var userInfo=userInfos[id];if(id==presence.user&&!this.flLive&&(!chatDisplay.userInfos[id]||userInfo.status!=chatDisplay.userInfos[id].status||userInfo.statusTimeRel!=chatDisplay.userInfos[id].statusTimeRel)){StatusEditor.update({'markup':htmlize(userInfo.status)},userInfo.statusTimeRel);}
var statusChanged=(!chatDisplay.userInfos[id]||userInfo.status!=chatDisplay.userInfos[id].status);var shouldUpdate=(statusChanged||userInfo.statusTimeRel!=chatDisplay.userInfos[id].statusTimeRel);chatDisplay.userInfos[id]=userInfos[id];if(shouldUpdate){this.updateItemDisplay(id);if(chatDisplay.tabs[id]){chatDisplay.tabs[id].updateUserInfo();}}}},_collapseItem:function(id,buddyInfo,shouldAnimate,flid){if(this.flMode&&flid){var flids=[flid];}else{var flids=this._getUserFlids(id,buddyInfo);}
for(var i=0;i<flids.length;i++){var flid=flids[i];var elem=ge(this._getBuddyListItemId(id,flid));if(elem){elem.id=this._getBuddyListWasItemId(id,flid);if(shouldAnimate){animation(elem).to('height','0px').duration(this.expandAnimDuration).go();}
this._removeSortable(id,flids[i]);}}},_expandItem:function(id,flid,prevElem,isIdle,shouldAnimate,shouldDelayExpand,showHighlight){var elem=ge(this._getBuddyListItemId(id,flid));if(!elem){var elem=document.createElement('li');elem.id=this._getBuddyListItemId(id,flid);}
if(isIdle){CSS.setClass(elem,'idle');}
elem.innerHTML=this._renderItem(id,flid,isIdle);elem.style.height='0px';DOM.insertAfter(prevElem,elem);var itemHeight;if(this.flLive){itemHeight=(flid==this.otherFriendsFlid)?this.compactItemHeight:this.itemHeight;}else{itemHeight=isIdle?this.compactItemHeight:this.itemHeight;}
var opts=this._getFlOpts(flid);if(!opts.fullDisplay){itemHeight=this.compactItemHeight;}
if(shouldAnimate){var anim=animation(elem);if(shouldDelayExpand){anim.duration(this.expandAnimDuration+500).checkpoint();}
anim.to('height',itemHeight+'px').duration(this.expandAnimDuration);if(showHighlight===undefined){showHighlight=!isIdle;}
if(showHighlight){elem.style.backgroundColor=this.highlightColor;anim.checkpoint().duration(3000).checkpoint().to('backgroundColor',this.backgroundColor).duration(500);}
anim.go();}else{elem.style.height=itemHeight+'px';}
this._addSortable(id,flid);return elem;},_clearWasAvailableItems:function(wasAvailableIDs,wasAvailableList,flid){if(!this.rendered){return;}
for(var i=0;i<wasAvailableIDs.length;i++){var id=wasAvailableIDs[i];if(wasAvailableList[id]){if(this.flMode&&flid){var flids=[flid];}else{var flids=this._getUserFlids(id,wasAvailableList[id]);}
for(var j=0;j<flids.length;j++){var elem=ge(this._getBuddyListWasItemId(id,flids[j]));if(elem){DOM.remove(elem);delete elem;}}}}
this._showBuddyListEmptyItem();},_showBuddyListEmptyItem:function(flid){var emptyItem=ge(this._getBuddyListEmptyItemId(flid));if(emptyItem){CSS.conditionClass(emptyItem,'hide_empty_item',this.availableCount!=0);}},_hideBuddyListEmptyItem:function(flid){var emptyItem=ge(this._getBuddyListEmptyItemId(flid));if(emptyItem){CSS.addClass(emptyItem,'hide_empty_item');}},_updateAvailableListWithDiff:function(nowAvailableList,wasAvailableIDs,flid){var id,isIdle;var shouldDelayExpand=false;var wasAvailableList={};var wasAvailableMultipleLists={};var filterExternalFlids=(flid!=null);for(var i=0;i<wasAvailableIDs.length;i++){var uid=wasAvailableIDs[i];if(this.availableList[uid]){shouldDelayExpand=true;wasAvailableList[wasAvailableIDs[i]]=this.availableList[uid];if(flid&&this.flMode&&this.availableList[uid].fl.length>1){this.availableList[uid].fl.remove(flid);wasAvailableMultipleLists[uid]=1;continue;}
delete this.availableList[uid];}}
this._hideBuddyListEmptyItem();var nowAvailableIDs=keys(nowAvailableList);var shouldAnimate=!this.showingError&&!presence.isSafari2&&(wasAvailableIDs.length+nowAvailableIDs.length<this.maxItemsToAnimate);if(this.rendered){for(var i=0;i<wasAvailableIDs.length;i++){if(wasAvailableList[wasAvailableIDs[i]]){this._collapseItem(wasAvailableIDs[i],wasAvailableList[wasAvailableIDs[i]],shouldAnimate,flid);}}
var clearDelay=shouldAnimate?this.expandAnimDuration:0;setTimeout(this._clearWasAvailableItems.bind(this,wasAvailableIDs,wasAvailableList,flid),clearDelay);}
var availableIDs=this.sortedList;if(this.haveFullList){this.sortedList=[];}
this._sort(nowAvailableIDs,nowAvailableList);var nowAvailableID=nowAvailableIDs.shift();var availableID=availableIDs.shift();var compareFunction=this._compareFunction.bind(this,null,false);var defaultPrevAvailElemIds={},prevElemIds={},prevIdleElemIds={},prevAvailElemIds={},hasIdle={},hasNotIdle={};var globalFlids=[];if(this.shouldRender){globalFlids=this._getGlobalFlids();for(var i=0;i<globalFlids.length;i++){var flid=globalFlids[i];prevElemIds[flid]=defaultPrevAvailElemIds[flid]=prevAvailElemIds[flid]=this._getAvailableMarkerId(flid);prevIdleElemIds[flid]=this._getIdleMarkerId(flid);hasIdle[flid]=hasNotIdle[flid]=false;}}
var noResize=false;var flidTracking=function(id,flid,isIdle){var itemID=this._getBuddyListItemId(id,flid);if(!this._isSortedByIdleStatus(flid)){prevElemIds[flid]=itemID;}else{if(isIdle){prevIdleElemIds[flid]=itemID;}else{prevAvailElemIds[flid]=itemID;}}
hasIdle[flid]=hasIdle[flid]||isIdle;hasNotIdle[flid]=hasNotIdle[flid]||!isIdle;};var flidTrackingFunc=flidTracking.bind(this);while(true){if(availableID&&wasAvailableList[availableID]&&!wasAvailableMultipleLists[availableID]){availableID=availableIDs.shift();continue;}
if(availableID&&nowAvailableID){if(availableID==nowAvailableID){availableID=availableIDs.shift();continue;}
if(compareFunction(availableID,nowAvailableID,this.availableList[availableID].i,nowAvailableList[nowAvailableID].i)<0){id=availableID;}else{id=nowAvailableID;}}else if(availableID){id=availableID;}else if(nowAvailableID){id=nowAvailableID;}else{break;}
if(id==availableID){availableID=availableIDs.shift();isIdle=this.availableList[id].i;if(this.shouldRender){var flids=this._getUserFlids(id);for(var i=0;i<flids.length;i++){flidTrackingFunc(id,flids[i],isIdle);}}}else{nowAvailableID=nowAvailableIDs.shift();if(this.shouldRender&&this.availableList[id]){var toRemoveFlids=this._getUserFlids(id,this.availableList[id],filterExternalFlids);for(var i=0;i<toRemoveFlids.length;i++){var flid=toRemoveFlids[i];var elem=ge(this._getBuddyListItemId(id,flid));if(elem){this._removeSortable(id,flid);DOM.remove(elem);}}}
this.availableList[id]=nowAvailableList[id];if(this.shouldRender){isIdle=nowAvailableList[id].i;var flids=this._getUserFlids(id,null,filterExternalFlids);for(var i=0;i<flids.length;i++){var flid=flids[i];if(!this._isSortedByIdleStatus(flid)){var prevElem=ge(prevElemIds[flid]);}else{var prevElem=isIdle?ge(prevIdleElemIds[flid]):ge(prevAvailElemIds[flid]);}
if(!prevElem){prevElem=ge(defaultPrevAvailElemIds[flid]);}
this._expandItem(id,flid,prevElem,isIdle,shouldAnimate,shouldDelayExpand);noResize=true;flidTrackingFunc(id,flid,isIdle);}}}
if(this.haveFullList){this.sortedList.push(id);}}
if(this.shouldRender){for(var i=0;i<globalFlids.length;i++){var flid=globalFlids[i];var idleMarker=ge(this._getIdleMarkerId(flid));if(idleMarker){if(hasIdle[flid]&&hasNotIdle[flid]){CSS.removeClass(idleMarker,'hide_idle_marker');}else{CSS.addClass(idleMarker,'hide_idle_marker');}}}
var delay=0;if(shouldAnimate){var didExpand=noResize;if(didExpand){delay+=this.expandAnimDuration;}
if(shouldDelayExpand){delay+=this.expandAnimDuration;if(didExpand){delay+=500;}}}
setTimeout(this.resizeTab.bind(this),delay);this._resetFlidClasses();}
this._availableListChanged(noResize);},_isSortedByIdleStatus:function(flid){var opts=this._getFlOpts(flid);return opts.sortByIdleStatus||!this.flLive;},_sort:function(ids,availableList,sortByIdleStatus){availableList=availableList||this.availableList;var compareFunction=this._compareFunction.bind(this,availableList,sortByIdleStatus);ids.sort(compareFunction);return ids;},_compareFunction:function(availableList,sortByIdleStatus,id1,id2,id1Idle,id2Idle){if(sortByIdleStatus||!this.flLive){if(typeof id1Idle=='undefined'){id1Idle=availableList[id1].i;}
if(typeof id2Idle=='undefined'){id2Idle=availableList[id2].i;}
if(id1Idle^id2Idle){return id1Idle?1:-1;}}
var id1Name=chatDisplay.userInfos[id1].name.toLowerCase();var id2Name=chatDisplay.userInfos[id2].name.toLowerCase();return(id1Name<id2Name)?-1:1;},_availableListChanged:function(noResize){if(this.haveFullList){this.availableCount=count(this.availableList);}
for(var id in this.availableList){this.availableList[id].i=this.availableList[id].i?1:0;}
if(this.rendered){presenceCookieManager.store();}
presence.contentChanged(this.contentID);if(!noResize){this.resizeTab();}
this._updateCount();for(var i=0;i<this.availabilityHandlers.length;i++){this.availabilityHandlers[i](this.justCameOnline);}
this.justCameOnline=false;},_onUpdaterResponse:function(buddyListResponse,time){if(this.shouldRender&&!buddyListResponse.forcedRender){return;}
this.updateTime=time;if(!statusControl.visibility){return;}
var hadFullList=this.haveFullList;var flChanged=this._flChanged(buddyListResponse.flMode,buddyListResponse.flData);var nowAvailableListEmpty=is_empty(buddyListResponse.nowAvailableList);this.numRequestFailures=0;this.errorMode=false;this._hideError();this.listChanged=buddyListResponse.listChanged;this.updateUserInfos(buddyListResponse.userInfos);if(flChanged&&buddyListResponse.flLive!=this.flLive){this._handleFlLiveChanged();}
if((hadFullList&&flChanged)||nowAvailableListEmpty){}else{this.flLive=buddyListResponse.flLive;this.flMode=buddyListResponse.flMode;this.flData=buddyListResponse.flData;}
if(this.shouldRender){this.haveFullList=true;if(!this.rendered){this._firstRender();}}else{this.availableCount=buddyListResponse.availableCount;this._updateCount();}
if(!hadFullList||buddyListResponse.wasAvailableIDs.length||!nowAvailableListEmpty){for(var id in this.updateOverlay){if(time<this.updateOverlay[id].exp){if(hadFullList||!this.availableList[id]){delete buddyListResponse.nowAvailableList[id];}else{buddyListResponse.nowAvailableList[id]=this.availableList[id];}
for(var i=0;i<buddyListResponse.wasAvailableIDs.length;i++){if(id==buddyListResponse.wasAvailableIDs[i]){buddyListResponse.wasAvailableIDs.splice(i,1);break;}}}else{delete this.updateOverlay[id];}}
if(hadFullList){if(flChanged&&!nowAvailableListEmpty){buddyListResponse.nowAvailableList=this._massageNowAvailableList(buddyListResponse.nowAvailableList,buddyListResponse.flMode,buddyListResponse.flData);}
this._updateAvailableListWithDiff(buddyListResponse.nowAvailableList,buddyListResponse.wasAvailableIDs);if(flChanged){this._onFlChange(buddyListResponse.flMode,buddyListResponse.flData);}}else{this.availableList=buddyListResponse.nowAvailableList;this._availableListChanged(true);if(this.shouldRender){this._render();}}}else{this._availableListChanged.bind(this).defer();if(flChanged&&nowAvailableListEmpty){this._onFlChange(buddyListResponse.flMode,buddyListResponse.flData);}}},_onUpdaterError:function(response){this.numRequestFailures++;if(this.numRequestFailures>1){this.updateTime=presence.getTime();this.availableCount=0;this._updateCount();this._updateAvailableListWithDiff({},keys(this.availableList));this._showLoadError();}},itemOnClick:function(id,flid){var elem;if((elem=ge(this._getBuddyListItemId(id,flid)))&&elem.activeDrag){return;}
presence.pauseSync();chatDisplay.focusTab(id);if(!this.isSticky()){this.closeTab();}
if(!this.flLive&&this.typeahead){this.typeahead.resetSearch(true);}
Arbiter.inform(ChatBuddyList.BUDDY_CLICKED,{flid:flid,id:id});presence.resumeSync();},_renderItem:function(id,flid,isIdle){var userInfo=chatDisplay.userInfos[id];var name=userInfo.name;var picSrc=userInfo.thumbSrc;var nameCapped;if(name.length>this.maxNameLen){nameCapped=name.substring(0,this.maxNameLen-2)+'...';}else{nameCapped=name;}
var status,anchorTitle='',statusCapped='';if(status=userInfo.status){if(status.length>this.maxStatusLen){statusCapped=status.substring(0,this.maxStatusLen-2)+'...';}else{statusCapped=status;}
anchorTitle=isIdle?_tx("{Idle} - {name} {status} ({time})",{'name':htmlize(name),'Idle':_tx("Idle"),'status':htmlize(status),'time':userInfo.statusTimeRel}):_tx("{name} {status} ({time})",{'name':htmlize(name),'status':htmlize(status),'time':userInfo.statusTimeRel});}else if(isIdle){anchorTitle=_tx("Idle");}
if(flid){var onclick=sprintf('buddyList.itemOnClick(%d, \'%s\')',id,flid);}else{var onclick=sprintf('buddyList.itemOnClick(%d)',id);}
var markupArr=['<a href="#" class="clearfix" title="',anchorTitle,'" ','onclick="',onclick,';return false;">'];var fullDisplay;if(this.flLive){fullDisplay=!this.isCompactDisplay&&(flid!=this.otherFriendsFlid);}else{fullDisplay=!isIdle&&!this.isCompactDisplay;}
var opts=this._getFlOpts(flid);fullDisplay&=opts.fullDisplay;if(fullDisplay){markupArr=markupArr.concat('<img src="',picSrc,'" width="25px" height="25px" />');}
markupArr=markupArr.concat('<div class="friend_status">','<strong id="',this._getBuddyListItemNameId(id,flid),'">',htmlize(nameCapped),'</strong>');if(fullDisplay&&opts['showStatuses']){markupArr=markupArr.concat('<span>',htmlize(statusCapped),'</span>');}
markupArr=markupArr.concat('</div>','<div class="available_dot"></div>','</a>');return markupArr.join('');},_groupAvailableListByFl:function(groupSorted,emptyGroups){if(!this.flMode||!this.flData){return null;}
groupSorted=groupSorted||false;emptyGroups=emptyGroups||false;var result={};for(var flid in this.flData){result[flid]=[];}
if(emptyGroups){return result;}
var groupId=function(id){var flids=this.availableList[id].fl;if(flids){for(var j=0;j<flids.length;++j){var flid=flids[j];result[flid].push(id);}}};var groupIdFunc=groupId.bind(this);if(groupSorted){var sortedList=this.getSortedList();for(var i=0;i<sortedList.length;i++){groupIdFunc(sortedList[i]);}}else{for(var id in this.availableList){groupIdFunc(id);}}
return result;},handleFlInChat:function(is_visible,flid){buddyListDisplay.closeOpenFlyout();if(is_visible){this._unHideFriendListFromChat(flid);}else{this._hideFriendListFromChat(flid);}},_unHideFriendListFromChat:function(flid){var noLists=this._getFriendListsInChat().length==0;var flids=[flid];var data={'unhide_from_chat':1,'flids':flids};this.flData[flid].h=0;this._saveBuddyListSetting(data);if(noLists){this._onFlChange(true,this.flData);}else{this._addFlidsToDOM(flids);}},_hideFriendListFromChat:function(flid){var lastList=this._getFriendListsInChat().length==1;var flids=[flid];var data={'hide_from_chat':1,'flids':flids};this.flData[flid].h=1;this._saveBuddyListSetting(data);if(lastList){this._onFlChange(false,this.flData);}else{this._removeFlidsFromBuddyList(flids);this._removeFlidsFromDOM(flids);}},_friendListHandleOnClick:function(flid){var currentlyOnline=this.flData[flid].o;if(currentlyOnline){this._goOfflineToLists([flid]);}else{this._goOnlineToLists([flid]);}},_friendListHandleMouseOver:function(flid){if(this.reorderingLists){return;}
CSS.addClass($(this._getFriendListId(flid)),'hover');},_friendListHandleMouseOut:function(flid){CSS.removeClass($(this._getFriendListId(flid)),'hover');},_saveBuddyListSetting:function(data){data['user']=this.user;new AsyncRequest().setData(data).setURI('/ajax/chat/buddy_list_settings.php').setHandler(this._onChangeVisibilityResponse.bind(this)).send();},_goOnlineToLists:function(flids,readOnly){readOnly=readOnly||false;var data={'online_to_list':1,'flids':flids,'read_only':readOnly};for(var i=0;i<flids.length;++i){var flid=flids[i];this.flData[flid].o=1;var flItem=$(this._getFriendListId(flid));CSS.addClass(flItem,'online');CSS.removeClass(flItem,'offline');}
this._saveBuddyListSetting(data);},_goOfflineToLists:function(flids,uiOnly){uiOnly=uiOnly||false;var groupedLists=this._groupAvailableListByFl();for(var i=0;i<flids.length;++i){var flid=flids[i];var idsToRemove=groupedLists[flid];var flItem=$(this._getFriendListId(flid));CSS.addClass(flItem,'offline');CSS.removeClass(flItem,'online');this.flData[flid].o=0;this._removeFromBuddyList(idsToRemove,flid);}
if(!uiOnly){var data={'offline_to_list':1,'flids':flids};this._saveBuddyListSetting(data);}},_removeFlidsFromBuddyList:function(flids,groupedList){groupedList=groupedList||this._groupAvailableListByFl(true);var nowAvailList={};for(var i=0;i<flids.length;i++){var flid=flids[i];var ids=groupedList[flid];for(var j=0;j<ids.length;j++){var id=ids[j];var buddyInfo={};buddyInfo['i']=this.availableList[id].i;buddyInfo['fl']=this.availableList[id].fl.clone();if(this.flMode){buddyInfo.fl.remove(flid);if(buddyInfo.fl.length==0){buddyInfo.fl.push(this.otherFriendsFlid);}}else{delete buddyInfo.fl;}
nowAvailList[id]=buddyInfo;}}
if(!is_empty(nowAvailList)){this._updateAvailableListWithDiff(nowAvailList,[]);}},_onChangeVisibilityResponse:function(asyncResponse){var payload=asyncResponse.getPayload();if(payload&&payload.availableList&&this.flMode){this.updateUserInfos(payload.userInfos);this._updateAvailableListWithDiff(payload.availableList,[]);}},_resetFlidClasses:function(){if(!this.flLive||!this.flMode){return;}
var groupedFl=this._groupAvailableListByFl();for(var flid in this.flData){var flItem=ge(this._getFriendListId(flid));if(flItem){CSS.setClass(flItem,this._getFriendListItemClasses(flid,groupedFl));}}},_getFriendListItemClasses:function(flid,groupedFl){var online=this.flData[flid].o;var classes=['friend_list'];if(online){classes.push('online');}else{classes.push('offline');}
if(is_empty(groupedFl[flid])&&online){classes.push('hide_friend_list');}
if(flid==this.otherFriendsFlid){classes.push('compact_friend_list');}
if(this.reorderingLists&&(flid==this.otherFriendsFlid||flid==this.botsFlid)){classes.push('suppress');}
return classes.join(' ');},_renderFriendListHeader:function(flid){var fl_name=this.flData[flid].n;var online=this.flData[flid].o;var sacred=typeof this.flData[flid].s!='undefined';var edit_link_onclick='';if(!sacred&&flid!=this.otherFriendsFlid){edit_link_onclick=sprintf('return !buddyList.reorderingLists ? FriendListManagerBootstrap.bootstrap(%d) : false;',flid);}
var markupArr=['<div class="friendlist_status">','<span class="title"><a href="#" onclick="',edit_link_onclick,'">',htmlize(fl_name),'</a></span>','<span class="edit_link">','<a href="#" onclick="',edit_link_onclick,'">',_tx("edit"),'</a>','</span>','</div>'];if(!sacred){var onclick=sprintf('buddyList._friendListHandleOnClick(%d);',flid);markupArr.push('<div class="online_status_container"><a class="online_status" ','onclick="',onclick,'" ','>','</a></div>');}
return markupArr.join('');},registerExternalFriendList:function(opts){if(!this.rendered){this._firstRender();}
var flid='xfl_'+this.externalFlids.length;this.externalFlids.push(flid);this.flOpts[flid]=opts;return flid;},_renderFriendListContent:function(flid,ids,includeEmptyText){var markupArr;var haveFlid=this.flMode&&flid;if(haveFlid){markupArr=['<ul id="',this._getFriendListContainerId(flid),'"','class="friend_list_container">'];}else{markupArr=[];}
if(includeEmptyText){var emptyItemClass=(this.availableCount?'hide_empty_item':'');markupArr.push('<li id="',this._getBuddyListEmptyItemId(flid),'" class="info_text ',emptyItemClass,'">','</li>');}
markupArr.push('<li id="',this._getAvailableMarkerId(flid),'" class="suppress"></li>');var idleArr=[];var hasIdle=false,hasNotIdle=false;for(var j=0;j<ids.length;j++){var id=ids[j];var idle=this.availableList[id].i;var itemMarkupArr=['<li id="',this._getBuddyListItemId(id,flid),'"',(idle?' class="idle"':''),'>',this._renderItem(id,flid,idle),'</li>'];if(this.flMode){markupArr=markupArr.concat(itemMarkupArr);}else{if(idle){hasIdle=true;idleArr=idleArr.concat(itemMarkupArr);}else{hasNotIdle=true;markupArr=markupArr.concat(itemMarkupArr);}}}
if(!this.flMode){var idleMarkerClass=(hasIdle&&hasNotIdle)?'':' hide_idle_marker';markupArr.push('<li id="',this._getIdleMarkerId(flid),'" class="subheader',idleMarkerClass,'"></li>');markupArr=markupArr.concat(idleArr);}
if(haveFlid){markupArr.push('</ul>');}
return markupArr.join('');},_renderBuddyContent:function(){var markupArr=['<div id="buddy_list_all" class="subgroup">',this.renderEmptySearch(),'<ul id="buddy_list_parent" class="list_select">'];var flids;var groupedLists={};if(this.flMode){flids=keys(this.flData);groupedLists=this._groupAvailableListByFl(true);}else{flids=[null];}
for(var i=0;i<flids.length;++i){var flid=flids[i];var ids=[];var includeEmptyText=false;if(this.flMode&&flid){if(this.flData[flid].h){continue;}
var sacred=typeof this.flData[flid].s!='undefined';var onmouseover='',onmouseout='';if(!sacred&&flid!=this.otherFriendsFlid){onmouseover=sprintf('buddyList._friendListHandleMouseOver(%d);',flid);onmouseout=sprintf('buddyList._friendListHandleMouseOut(%d);',flid);}
markupArr.push('<li id="',this._getFriendListId(flid),'"','onmouseover="',onmouseover,'" ','onmouseout="',onmouseout,'" ','class="',this._getFriendListItemClasses(flid,groupedLists),'">',this._renderFriendListHeader(flid));ids=groupedLists[flid];}else{includeEmptyText=true;ids=this.getSortedList();}
markupArr.push(this._renderFriendListContent(flid,ids,includeEmptyText));if(this.flMode&&flid){markupArr.push('</li>');}}
markupArr.concat(['</ul>','</div>']);return markupArr.join('');},renderEmptySearch:function(flid){var html='<div id="'+this._getEmptySearchId(flid)+'" class="info_text" style="display:none">'+
_tx("Could not find that friend online.")+'</div>';return html;},_render:function(){this.getSortedList();CSS.conditionClass(this.contentDiv,'compact',this.isCompactDisplay);var content=this._renderBuddyContent();if(this.rendered){CSS.addClass(this.contentDiv,'hidden');}
this.contentDiv.innerHTML=content;presence.contentChanged(this.contentID);if(this.rendered){CSS.addClass(this.wrapperDiv,'presence_menu_offscreen');this._hideError();CSS.removeClass(this.contentDiv,'hidden');this.resizeTab();CSS.removeClass(this.wrapperDiv,'presence_menu_offscreen');this._initDragging();}
if(this.errorMode){this._showLoadError();}
if(this.shouldShowLoading){this._showLoading();this.shouldShowLoading=false;}},_firstRender:function(){this._render();this.rendered=true;this.loadTypeahead();},updateItemDisplay:function(id){var buddyInfo=this.availableList[id];if(!buddyInfo){return;}
var userFlids=this._getUserFlids(id);for(var i=0;i<userFlids.length;i++){var flid=userFlids[i];var item=ge(this._getBuddyListItemId(id,flid));if(!item){return;}
item.innerHTML=this._renderItem(id,flid,buddyInfo.i);}},_showLoadError:function(){this._showError(_tx("Could not load available friends."));},_showLoading:function(){this._showError(_tx("Loading..."));},_hideError:function(){this.showingError=false;CSS.removeClass(this.wrapperDiv,'error');},_showError:function(error){this.showingError=true;set_inner_html(this.buddyListError,error);CSS.addClass(this.wrapperDiv,'error');},isSticky:function(){return statusControl.getSetting('sticky_buddylist')||this.openingABTestIsSticky();},enterReorderingFlMode:function(){if(this.reorderingLists){return;}
this.reorderingLists=true;this.freezeTabSize();CSS.addClass(this.contentDiv,'reorder_fl');var allFlids=this._getRenderedFriendLists();this.flSortableGroup=new SortableGroup();for(var i=0;i<allFlids.length;i++){var flid=allFlids[i];if(flid==this.otherFriendsFlid||flid==this.botsFlid){CSS.addClass(this._getFriendListId(flid),'suppress');}else{this._addFlSortable(flid);}}
var reorder_alert=$N('div',{id:'reorder_fl_alert'},[$N('span',{className:'helper_text'},_tx("Drag a list up or down to re-order it.")),$N('input',{type:'button',className:'inputbutton',value:_tx("Done Re-Ordering"),onclick:this.exitReorderingFlMode.bind(this)})]);DOM.insertBefore(reorder_alert,this.contentDiv);},exitReorderingFlMode:function(){if(!this.reorderingLists){return;}
this._reorderFlids();DOM.remove($('reorder_fl_alert'));CSS.removeClass(this.contentDiv,'reorder_fl');var allFlids=this._getRenderedFriendLists();for(var i=0;i<allFlids.length;i++){var flid=allFlids[i];if(flid==this.otherFriendsFlid||flid==this.botsFlid){CSS.removeClass(this._getFriendListId(flid),'suppress');}else{this._removeFlSortable(flid);}}
this.reorderingLists=false;this.unfreezeTabSize.bind(this).defer(50);this.flSortableGroup.destroy();this.flSortableGroup=null;},_addFlSortable:function(flid){if(this.flSortableGroup!=null){this.flSortableGroup.addSortable(flid,$(this._getFriendListId(flid)));animation($(this._getFriendListContainerId(flid))).to('height','0px').to('opacity',0).from(1).blind().hide().ease(animation.ease.end).duration(300).go();}},_removeFlSortable:function(flid){if(this.flSortableGroup!=null){this.flSortableGroup.removeSortable(flid);var container;if(container=ge(this._getFriendListContainerId(flid))){animation(container).to('height','auto').from('0px').to('opacity',1).from(0).blind().show().ease(animation.ease.end).duration(300).go();}}},_reorderFlids:function(){var data={'reorder':1,'flids':this.flSortableGroup.getOrder()};this._saveBuddyListSetting(data);},_getDragKey:function(id,flid){return id+'_'+flid;},_initDragging:function(){if(!this.flLive||!this.flMode){return;}
var groupedLists=this._groupAvailableListByFl();this.sortables={};var flids=this._getRenderedFriendLists();for(var i=0;i<flids.length;i++){var flid=flids[i];var ids=groupedLists[flid];this._initFlidSortable(flid,ids);}},_initFlidSortable:function(flid,ids){if(!flid||!this.flLive||!this.flMode){return;}
if(this.sortables===null){return;}
if(this.flData[flid].s){return;}
var firstFlid=head(this.sortables);this.sortables[flid]=new SortableGroup();if(firstFlid){firstFlid.link(this.sortables[flid]);}
this.sortables[flid].setGrabCallback(this._grabHandler.bind(this)).setDragOverCallback(this._dragOverHandler.bind(this)).setDropCallback(this._dropHandler.bind(this));for(var j=0;j<ids.length;j++){this._addSortable(ids[j],flid);}
this.sortables[flid].addSortable(this._getAvailableMarkerId(flid),ge(this._getAvailableMarkerId(flid)));},_destroyFlidSortable:function(flid){if(!flid||!this.flLive||!this.flMode){return;}
if(this.sortables&&this.sortables[flid]){this.sortables[flid].destroy();delete this.sortables[flid];}},_addSortable:function(id,flid){if(!flid||!this.flLive||!this.flMode){return;}
if(this.flData[flid].s){return;}
if(!this.sortables[flid]){return;}
var key=this._getDragKey(id,flid);if(this.sortables[flid].keyExists(key)){return;}
this.sortables[flid].addSortable(key,ge(this._getBuddyListItemId(id,flid)));},_removeSortable:function(id,flid){if(!flid||!this.flLive||!this.flMode){return;}
if(this.sortables[flid]){this.sortables[flid].removeSortable(this._getDragKey(id,flid));}},_grabHandler:function(draggableKey){var temp=draggableKey.split('_');if(temp.length!=2){return;}
var id=temp[0];var flid=temp[1];var obj=ge(this._getBuddyListItemId(id,flid));this.dragInitialVector=Vector2.getElementPosition(obj);},_dragOverHandler:function(draggable,droppable){if(this.dragInitialVector){var position=Vector2.getElementPosition(draggable);var viewportDimensions=Vector2.getViewportDimensions();if(position.y<this.dragInitialVector.y){var contentDimensions=Vector2.getElementDimensions(this.contentDiv.parentNode);var distanceToTop=Math.abs(viewportDimensions.sub(contentDimensions).y);var diff=Math.abs(distanceToTop-position.y);if(diff<=100){this.contentDiv.parentNode.scrollTop-=diff;}}else{var diff=Math.abs(viewportDimensions.sub(position).y);if(diff<=100){this.contentDiv.parentNode.scrollTop+=diff;}}
this.dragInitialVector=position;}},_dropHandler:function(key){this.dragInitialVector=null;var temp=key.split('_');if(temp.length!=2){return;}
var id=temp[0];var oldFlid=temp[1];var draggedItem=$(this._getBuddyListItemId(id,oldFlid));var newFlid=draggedItem.parentNode.id.split('_').pop();if(newFlid==oldFlid){this._updateUIAfterDragging(id,oldFlid,oldFlid,draggedItem);}else{if(this.flData[oldFlid].s||this.flData[newFlid].s){this._updateUIAfterDragging(id,oldFlid,oldFlid,draggedItem);return;}
var currentFlids=this.availableList[id].fl;var movingList=false;var removingList=false;if(currentFlids.length==1){this.availableList[id].fl=[newFlid];if(newFlid==this.otherFriendsFlid){removingList=true;}else{movingList=oldFlid!=this.otherFriendsFlid;}}else{this.availableList[id].fl.push(newFlid);}
if(this._updateUIAfterDragging(id,oldFlid,newFlid,draggedItem)){var data;if(removingList){data={'remove_fl':true,'old_flid':oldFlid,'uid':id};}else if(movingList){data={'move_fl':true,'new_flid':newFlid,'old_flid':oldFlid,'uid':id};}else{data={'add_fl':1,'new_flid':newFlid,'uid':id};}}}},_updateUIAfterDragging:function(id,oldFlid,newFlid,draggedItem){var groupedLists=this._groupAvailableListByFl(true);var sortedList=groupedLists[newFlid];var index=sortedList.indexOf(id);var prevElem;if(index==-1){return false;}else if(index==0){prevElem=$(this._getAvailableMarkerId(newFlid));}else{prevElem=$(this._getBuddyListItemId(sortedList[index-1],newFlid));}
(function(){if(oldFlid!=newFlid){DOM.remove(draggedItem);}
var newItem=this._expandItem(id,newFlid,prevElem,this.availableList[id].i,true,false,true);this._resetFlidClasses();}).bind(this).defer(250);return true;},_getGlobalFlids:function(filterExternalFlids){var flids=this.flMode&&this.flData?keys(this.flData):[null];return filterExternalFlids?flids:flids.concat(this.externalFlids);},_getUserFlids:function(id,buddyInfo,filterExternalFlids){buddyInfo=buddyInfo||this.availableList[id];var flids=buddyInfo.fl?buddyInfo.fl:[null];if(!filterExternalFlids){if(!buddyInfo.allFlids){buddyInfo.allFlids=this._addExternalFlids(id,flids);}
flids=buddyInfo.allFlids;}
return flids;},_addExternalFlids:function(id,flids){flids=flids.concat();for(var i=0;i<this.externalFlids.length;i++){var flid=this.externalFlids[i];var opts=this._getFlOpts(flid);if(!opts.excludeIds[id]){flids.push(flid);}}
return flids;},_getFlOpts:function(flid){return this.flOpts[flid]||ChatBuddyList.DEFAULT_OPTS;},_getAvailableMarkerId:function(flid){return this._getIdStr('buddy_list_avail_marker',flid);},_getIdleMarkerId:function(flid){return this._getIdStr('buddy_list_idle_marker',flid);},_getBuddyListItemId:function(id,flid){return this._getIdStr('buddy_list_item_'+id,flid);},_getBuddyListItemNameId:function(id,flid){return this._getIdStr('buddy_list_item_name_'+id,flid);},_getBuddyListWasItemId:function(id,flid){return this._getIdStr('buddy_list_was_item_'+id,flid);},_getBuddyListEmptyItemId:function(flid){return this._getIdStr('buddy_list_empty_item',flid);},_getIdStr:function(elemId,flid){return flid?(flid+'_'+elemId):elemId;},_getFriendListId:function(flid){return'friend_list_item_'+flid;},_getFriendListContainerId:function(flid){return'friend_list_container_'+flid;},_getEmptySearchId:function(flid){var flidStr=flid?('_'+flid):'';return'buddy_list_empty_search'+flidStr;},debugPrintUpdateOverlay:function(){Util.log("buddyList.updateOverlay =");var uo=this.updateOverlay;for(var id in uo){Util.log(id+": st = "+uo[id].ol+", expires in = "+
(uo[id].exp-presence.getTime()));}}};

function ChatBuddyListDisplay(buddy_list_panel){this.buddy_list_panel=ge(buddy_list_panel);this.openFlyout=null;this.openControl=null;this._init();}
ChatBuddyListDisplay.prototype={_init:function(){if(this.buddy_list_panel){var lists_callback=this._clickControlPanel.bind(this,'buddy_list_panel_lists_control','buddy_list_panel_lists_flyout',this._getListsFlyoutContent.bind(this));Event.listen(DOM.find(this.buddy_list_panel,'#buddy_list_panel_lists_control a'),'click',lists_callback);var settings_callback=this._clickControlPanel.bind(this,'buddy_list_panel_settings_control','buddy_list_panel_settings_flyout',this._getChatSettingsNodes.bind(this));Event.listen(DOM.find(this.buddy_list_panel,'#buddy_list_panel_settings_control a'),'click',settings_callback);}},_clickVisibilityToggle:function(){statusControl.toggleVisibility();this.closeOpenFlyout();},_clickReorderLists:function(){buddyList.enterReorderingFlMode();this.closeOpenFlyout();},_clickControlPanel:function(controlID,flyoutID,markupFunc){if(this.openFlyout){if(this.openFlyout==flyoutID){this.closeOpenFlyout();}else{this.closeOpenFlyout();this._openFlyout(controlID,flyoutID,markupFunc());}}else{this._openFlyout(controlID,flyoutID,markupFunc());}
return false;},_openFlyout:function(controlID,flyoutID,content){DOM.setContent($(flyoutID),content);CSS.removeClass(flyoutID,'hidden_elem');CSS.addClass(controlID,'flyout_open');this.openFlyout=flyoutID;this.openControl=controlID;},closeOpenFlyout:function(){if(!this.openFlyout){return;}
CSS.addClass(this.openFlyout,'hidden_elem');CSS.removeClass(this.openControl,'flyout_open');this.openFlyout=null;this.openControl=null;},_getListsFlyoutContent:function(){var new_list_input=$N('input',{className:'inputtext',type:'text'});new TextInputControl(new_list_input).setPlaceholderText(_tx("Type a list name"));var new_list=$N('div',{className:'new_list'},[$N('span',{},_tx("Create a new list:")),new_list_input]);var instructions=$N('div',{className:'text'},_tx("Group online friends by:"));var flData=buddyList.getFriendLists();var checklist=new UISelectList();checklist.setCallback(buddyList.handleFlInChat.bind(buddyList));for(var flid in flData){checklist.addItem(flData[flid].n,!flData[flid].h,flid);}
return[instructions,checklist.getElement(),new_list];},_renderListSettingToggle:function(flid,checked,fl_name){return this._renderToggle('list_online_'+flid,checked,fl_name,'list_online_checkbox_'+flid,sprintf('buddyList.handleFlInChat(%d, this);',flid));},_renderChatSettingToggle:function(name,value,label){return this._renderToggle('chat_setting_'+name,value,label,'chat_setting_checkbox_'+name,sprintf('statusControl.sendSettingChange("%s", this.checked);',name));},_renderToggle:function(div_id,checked,label,checkbox_id,onclick){var checkbox=$N('input',{type:'checkbox'});checkbox.setAttribute('id',checkbox_id);checkbox.setAttribute('onclick',onclick);if(checked){checkbox.setAttribute('checked','checked');}
var labelElem=$N('label',{},label);labelElem.setAttribute('for',checkbox_id);return $N('div',{className:'chat_setting clearfix',id:div_id},[$N('div',{className:'input_box'},[$N('span',{className:'show_loading'},$N('img',{src:'/images/loaders/indicator_blue_small.gif'})),$N('span',{className:'hide_loading'},checkbox)]),labelElem]);},_getChatSettingsNodes:function(){var nodes=[];if(this.buddy_list_panel){var offline_button=$N('a',{className:'go_offline_control'},$N('span',{},_tx("Go Offline")));offline_button.listen('click',this._clickVisibilityToggle.bind(this));var options_actions=$N('div',{className:'options_actions'},offline_button);if(buddyList._getFriendListsInChat().length>0){var reorder_button=$N('a',{className:'list_reorder_control'},$N('span',{},_tx("Re-order Lists")));reorder_button.listen('click',this._clickReorderLists.bind(this));options_actions.appendChild(reorder_button);}
nodes.push(options_actions);nodes.push($N('hr',{className:'menu_divider'}));}
var list=[{name:'minifeed',label:_tx("Show {Feed} stories in {Chat}",{'Feed':_tx("Feed"),'Chat':_tx("Chat")})},{name:'sound',label:_tx("Play Sound for New Messages")},{name:'sticky_buddylist',label:_tx("Keep Online Friends Window Open")},{name:'compact_buddylist',label:_tx("Show Only Names in Online Friends")}];for(var i=0;i<list.length;i++){if(list[i].name=='sticky_buddylist'&&buddyList.openingABTestIsSticky()){continue;}
nodes.push(this._renderChatSettingToggle(list[i].name,statusControl.getSetting(list[i].name),list[i].label));}
return nodes;},toggleOldChatSettings:function(){var chat_settings=$('chat_settings');if(CSS.hasClass(chat_settings,'hidden')){DOM.setContent(chat_settings,this._getChatSettingsNodes());CSS.removeClass(chat_settings,'hidden');}else{CSS.addClass(chat_settings,'hidden');}}};

function ChatStatusControl(visibility,settingsObj){this.user=presence.user;this.visibility=visibility;this.poppedOut=presence.poppedOut;this.settingsObject=settingsObj;this._init();}
ChatStatusControl.prototype={_init:function(){this.visibilityHandlers=[];this.visibilityAsync=null;this.statusControlTab=ge('chat_status_control_tab');this.availabilityToggle=ge('chat_availability_toggle');this.availabilityToggleImage=ge('chat_availability_toggle_image');this.showEmoticons=true;presence.registerStateStorer(this._storeState.bind(this));presence.registerStateLoader(this._loadState.bind(this));},registerVisibilityHandler:function(fn){this.visibilityHandlers.push(fn);},_storeState:function(presenceState){presenceState.vis=this.visibility;presenceState.smf=this.getSetting('minifeed');presenceState.bls=this.getSetting('sticky_buddylist');presenceState.blc=this.getSetting('compact_buddylist');presenceState.snd=this.getSetting('sound');return presenceState;},_loadState:function(presenceState){if(presenceState.vis!=this.visibility){this.setVisibility(presenceState.vis);}
this.setSetting('minifeed',presenceState.smf);this.setSetting('sticky_buddylist',presenceState.bls);this.setSetting('compact_buddylist',presenceState.blc);this.setSetting('sound',presenceState.snd);},_updateAvailabilityUI:function(availability){if(availability==2){availability=1;}
var classes=['unavailable','available','idle'];for(var i=0;i<=classes.length;i++){if(i==availability){if(this.availabilityToggle){CSS.addClass(this.availabilityToggle,classes[i]);}
if(this.statusControlTab){CSS.addClass(this.statusControlTab,classes[i]);}}else{if(this.availabilityToggle){CSS.removeClass(this.availabilityToggle,classes[i]);}
if(this.statusControlTab){CSS.removeClass(this.statusControlTab,classes[i]);}}}},_setIdle:function(){this._updateAvailabilityUI(2);},setVisibility:function(visibility){if(visibility==this.visibility){return;}
this.visibility=visibility;if(visibility){this._updateAvailabilityUI(1);channelManager.isActionRequest=true;channelManager.rebuild(ChannelRebuildReasons.UIRestart);}else{this._updateAvailabilityUI(0);if(!chatDisplay.gatedFeatures['invisible_channel']){channelManager.setReady(false);}}
for(var i=0;i<this.visibilityHandlers.length;i++){this.visibilityHandlers[i]();}},_onVisibilityResponse:function(newVisibility,response){presence.pauseSync();this.setVisibility(newVisibility);if(this.availabilityToggleImage){CSS.removeClass(this.availabilityToggleImage,'availability_loading');}
if(!presence.inPopoutWindow&&!newVisibility){chatDisplay.unfocus();}
presence.resumeSync();},_onVisibilityError:function(response){var chat=_tx("Chat");presence.showAsyncError(response,_tx("Couldn't set {Chat} availability",{'Chat':chat}));if(this.availabilityToggleImage){CSS.removeClass(this.availabilityToggleImage,'availability_loading');}},toggleVisibility:function(){this.sendVisibility(!this.visibility);},sendVisibility:function(visibility){if(this.visibility==visibility){return;}
if(this.availabilityToggleImage){CSS.addClass(this.availabilityToggleImage,'availability_loading');}
this.visibilityAsync=new AsyncRequest().setHandler(this._onVisibilityResponse.bind(this,visibility)).setErrorHandler(this._onVisibilityError.bind(this)).setTransportErrorHandler(this._onVisibilityError.bind(this)).setData({'visibility':visibility}).setURI(chatDisplay.settingsURL).send();},getSetting:function(name){return this.settingsObject[name];},setSetting:function(name,value){if(this.getSetting(name)==value){return;}
var setting;if(setting=ge('chat_setting_checkbox_'+name)){setting.checked=value;}
if(name=='minifeed'){chatDisplay.reloadTabs();}
if(name=='compact_buddylist'){buddyList.setCompactDisplay(value);}
this.settingsObject[name]=value;},_onSettingChangeResponse:function(name,value,response){this.setSetting(name,value);CSS.removeClass($('chat_setting_'+name),'chat_setting_loading');presence.doSync();},_onSettingChangeError:function(name,response){presence.showAsyncError(response,_tx("Couldn't change that setting"));CSS.removeClass($('chat_setting_'+name),'chat_setting_loading');},sendSettingChange:function(name,value){CSS.addClass($('chat_setting_'+name),'chat_setting_loading');var data={};data[name]=value;new AsyncRequest().setHandler(this._onSettingChangeResponse.bind(this,name,value)).setErrorHandler(this._onSettingChangeError.bind(this,name)).setTransportErrorHandler(this._onSettingChangeError.bind(this,name)).setData(data).setURI(chatDisplay.settingsURL).send();}};

function ChatTabSlider(){this.handleWidth=141;this.animationTime=210;this._init();}
ChatTabSlider.prototype={_init:function(){this.org_s=0;this.numToShow=0;this.numShift=1;this.shiftByNumTabs=false;this.timer=null;this.skipAnimation=false;this.chatWidth=null;this.tabPos={};this.chat=ge('chat');this.chatTabBar=ge('chat_tab_bar');this.nextTab=ge('chat_next_tab');this.prevTab=ge('chat_previous_tab');this.nextCounter=ge('next_count');this.prevCounter=ge('prev_count');this.numNext=0;this.numPrev=0;this.prevTabs={};this.nextTabs={};this.numMissedNextCounter=ge('next_num_missed');this.numMissedPrevCounter=ge('prev_num_missed');presence.registerStateLoader(this._load.bind(this));presence.registerStateStorer(this._store.bind(this));presence.registerResizeHandler(this._resize.bind(this));},load:function(){this._load(presence.state);this._resize(true);},_load:function(presenceState){var s=0;if(presenceState){s=(presenceState.s?presenceState.s:s);}
this._setPos(s);},_store:function(presenceState){presenceState.s=this._s;return presenceState;},_calculate:function(onload){this._setMaxWidth();if(onload)this.maxWidth-=16;if(presence.poppedOut){this.numToShow=chatDisplay.numTabs;}else{this.numToShow=parseInt(this.maxWidth/this.handleWidth);this.numToShow=this.numToShow>0?this.numToShow:1;}
if(this.shiftByNumTabs)this.numShift=this.numToShow;if(this._s!=null)this._setPos(this._s);},_setMaxWidth:function(){var w=DOMScroll.getScrollRoot().offsetWidth;if(ChatTabSlider.presenceWidthTest){var w=$('presence_ui').offsetWidth;}
var divs=['buddy_list_tab','status_control_tab','presence_notifications_tab','presence_applications_tab','icon_garden','bookmarkable_app'];for(var i=0;i<divs.length;i++){w-=(ge(divs[i])&&$(divs[i]).clientWidth!=undefined)?ge(divs[i]).clientWidth:0;}
this.maxWidth=(presence.poppedOut?w-254:w-138);},_setPos:function(val){if(val<0){val=0;}
this._s=val;this._e=this._s+this.numToShow;},_doSync:function(){var changed=(this.org_s!=this._s);this.org_s=0;if(changed){presence.doSync();}},_build:function(){if(presence.poppedOut){return;}
var all=(this.numToShow>=chatDisplay.numTabs)?true:false;this.setVisibleTabs(all);if(all){this.resetCounters();}else{this.updateCounters();}
this.updateMissedCount();},_resize:function(onload){this.org_s=this._s;this._calculate(onload);this._build();this._doSync();if(chatDisplay.lastFocused!=null){this.gotoTab(chatDisplay.lastFocused);}},addTab:function(id){this._build();},gotoTab:function(id){if(this.tabPos[id]!=0&&!this.tabPos[id])return;var n=parseInt(this.tabPos[id]);if(!this._inRange(n)){var p=(n-this.numToShow)+1;this._setPos(p);this._build();}},close:function(id){if(this.tabPos[id]!=0&&!this.tabPos[id])return;delete this.tabPos[id];this._setPos(((this.numPrev>0||this.numNext>0)&&this._s>0)?this._s-1:0);this._calculate();this._build();},setVisibleTabs:function(all){var c=0;for(var id in chatDisplay.tabs){this.tabPos[id]=c;if(this._inRange(c,id)||all==true){chatDisplay.tabs[id].show();}else{chatDisplay.tabs[id].hide();}
c++;}},_inRange:function(n,id){var s,e=false;if(n>=this._s){s=true;delete this.prevTabs[id];}else{this.prevTabs[id]=id;}
if(n<this._e){e=true;delete this.nextTabs[id];}else{this.nextTabs[id]=id;}
return(s&&e);},updateMissedCount:function(){var prev=0;var next=0;for(var id in this.prevTabs){prev+=chatDisplay.tabs[id]?chatDisplay.tabs[id].numMissed:0;}
this.numMissedPrevCounter.innerHTML=prev;this.numMissedPrevCounter.style.display=prev>0?'block':'none';for(var id in this.nextTabs){next+=chatDisplay.tabs[id]?chatDisplay.tabs[id].numMissed:0;}
this.numMissedNextCounter.innerHTML=next;this.numMissedNextCounter.style.display=next>0?'block':'none';},updateCounters:function(){this.numNext=chatDisplay.numTabs-this._e;this.numPrev=this._s;if(this.numNext<=0){this.numNext=0;CSS.addClass(this.nextTab,'disabled');}else{CSS.removeClass(this.nextTab,'disabled');}
if(this.numPrev<=0){this.numPrev=0;CSS.addClass(this.prevTab,'disabled');}else{CSS.removeClass(this.prevTab,'disabled');}
if(this.numPrev>0||this.numNext>0){show('chat_next_tab');show('chat_previous_tab');}else{hide('chat_next_tab');hide('chat_previous_tab');}
this.nextCounter.innerHTML=this.numNext;this.prevCounter.innerHTML=this.numPrev;},resetCounters:function(){this._setPos(0);this.updateCounters();},shift:function(num){this.org_s=this._s;chatDisplay.unfocusNoSync();this._shift.bind(this,num).defer();},_shift:function(num){this._setPos(this._s<0?0:this._s+num);this._slide(num);if(this.timer||this.skipAnimation){this._slideReset();this.skipAnimation=true;var t=setTimeout(function(){this.skipAnimation=false;}.bind(this),500);}else{this.timer=setTimeout(function(){this._slideReset();}.bind(this),this.animationTime);}},_slide:function(num){this._slideSetup(false);this.setVisibleTabs(true);this.slideInc=(num*(this.handleWidth));this.leftPos=-(num)*(this.numNext*(this.slideInc));this.chatTabBar.style.left=this.leftPos+'px';if(buddyList.openingABTestFlipped()){this.slideInc*=-1;this.leftPos*=-1;}
animation(this.chatTabBar).by('left',this.slideInc).duration(this.animationTime-10).go();},_slideSetup:function(reset){this.chat.style.position=reset?'':'relative';this.chat.style.overflow=reset?'visible':'hidden';if(!this.chatWidth){this.chatWidth=this.chatTabBar.clientWidth;}
if(reset){this.chatWidth=null;}
this.chat.style.width=reset?'':this.chatWidth+'px';this.chatTabBar.style.width=reset?'':chatDisplay.numTabs*this.handleWidth+'px';this.chatTabBar.style.position=reset?'':'absolute';},_slideReset:function(){clearTimeout(this.timer);this.timer=null;this._slideSetup(true);this._build();if(chatDisplay.lastFocused){if(this._inRange(this.tabPos[chatDisplay.lastFocused])){chatDisplay.refocus();}else{chatDisplay.lastFocused=null;}}
this._doSync();},next:function(){if(this.numNext<=0){return;}
this.shift(this.numShift);},prev:function(){if(this.numPrev<=0){return;}
this.shift(-this.numShift);}};

if (window.Bootloader) { Bootloader.done(["js\/vfydd7vdkqowscs8.pkg.js"]); }