/*    HTTP Host:  static.ak.fbcdn.net                                          */
/*    Generated:  May 10th 2009 6:33:12 PM PDT                                 */
/*      Machine:  10.16.140.107                                                */
/*       Source:  Local Cache                                                  */
/*     Location:  rsrc:ehgjw7tl:en_US:/html/js/242mhaywwfpc84ww.pkg.js:141     */
/*       Locale:  en_US                                                        */
/*         Path:  js/242mhaywwfpc84ww.pkg.js                                   */


var ReviewsApp={writeReview:false,writeReviewElem:null,ON_RATING_SET:'reviews/on_rating_set',ON_REVIEW_SUBMITTED:'reviews/on_review_submitted',IMAGE_STAR_ON:null,IMAGE_STAR_OFF:null,IMAGE_STAR_GRAY:null,initialize:function(star_on,star_off,star_gray){ReviewsApp.IMAGE_STAR_ON=star_on;ReviewsApp.IMAGE_STAR_OFF=star_off;ReviewsApp.IMAGE_STAR_GRAY=star_gray;var preload=[star_on,star_gray,star_off];for(var ii=0;ii<preload.length;ii++){(new Image()).src=preload[ii];}}};function reviews_show_editor_dialog(reviewee_id,is_delete){var src='/ajax/applications/reviews/dialog/editor.php?of='+reviewee_id;var button=_tx("Post");if(is_delete){src+='&delete';button=_tx("Delete");}
Dialog.showFormAjax(_tx("Delete Review"),src,button,true);}
function reviews_show_editor_inline(elem){hide('review_editor_status');toggle(ge('reviews_inline_editor'));ReviewsApp.writeReviewElem=elem;}
function reviews_set_rating(rating){var input=ge('review_rating');input.value=rating;for(var i=1;i<=5;i++){var img=$('review_rating_star'+i).getElementsByTagName('img')[0];if(i<=rating){img.src=ReviewsApp.IMAGE_STAR_ON;}else{img.src=ReviewsApp.IMAGE_STAR_OFF;}}
Arbiter.inform(ReviewsApp.ON_RATING_SET,{element:input});return false;}
function reviews_hover_rating(rating){var input=ge('review_rating');if(!(input.value>0)){for(var i=1;i<=5;i++){var img=$('review_rating_star'+i).getElementsByTagName('img')[0];if(i<=rating){img.src=ReviewsApp.IMAGE_STAR_ON;}else{img.src=ReviewsApp.IMAGE_STAR_GRAY;}}}else{return false;}}
function reviews_submit(reviewee_id,review_id,error_status,error_message){if(error_status){new Dialog().setTitle(error_status).setBody(error_message).setModal(true).setButtons([Dialog.CLOSE]).show();return false;}
var blurb_element=ge('review_blurb');var rating_element=ge('review_rating');var blurb=blurb_element.value;var rating=rating_element.value;var review_id=$('review_id').value;blurb_element.disabled=true;var no_rating=(rating<1)||(rating>5);if(no_rating){var msg=_tx("You must choose a star rating");var review_editor_error=$('review_editor_error');set_inner_html(review_editor_error,msg);show(review_editor_error);blurb_element.disabled=false;return false;}else{var reviews_async_response=function(asyncResponse){var msg=_tx("Post successful.");var review_editor_status=$('review_editor_status');set_inner_html(review_editor_status,msg);if(review_id>0){var review_element=ge('review_'+review_id);review_element.parentNode.removeChild(review_element);}
var container_element=ge('new_review_container');var payload=asyncResponse.getPayload();if(payload.reload){window.location.reload();}
if(payload.oid){$('review_id').value=parseInt(payload.oid);}
set_inner_html(container_element,payload.markup);show(review_editor_status);setTimeout(function(){hide(review_editor_status);},3000);hide('review_editor_error');hide('reviews_inline_editor');if(ReviewsApp.writeReview){if(ReviewsApp.writeReviewElem){set_inner_html(ReviewsApp.writeReviewElem,_tx("Update Review"));}
ReviewsApp.writeReview=false;}};new AsyncRequest().setURI('/ajax/applications/reviews/inline/editor.php?of='+reviewee_id).setData({'review_id':review_id,'rating':rating,'blurb':blurb}).setHandler(reviews_async_response).send();blurb_element.disabled=false;return true;}}

function contact_dialog_async_with_form(app_id){var async=new AsyncRequest().setMethod('GET').setReadOnly(true).setData({'app_id':app_id}).setURI('/ajax/apps/contact_developer.php');new Dialog().setAsync(async).show();}

function PlatformCanvasController(app_id,session_key,session_timeout,app_name,callback,api_key){this.sessionKey=session_key;this.appName=app_name;this.appId=app_id;this.callback=callback;this.api_key=api_key;this.isFirstPage=false;this.isIFrame=false;this._movingPage=false;this.sessionRefresh=(session_timeout*900);if(this.appId&&this.sessionKey&&this.sessionRefresh){setTimeout(this.refreshAppSession.bind(this),this.sessionRefresh);}
PlatformCanvasController.singleton=this;}
PlatformCanvasController.AUTO_REFRESH=30000;PlatformCanvasController.prototype.setUpIFrame=function($is_static){PageTransitions.registerHandler(this.handleChange.bind(this));this.isIFrame=true;this.isStatic=$is_static;}
PlatformCanvasController.prototype.autoRefreshAd=function(){if(this.isIFrame){this.isFirstPage=true;$('app'+this.appId+'_iframe_canvas').onload=this._clickRefresh.bind(this);}
this._ignoreNext=true;this._loopRefresh();}
PlatformCanvasController.prototype.requireLogin=function(){var loginResponse=FB.IFrameUtil.CanvasUtilServer.loginResponse;FBML.requireLogin(this.appId,loginResponse.bind(null,true),loginResponse.bind(null,false),null,true,true);}
PlatformCanvasController.prototype.closeLogin=function(){FBML.closeLoginDialog();}
PlatformCanvasController.prototype.showFeedDialog=function(template_bundle_id,template_data,body_general,target_id,user_msg_prompt,user_msg){FBML.showFeedDialog(this.appId,template_bundle_id,template_data,body_general,target_id,FB.IFrameUtil.CanvasUtilServer.loginResponse.bind(null),user_msg_prompt,user_msg);}
PlatformCanvasController.prototype._loopRefresh=function(){if(this._ignoreNext){this._ignoreNext=false;}else{this.refreshAd();}
this._loopRefresh.bind(this).defer(PlatformCanvasController.AUTO_REFRESH);}
PlatformCanvasController.prototype._clickRefresh=function(){this.refreshAd();this._ignoreNext=true;}
PlatformCanvasController.prototype.refreshAppSession=function(){new AsyncRequest().setURI('/ajax/session.php').setData({'app_id':this.appId,'session_key':this.sessionKey}).setReadOnly(true).setHandler(function(response){var payload=response.getPayload();if(payload['session_end']>0){setTimeout(this.refreshAppSession.bind(this),this.sessionRefresh);}}.bind(this)).send();}
PlatformCanvasController.prototype.refreshUrl=function(newUrl){var href=newUrl.href;if(href.startsWith(this.callback)){var newSuffix=new URI(href.substring(this.callback.length));this.changeUrlSuffix(newSuffix,true);}
return false;}
PlatformCanvasController.refreshUrl=function(newUrl){if(PlatformCanvasController.singleton){PlatformCanvasController.singleton.refreshUrl(newUrl);}}
PlatformCanvasController.prototype.changeUrlSuffix=function(suffix,is_refresh){this.currentUri=URI.getRequestURI().getUnqualifiedURI();var newPath=new URI(this.getAppPrefix()+suffix);this.stripFbParams(newPath);var dontAddBackEntry=is_refresh&&PlatformCanvasController.storesIFrameHistory(this.isStatic);if(this.currentUri.toString()!=newPath.toString()){this.currentUri=newPath;this.refreshAd();PageTransitions.go(newPath.toString(),dontAddBackEntry);}}
PlatformCanvasController.prototype.getAppPrefix=function(){return"/"+this.appName+"/";}
PlatformCanvasController.prototype.convertFromApps=function(uri){var prefix=this.getAppPrefix();var suffix=uri.getUnqualifiedURI().toString().substring(prefix.length);return new URI(this.callback+suffix);}
PlatformCanvasController.prototype.convertToApps=function(uri){var suffix=uri.toString().substring(this.callback.length);return new URI(this.getAppPrefix()+suffix);}
PlatformCanvasController.prototype.stripFbParams=function(uri){var queryData=uri.getQueryData();var newQueryData={};for(key in queryData){if((!key.startsWith("fb_")||key.startsWith("fb_force_mode"))&&!key.startsWith("_fb")&&!key.startsWith("quickling_apps")){newQueryData[key]=queryData[key];}}
uri.setQueryData(newQueryData);}
PlatformCanvasController.prototype.refreshAd=function(){if(this.isFirstPage){this.isFirstPage=false;}else{ads_refresh(this.appName,'/canvas.php');}}
PlatformCanvasController.prototype.handleChange=function(uri){if(!uri.getPath().startsWith("/"+this.appName)||this._movingPage){return false;}
var unqualUri=uri.getUnqualifiedURI();this.stripFbParams(unqualUri);if(this.currentUri.toString()!=unqualUri.toString()){FB.IFrameUtil.CanvasUtilServer.loadNewUrl(this.convertFromApps(uri).toString());this.currentUri=unqualUri;}
PageTransitions.transitionComplete();return true;}
PlatformCanvasController.prototype.goURI=function(uri){this._movingPage=true;var decorated_uri=new URI(uri);decorated_uri.addQueryData({_fb_q:true});PageTransitions.go(decorated_uri);}
PlatformCanvasController.storesIFrameHistory=function(is_static){if(ua.ie()){return true;}else if(ua.firefox()){if(is_static){return true;}else{return false;}}else if(ua.safari()){return false;}else{return false;}}
var smartIframes=[];function smartSizingFrameAdded(){window.onresize=_resizeSmartFrames;smartIframes=[];var allIframes=document.getElementsByTagName('iframe');for(var i=0;i<allIframes.length;i++){var frame=allIframes[i];if(frame.className=='smart_sizing_iframe'){smartIframes.push(frame);frame.style.width=frame.parentNode.scrollWidth-2+"px";}}
_resizeSmartFrames();}
if(window.innerHeight){var windowHeight=function(){return window.innerHeight;};}else if(document.documentElement&&document.documentElement.clientHeight){var windowHeight=function(){return document.documentElement.clientHeight;};}else{var windowHeight=function(){return DOMScroll.getScrollRoot().clientHeight;};}
function _resizeSmartFrames(){var height=windowHeight();for(var i=0;i<smartIframes.length;i++){var frame=smartIframes[i];var spaceLeft=height-elementY(frame)-61;frame.style.height=spaceLeft/(smartIframes.length-i)+'px';}}

function ChatTabActions(container){this._container=container;this._actions={};this._actionOrder=[];this._visibilityChanged=false;this._anyVisible=false;this.actionClass='action';}
copy_properties(ChatTabActions.prototype,{anyVisible:function(){return this._anyVisible;},appendAction:function(name,create_element,action){this._addAction(name,create_element,action);this._actionOrder.push(name);return this;},prependAction:function(name,create_element,action){this._addAction(name,create_element,action);this._actionOrder.unshift(name);return this;},setVisible:function(name,visible){var action=this._actions[name];if(action.visible!=visible){action.visible=visible;this._visibilityChanged=true;}
return this;},refresh:function(){if(this._visibilityChanged){this._render();this._visibilityChanged=false;return true;}
return false;},_render:function(){DOM.empty(this._container);var actions=this._actions;var actionOrder=this._actionOrder;this._anyVisible=false;var elements=[];for(var i=0;i<actionOrder.length;++i){var action=actions[actionOrder[i]];if(action.visible){if(this._anyVisible){elements.push($N('span',{className:'divider'},'|'));}
elements.push(action.create_element());this._anyVisible=true;}}
DOM.appendContent(this._container,elements);this._container.style.display=this._anyVisible?'block':'none';},_addAction:function(name,create_element,action){if(typeof create_element=='string'){var text=create_element;create_element=function(){return $N('span',{className:this.actionClass},text);}.bind(this);}
this._actions[name]={create_element:function(){var element=create_element();Event.listen(element,'click',action);return element;},visible:false};this._visibilityChanged=true;}});

function Sound(){}
copy_properties(Sound,{play:function(path){uri=URI(path);if(!uri.getDomain()){path=URI(env_get('static_base')).setPath(uri.getPath()).toString();}
var player;var embed;if(/\.mp3$/.test(path)){player=document['so_sound_player']||window['so_sound_player'];if(player){if(!player.playSound&&player.length){player=player[0];}
if(player.playSound){player.playSound(path);return;}}}
embed=ge('sound');if(!embed){embed=document.createElement('span');embed.setAttribute('id','sound');DOM.getRootElement().appendChild(embed);}
embed.innerHTML='<embed src="'+path+'" autostart="true" loop="false" '+'hidden="true" />';}});

function html_wordwrap(str,wrap_limit,txt_fn){if(typeof wrap_limit=='undefined'){wrap_limit=60;}
if(typeof txt_fn!='function'){txt_fn=htmlize;}
var regex=new RegExp("\\S{"+(wrap_limit+1)+"}",'g');var start=0;var str_remaining=str;var ret_arr=[];var matches=str.match(regex);if(matches){for(var i=0;i<matches.length;i++){var match=matches[i];var match_index=start+str_remaining.indexOf(match);var chunk=str.substring(start,match_index);if(chunk){ret_arr.push(txt_fn(chunk));}
ret_arr.push(txt_fn(match)+'<wbr/>');start=match_index+match.length;str_remaining=str.substring(start);}}
if(str_remaining){ret_arr.push(txt_fn(str_remaining));}
return ret_arr.join('');}
function text_get_hyperlinks(str){if(typeof(str)!='string'){return[];}
return str.match(/(?:(?:ht|f)tps?):\/\/[^\s<]*[^\s<\.)]/ig);}
function html_hyperlink(str,txt_fn,url_fn,reroute){var accepted_delims={'<':'>','*':'*','{':'}','[':']',"'":"'",'"':'"','#':'#','+':'+','-':'-','(':')'};if(typeof(str)=='undefined'||!str.toString){return'';}
if(typeof txt_fn!='function'){txt_fn=htmlize;}
if(typeof url_fn!='function'){url_fn=htmlize;}
var str=str.toString();var http_matches=text_get_hyperlinks(str);var start=0;var str_remaining=str;var ret_arr=[];var str_remaining=str;if(http_matches){var post_form_elem=reroute?ge('post_form_id'):null;var post_form_id=post_form_elem?post_form_elem.value:'';for(var i=0;i<http_matches.length;i++){var http_url=http_matches[i];var http_index=start+str_remaining.indexOf(http_url);var str_len=http_url.length;var non_url=str.substring(start,http_index);if(non_url){ret_arr.push(txt_fn(non_url));}
var trailing='';if(http_index>0){var delim=str[http_index-1];if(typeof accepted_delims[delim]!='undefined'){var end_delim=accepted_delims[delim];var end_delim_index=http_url.indexOf(end_delim);if(end_delim_index!=-1){trailing=txt_fn(http_url.substring(end_delim_index));http_url=http_url.substring(0,end_delim_index);}}}
var http_str=url_fn(http_url);if(reroute){var http_url_quote_escape="http://www.facebook.com/l.php?u="+
URI.encodeComponent(http_url)+'&h='+post_form_id;}else{var http_url_quote_escape=http_url.replace(/"/g,'%22');}
ret_arr.push('<a href="'+http_url_quote_escape+'" target="_blank" rel="nofollow">'+
http_str+'</a>'+trailing);start=http_index+str_len;str_remaining=str.substring(start);}}
if(str_remaining){ret_arr.push(txt_fn(str_remaining));}
return ret_arr.join('');}
function nl2br(text){if(typeof(text)=='undefined'||!text.toString){return'';}
return text.toString().replace(/\n/g,'<br />');}
function is_email(email){return/^([\w!.%+\-])+@([\w\-])+(?:\.[\w\-]+)+$/.test(email);}

function ChatTab(chatDisplay,id,name,firstName,numMissed,missedTime){this.chatDisplay=chatDisplay;this.id=id;this.name=name;this.messageTypes={'msg':{visible:true,user:true,preserveHistory:false},'mf':{visible:true,user:false,preserveHistory:true},'online':{visible:true,user:false,preserveHistory:true}};this.arbiter=new Arbiter();Arbiter.inform(ChatTab.GLOBALMESSAGETYPE.NEWTAB,{tab:this});this.tabRef='chatDisplay.tabs['+this.id+']';this.firstName=firstName;this.tabDisabled=false;this.numMissed=numMissed;this.missedTime=missedTime;this.focused=false;this.lastLogItem=null;this.historyLoaded=false;this.pendingSentMsgs=[];this.failedSentMsgs=[];this.sendingDisplayMsgID=null;this.historyRequestID=0;this.bounceAnimation=null;this.convTextProcessor=this._processConvText.bind(this);this.convTextEmoteProcessor=this._processConvTextEmote.bind(this);this.statusTextProcessor=this._processStatusText.bind(this);this.minTextHeight=presence.inPopoutWindow?this.minTextHeightPopout:this.minTextHeightPopin;this.typingState=this.INACTIVE;this.typingRemoteState=this.INACTIVE;this.typingLastKeystrokeAt=null;this.typingNotifyTimer=null;this.typingCheckTimer=null;this.lastMessageAt=null;this.lastMessageHadOfflineResponse=false;this._buildUI();this.addPopoutChat(id);this.loadData();this.handleVisibility(true);if(presence.inVideoChat){this.videochat_swf=ge(CallCenter.call(this.id)._callSWFID());}}
copy_properties(ChatTab,{GLOBALMESSAGETYPE:{NEWTAB:'chattabs/newtab'},TABMESSAGETYPE:{HISTORYBEGIN:'chattabs/historybegin',HISTORYITER:'chattabs/historyiter',HISTORYEND:'chattabs/historyend',CREATETAB:'chattabs/createtab',RECEIVEMSG:'chattabs/receivemsg',DISPLAYCHAT:'chattabs/displaychat',USERINFOUPDATED:'chattabs/userinfoupdated'}});copy_properties(ChatTab.prototype,{pendingToLogCompareWindow:60000,sendingCheckDelay:55000,sendingDisplayDelay:4000,convWrapLimit:30,statusWrapLimit:22,handleWidth:136,popinWidth:226,popinHeight:250,popoutWidthOffset:180,flPopoutWidthOffset:200,minTextHeightPopin:13,minTextHeightPopout:26,maxTextHeight:77,msgBunchTime:60000,maxHandleLen:16,maxTitleLen:20,bounceDuration:50,bounceOrgPosition:-3,typingNotifyDelay:1000,typingKeystrokeExpiry:7000,INACTIVE:0,TYPING:1,isTabVisible:function(){return this.focused&&(presence.inPopoutWindow||!presence.poppedOut)&&(this.chatInfo.clientWidth>20);},start:function(){this._popSendQueue();},restart:function(){this.getHistory(true);this.handleResize.bind(this).defer();},loadData:function(){if(this.chatDisplay.userInfos[this.id]){this.updateUserInfo();this.arbiter.inform(ChatTab.TABMESSAGETYPE.USERINFOUPDATED,{userInfo:this.chatDisplay.userInfos[this.id]});}else{this.chatDisplay.loadInitialUserInfo(this.id,this.name,this.firstName);}
if(this.chatDisplay.histories[this.id]){this._setHistory(this.chatDisplay.histories[this.id]);}},_onHistoryInitialHandler:function(requestID,response){if(requestID!=this.historyRequestID){presence.debug("tabs: got old history async, ignoring");return false;}},_onHistoryResponse:function(fromRestart,response){var historyPayload=response.getPayload();var userInfo=historyPayload.userInfo;var logItems=historyPayload.history;this.chatDisplay.userInfos[this.id]=userInfo;buddyList.updateItemDisplay(this.id);this.updateUserInfo();this.arbiter.inform(ChatTab.TABMESSAGETYPE.USERINFOUPDATED,{userInfo:userInfo});if(historyPayload.fls){buddyList.setFlids(this.id,historyPayload.fls);}
if(historyPayload.overlay){buddyList.addOverlayInfo(historyPayload.overlay);}
if(!logItems){this._showHistoryError();return;}
var poppedSendQueue=false;if(this.pendingSentMsgs.length>0&&logItems.length>0){var pendingSendMsg=this.pendingSentMsgs[0];for(var i=logItems.length-1;i>=0;i--){var logItem=logItems[i];if(logItem.to==this.id){var timeDiff=Math.abs(pendingSendMsg.time-logItem.time);if(timeDiff<this.pendingToLogCompareWindow&&pendingSendMsg.text==logItem.msg.text){this._setMsgInfoMarkup(pendingSendMsg.msgID,'');this.pendingSentMsgs.shift();this._popSendQueue();this.poppedSendQueue=true;break;}}}
var lastLogTime=logItems[logItems.length-1].time;for(var i=0;i<this.pendingSentMsgs.length;i++){var pendingSendMsg=this.pendingSentMsgs[i];if(pendingSendMsg.time<lastLogTime){pendingSendMsg.time=(++lastLogTime);}}}
var pendingLogMsgs=this.chatDisplay.histories[this.id];if(pendingLogMsgs){if(logItems.length>0){var lastLogItem=logItems[logItems.length-1];var lastTime=lastLogItem.time;for(var i=0;i<pendingLogMsgs.length;i++){var logItem=pendingLogMsgs[i];if(logItem.time>lastTime){logItems.push(logItem);}}}else{logItems=pendingLogMsgs;}}
this._setHistory(logItems);this.chatDisplay.histories[this.id]=logItems;if(fromRestart){if(!poppedSendQueue){this._popSendQueue();}}},_onHistoryError:function(response){this._showHistoryError();},_showHistoryError:function(){show(this.chatHistoryError);this.scrollToBottom();},getHistory:function(fromRestart){var requestID=++(this.historyRequestID);new AsyncRequest().setInitialHandler(this._onHistoryInitialHandler.bind(this,requestID)).setHandler(this._onHistoryResponse.bind(this,fromRestart)).setErrorHandler(this._onHistoryError.bind(this)).setTransportErrorHandler(this._onHistoryError.bind(this)).setMethod('GET').setReadOnly(true).setOption('suppressErrorAlerts',true).setData({'id':this.id}).setURI('/ajax/chat/history.php').send();},_setHistory:function(logItems){this.lastLogItem=null;var markup='';var sentIndex=0;var sentMsgs=[];Array.prototype.push.apply(sentMsgs,this.failedSentMsgs);Array.prototype.push.apply(sentMsgs,this.pendingSentMsgs);var prevItemTime=0;var anyVisibleMessages=false;this.arbiter.inform(ChatTab.TABMESSAGETYPE.HISTORYBEGIN);for(var i=0;i<logItems.length;i++){var logItem=logItems[i];if(typeof this.messageTypes[logItem.type]==undefined){continue;}
if(!this.messageTypes[logItem.type].preserveHistory){anyVisibleMessages=true;}
for(;sentIndex<sentMsgs.length;sentIndex++){var sentMsg=sentMsgs[sentIndex];if(!this.messageTypes[sentMsg.type].preserveHistory){anyVisibleMessages=true;}
if(sentMsg.time>prevItemTime&&sentMsg.time<=logItem.time){if(this.messageTypes[sentMsg.type].visible){markup+=this._renderMsg(presence.user,this.id,sentMsg.time,sentMsg,sentMsg.msgID,sentMsg.isError,sentMsg.infoMarkup);}}else{break;}}
if(logItem.type=='msg'){markup+=this._renderMsg(logItem.from,logItem.to,logItem.time,logItem.msg);}else if(logItem.type=='mf'&&statusControl.getSetting('minifeed')){markup+=this._renderMinifeed(logItem.from,logItem.time,logItem.markup);}else if(logItem.type=='online'){markup+=this._renderVisibilityChange(logItem.time,logItem.text);}else{this.arbiter.inform(ChatTab.TABMESSAGETYPE.HISTORYITER,{item:logItem});}
this.lastLogItem=logItem;prevItemTime=logItem.time;}
this.arbiter.inform(ChatTab.TABMESSAGETYPE.HISTORYEND);for(;sentIndex<sentMsgs.length;sentIndex++){var sentMsg=sentMsgs[sentIndex];if(this.messageTypes[sentMsg.type].visible){markup+=this._renderMsg(presence.user,this.id,sentMsg.time,sentMsg,sentMsg.msgID,sentMsg.isError,sentMsg.infoMarkup);this.lastLogItem={'type':sentMsg.type,'from':presence.user,'to':this.id,'time':sentMsg.time,'msg':sentMsg};}}
hide(this.chatHistoryError);this.chatConvContent.innerHTML=markup;this.scrollToBottom();if(this.actions.setVisible('clearHistory',anyVisibleMessages).refresh()){this.handleResize();}
this.historyLoaded=true;},_onClearHistoryError:function(response){var chat=_tx("Chat");presence.showAsyncError(response,_tx("Couldn't clear {Chat} history",{'Chat':chat}));CSS.removeClass(this.tabHandle,'history_clearing');},_onClearHistoryResponse:function(response){CSS.removeClass(this.tabHandle,'history_clearing');var newHistory=[];for(var i=0;i<this.chatDisplay.histories[this.id].length;i++){var item=this.chatDisplay.histories[this.id][i];if(typeof this.messageTypes[item.type]=='undefined'||this.messageTypes[item.type].preserveHistory){newHistory.push(item);}}
this._setHistory(this.chatDisplay.histories[this.id]=newHistory);},clearHistory:function(){CSS.addClass(this.tabHandle,'history_clearing');new AsyncRequest().setHandler(this._onClearHistoryResponse.bind(this)).setErrorHandler(this._onClearHistoryError.bind(this)).setTransportErrorHandler(this._onClearHistoryError.bind(this)).setData({'clear_history_id':this.id}).setURI(this.chatDisplay.settingsURL).send();},_isCurrentPendingSend:function(msgID){return(this.pendingSentMsgs.length>0&&msgID==this.pendingSentMsgs[0].msgID);},_onSendInitialHandler:function(response){this.lastMessageHadOfflineResponse=false;},_onSendResponse:function(msgID,response){var payload=response.getPayload();if(this._isCurrentPendingSend(msgID)){var pendingMsg=this.pendingSentMsgs[0];pendingMsg.asyncSuccess=true;}
if(payload&&payload.warning){var warningMarkup=this._renderMsgWarningMarkup(payload.warning.title+'<br />'+payload.warning.body);this._setMsgInfoMarkup(msgID,warningMarkup,'msg_warning');}},_onSendTransportError:function(msgID,response){if(!this._isCurrentPendingSend(msgID)){return;}},_onSendError:function(msgID,response){if(!this._isCurrentPendingSend(msgID)){return;}
var payload=response.getPayload();var error=response.getError();var desc=presence.getErrorDescription(response);if(error==kError_Chat_SendOtherNotAvailable){this.lastMessageHadOfflineResponse=true;buddyList.setUnavailable(this.id);for(var i=0;i<this.pendingSentMsgs.length;i++){var msg=this.pendingSentMsgs[i];var msgElement=ge('msg_'+this.id+'_'+msg.msgID);if(msgElement){var onclick=sprintf('onclick="message_dialog.show(%d, %e, %e); return false;"',this.id,'',msg.text);var link=presence.renderLink(this.chatDisplay.messageURL+'&id='+this.id,_tx("send as a message"),onclick);var markup=_tx("{message} ({=send as a message})",{'message':this._renderMsgHtmlize(msg),'=send as a message':link});set_inner_html(msgElement,markup);}}}
else if(error==kError_Chat_NotAvailable){this.lastMessageHadOfflineResponse=true;statusControl.setVisibility(false);presence.doSync();}
else if(error==kError_Chat_TooManyMessages){desc=payload.error.title;new ErrorDialog().showError(payload.error.title,payload.error.body);}
else{new ErrorDialog().showError(response.errorSummary,response.errorDescription);}
this._sendErrorAll(desc);},_renderMsgWarningMarkup:function(desc){return'<p class="chat_notice chat_msg_warning">'+
desc+'</p>';},_renderMsgErrorMarkup:function(desc){return'<p class="chat_notice chat_msg_not_sent">'+
desc+'</p>';},_sendErrorAll:function(desc){var errorMarkup=this._renderMsgErrorMarkup(desc);var isFirst=true;while(this.pendingSentMsgs.length){var pendingMsg=this.pendingSentMsgs.shift();pendingMsg.isError=true;if(isFirst){pendingMsg.infoMarkup=errorMarkup;}
this._setMsgInfoMarkup(pendingMsg.msgID,errorMarkup,'msg_error');this.failedSentMsgs.push(pendingMsg);isFirst=false;errorMarkup='';}},_sendError:function(msgID,desc){var errorMarkup=this._renderMsgErrorMarkup(desc);var pendingMsg=this.pendingSentMsgs.shift();pendingMsg.isError=true;pendingMsg.infoMarkup=errorMarkup;this._setMsgInfoMarkup(msgID,errorMarkup,'msg_error');this.failedSentMsgs.push(pendingMsg);this._popSendQueue();this._bumpSendingMessageDisplay(msgID);},_createMessage:function(text,type){var msgID=rand32()+1;var time=presence.getTime();if(this.lastLogItem&&time<this.lastLogItem.time){time=this.lastLogItem.time+1;}
var pendingMsg={text:text,msgID:msgID,type:type,time:time,asyncSuccess:false,isError:false,errorMarkup:''};return pendingMsg;},_flushSmallQueue:function(){if(this.pendingSentMsgs.length==1){this._sendMessage(this.pendingSentMsgs[0],!channelManager.iframeEverLoaded);}},_updateChatActivity:function(pendingMsg,msg){this.lastLogItem={'type':pendingMsg.type,'from':presence.user,'to':this.id,'time':pendingMsg.time,'msg':msg};this.chatDisplay.chatActivityTime=(new Date()).getTime();presence.doSync();},sendInput:function(){var text=this.chatInput.value;if(!text||!text.match(/[^\s]/)){return;}
if(this.actions.setVisible('clearHistory',true).refresh()){this.handleResize();}
this.chatInput.value='';var pendingMsg=this._createMessage(text,'msg');this.pendingSentMsgs.push(pendingMsg);this._flushSmallQueue();var msg={'text':text};var sendMarkup=this._renderMsg(presence.user,this.id,pendingMsg.time,msg,pendingMsg.msgID);this._addConvMarkup(sendMarkup);this._updateChatActivity(pendingMsg,msg);this._resetTypingState();},notifyTypingState:function(state){if(state!=this.typingRemoteState){this.typingRemoteState=state;presence.debug('tabs: notifyTyping('+state+')');if(!channelManager.iframeEverLoaded){return;}
var data={'typ':state,'to':this.id};new AsyncRequest().setHandler(bagofholding).setErrorHandler(bagofholding).setTransportErrorHandler(bagofholding).setData(data).setURI('/ajax/chat/typ.php').send();}},_sendMessage:function(pendingMsg,timeoutOnly){pendingMsg.time=presence.getTime();if(this.lastLogItem&&pendingMsg.time<this.lastLogItem.time){pendingMsg.time=this.lastLogItem.time+1;}
clearTimeout(this.sendingDisplayTimeout);clearTimeout(this.checkMessageSentTimeout);this.sendingDisplayTimeout=setTimeout(this._checkMessageSentShort.bind(this,pendingMsg.msgID),this.sendingDisplayDelay);this.checkMessageSentTimeout=setTimeout(this._checkMessageSentLong.bind(this,pendingMsg.msgID),this.sendingCheckDelay);if(timeoutOnly){return;}
var msgID=pendingMsg.msgID;var history=this.chatDisplay.histories[this.id];var lastConvoTime=null;if(history){for(var i=history.length-1;i>0;i--){if(history[i].type=='msg'){lastConvoTime=history[i].time;break;}}}
var sendData={msg_id:msgID,client_time:pendingMsg.time,to:this.id,num_tabs:this.chatDisplay.numTabs,pvs_time:lastConvoTime};if(pendingMsg.type=='video'){sendData.action=pendingMsg.action;sendData.uid=pendingMsg.uid;var endpoint='/ajax/chat/video.php';}else{sendData.msg_text=pendingMsg.text;var endpoint='/ajax/chat/send.php';}
new AsyncRequest().setInitialHandler(this._onSendInitialHandler.bind(this)).setHandler(this._onSendResponse.bind(this,msgID)).setErrorHandler(this._onSendError.bind(this,msgID)).setTransportErrorHandler(this._onSendTransportError.bind(this,msgID)).setData(sendData).setURI(endpoint).send();},_popSendQueue:function(){if(this.pendingSentMsgs.length==0){return;}
var pendingMsg=this.pendingSentMsgs[0];this._sendMessage(pendingMsg);},_checkMessageSentShort:function(msgID){if(this._isCurrentPendingSend(msgID)){this._setSendingDisplay(this.pendingSentMsgs[0]);}},_checkMessageSentLong:function(msgID){if(this._isCurrentPendingSend(msgID)){if(this.pendingSentMsgs[0].asyncSuccess){this._sendErrorAll(_tx("Could not connect to Facebook {Chat} at this time.",{'Chat':_tx("Chat")}));}else if(channelManager.iframeIsLoaded){presence.error('tabs: send took too long; resending and invalidating old one');this._sendMessage(this.pendingSentMsgs[0]);}else{presence.error("tabs: send took too long, but iframe isn't yet loaded.  will check again later.");setTimeout(this._checkMessageSentLong.bind(this,this.pendingSentMsgs[0].msgID),this.sendingCheckDelay);}}},_bumpSendingMessageDisplay:function(msgID){if(msgID==this.sendingDisplayMsgID){this._setMsgInfoMarkup(msgID,'');if(this.pendingSentMsgs.length>0){this._setSendingDisplay(this.pendingSentMsgs[0]);}}},_setSendingDisplay:function(pendingMsg){this.sendingDisplayMsgID=pendingMsg.msgID;pendingMsg.infoMarkup='<p class="chat_notice sending">'+
_tx("Sending:")+'</p>';this._setMsgInfoMarkup(pendingMsg.msgID,pendingMsg.infoMarkup);},_setMsgInfoMarkup:function(pendingMsgID,markup,msgClass){var msgElement=ge('msg_'+this.id+'_'+pendingMsgID);if(!msgElement){return;}
var infoElement=ge('pending_'+this.id+'_'+pendingMsgID);if(infoElement){infoElement.innerHTML=markup;}
if(msgClass){CSS.addClass(msgElement,msgClass);}
this.scrollToBottom();},updateUserInfo:function(){var userInfo=this.chatDisplay.userInfos[this.id];this.chatInfoPic.src=userInfo.thumbSrc;var statusMarkup='&nbsp;';var dateMarkup='&nbsp;';var status;if(status=userInfo.status){var time=userInfo.statusTimeRel;statusMarkup=html_hyperlink(status,this.statusTextProcessor,this.statusTextProcessor);dateMarkup=time;}
if(ua.ie()<7){dateMarkup+='<br />&nbsp;<br />&nbsp;';}
this.chatInfoStatusTime.innerHTML=dateMarkup;this.chatInfoStatus.innerHTML=statusMarkup;CSS.removeClass(this.chatInfo,'hidden');},updateStatus:function(status,time,timeRel){var userInfo=this.chatDisplay.userInfos[this.id];userInfo.status=status;userInfo.statusTime=time;userInfo.statusTimeRel=timeRel;this.chatDisplay.userInfos[this.id]=userInfo;buddyList.updateItemDisplay(this.id);this.updateUserInfo();},tabHitAreaOnClick:function(){if(this.suppressHeaderCollapse){return;}
if(!presence.inVideoChat){if(presence.inPopoutWindow){this.chatDisplay.focusTab(this.id,this.name,this.firstName);}else{this.chatDisplay.toggleTab(this.id,this.name,this.firstName);}}
this.chatDisplay.doStopBlinking();},showChat:function(){if(presence.inVideoChat){animation(this.chatWrapper).to('right','0').duration(300).ease(animation.ease.end).go();animation(this.videochat_swf).to('marginRight','226px').duration(300).ease(animation.ease.end).go();this.arbiter.inform(ChatTab.TABMESSAGETYPE.DISPLAYCHAT,{visible:true});}},tabXOnClick:function(e){if(presence.inVideoChat){animation(this.chatWrapper).to('right','-228px').duration(300).ease(animation.ease.end).go();animation(this.videochat_swf).to('marginRight','0').duration(300).ease(animation.ease.end).go();this.arbiter.inform(ChatTab.TABMESSAGETYPE.DISPLAYCHAT,{visible:false});}else{this.chatDisplay.closeTab(this.id);this.chatDisplay.doStopBlinking();}
$E(e).kill();},headerLinkMouseOver:function(){CSS.addClass(this.chatHeader,'suppress_hover');this.suppressHeaderCollapse=true;},headerLinkMouseOut:function(){CSS.removeClass(this.chatHeader,'suppress_hover');this.suppressHeaderCollapse=false;},chatConvOnMouseDown:function(event){event=$E(event);if(event.button!=0){return;}
this.chatDisplay.doStopBlinking();},chatConvOnMouseUp:function(){if(DOM.getSelectionSupported()&&(DOM.getSelection()=='')){this.focusChatInput();}},focusChatInput:function(){if(!this.tabDisabled&&this.isTabVisible()){this.chatInput.focus();}},_buildUI:function(){var tabCountID='this_count_'+this.id;var chatWindowWrapperID='chat_window_wrapper_'+this.id;var chatConvID='chat_conv_'+this.id;var chatHistoryErrorID='chat_history_error_'+this.id;var chatHeaderID='chat_header_'+this.id;var chatInfoID='chat_info_'+this.id;var chatInfoLinkID='chat_info_link_'+this.id;var chatInfoPicID='chat_info_pic_'+this.id;var chatInfoStatusID='chat_info_status_'+this.id;var chatInfoStatusTimeID='chat_info_status_time_'+this.id;var chatConvContentID='chat_conv_content_'+this.id;var chatInputID='chat_input_'+this.id;var chatShadowInputID='chat_shadow_input_'+this.id;var chatToolboxID='chat_toolbox_'+this.id;var chat=_tx("Chat");var handleName=htmlize(this.trimName(this.maxHandleLen));var titleName=htmlize(this.trimName(this.maxTitleLen));var chatHeaderLinkMouseOver=' onmouseover="'+this.tabRef+'.headerLinkMouseOver();" onmouseout="'+this.tabRef+'.headerLinkMouseOut();"';var profileURL=this.chatDisplay.profileURL+'?id='+this.id;var chatHeaderPicLink=presence.renderLink(profileURL,'<img class="chat_info_pic" id="'+chatInfoPicID+'" title="View Profile" style="display:block;">',chatHeaderLinkMouseOver);var chatHeaderNameLink=presence.renderLink(profileURL,titleName,chatHeaderLinkMouseOver);var tabMarkupArr=['<div class="tab_button_div" ','onmouseover="CSS.addClass(this, \'hover\')" ','onmouseout="CSS.removeClass(this, \'hover\')">','<div title="',_tx("Show\/Hide {Chat} Window",{'Chat':chat}),'" ','class="tab_hit_area" ','onclick="',this.tabRef,'.tabHitAreaOnClick()">','<div class="tab_name">',handleName,'</div>','</div>','<div class="tab_count" id="',tabCountID,'"></div>','<div title="',_tx("Close {Chat} Window",{'Chat':chat}),'" ','class="tab_x" ','onclick="',this.tabRef,'.tabXOnClick(event)" ','onmouseover="CSS.addClass(this, \'hover\')" ','onmouseout="CSS.removeClass(this, \'hover\')">','</div>','<div class="chat_window_wrapper" id="',chatWindowWrapperID,'">','<div class="chat_window">','<div class="chat_header" id="',chatHeaderID,'" onclick="',this.tabRef,'.tabHitAreaOnClick()">','<div class="header_buttons">','<a title="',_tx("Close {Chat} Window",{'Chat':chat}),'" ','class="close" ','onmouseover="CSS.addClass($(\'',chatHeaderID,'\'), \'suppress_hover\')" ','onmouseout="CSS.removeClass($(\'',chatHeaderID,'\'), \'suppress_hover\')" ','onclick="',this.tabRef,'.tabXOnClick(event)">','</a>','<a title="',_tx("Hide {Chat} Window",{'Chat':chat}),'" ','class="minimize">','</a>','</div>',chatHeaderPicLink,'<div class="chat_header_name">',chatHeaderNameLink,'</div>','</div>','<div class="chat_info" id="',chatInfoID,'">','<span class="chat_info_status" id="',chatInfoStatusID,'"></span><wbr />','<span class="chat_info_status_time" id="',chatInfoStatusTimeID,'"></span>','</div>','<div id="',chatToolboxID,'" class="toolbox">','<div class="chat_actions"></div>','</div>','<div class="chat_conv" id="',chatConvID,'" ','onmousedown="',this.tabRef,'.chatConvOnMouseDown(event)" ','onmouseup="',this.tabRef,'.chatConvOnMouseUp()">','<div class="chat_notice" id="',chatHistoryErrorID,'" style="display:none">',_tx("Couldn't retrieve chat history"),'</div>','<div class="chat_conv_content" id="',chatConvContentID,'"></div>','</div>','<div class="chat_input_div">','<textarea class="chat_shadow_input" id="',chatShadowInputID,'"></textarea>','<div class="chat_input_icon"></div>','<textarea class="chat_input" id="',chatInputID,'" ','onclick="chatDisplay.doStopBlinking()" ','onkeydown="return ',this.tabRef,'.inputKeyDown(event)" ','onkeypress="return ',this.tabRef,'.inputKeyPress(event)" ','></textarea>','</div>','</div>','</div>','</div>'];this.tabHandle=document.createElement('div');var chatTabBar=ge('chat_tab_bar');var otherTab=null;for(var id in this.chatDisplay.tabs){otherTab=this.chatDisplay.tabs[id];}
if(otherTab){chatTabBar.insertBefore(this.tabHandle,otherTab.tabHandle);}else{chatTabBar.appendChild(this.tabHandle);}
this.tabHandle.id='tab_handle_'+this.id;CSS.setClass(this.tabHandle,'tab_handle');this.tabHandle.style.width=this.handleWidth+'px';this.tabHandle.style.display='block';this.tabHandle.innerHTML=tabMarkupArr.join('');this.tabCount=ge(tabCountID);this.chatWrapper=ge(chatWindowWrapperID);this.chatConv=ge(chatConvID);this.chatHistoryError=ge(chatHistoryErrorID);this.chatHeader=ge(chatHeaderID);this.chatInfo=ge(chatInfoID);this.chatInfoLink=ge(chatInfoLinkID);this.chatInfoPic=ge(chatInfoPicID);this.chatInfoStatus=ge(chatInfoStatusID);this.chatInfoStatusTime=ge(chatInfoStatusTimeID);this.chatConvContent=ge(chatConvContentID);this.chatInput=ge(chatInputID);this.chatShadowInput=ge(chatShadowInputID);this.toolbox=ge(chatToolboxID);var chatActions=DOM.find(this.toolbox,'div.chat_actions');this.actions=new ChatTabActions(chatActions);this.actions.appendAction('clearHistory',_tx("Clear {Chat} History",{'Chat':chat}),this.clearHistory.bind(this));this.arbiter.inform(ChatTab.TABMESSAGETYPE.CREATETAB,{toolbox:this.toolbox});this.actions.refresh();this.popoutChatTabs=presence.inPopoutWindow?ge('open_chats'):null;this.adjustWrapperBottom();this._updateNumMissedDisplay();},adjustWrapperBottom:function(){if(presence.isFF2){var holderBottom=presence.getHolderBottomPosition();CSS.setStyle(this.chatWrapper,'bottom',(holderBottom+24)+'px');}},show:function(){this.tabHandle.style.display='block';},hide:function(){this.tabHandle.style.display='none';},inputKeyDown:function(event){event=$E(event);this.chatDisplay.doStopBlinking();if(this.chatDisplay.gatedFeatures.typ_send){this._updateTyping.bind(this).defer();}
if(event.keyCode==KEYS.RETURN&&!event.shiftKey){if(this.chatInput.value){this.sendInput();}}
if(event.keyCode==KEYS.DELETE||event.keyCode==KEYS.BACKSPACE){this.handleResize.bind(this).defer();}},inputKeyPress:function(event){event=$E(event);this.handleResize.bind(this).defer();if(event.keyCode==KEYS.RETURN&&!event.shiftKey){event.returnValue=false;return false;}},_updateTyping:function(){var state=this.typingState;if(this.chatInput.value.length==0){if(state==this.INACTIVE){}else{this._typingTransition(this.INACTIVE);}}
else if(state==this.TYPING){this._recordKeystroke();}
else if(state==this.INACTIVE){this._typingTransition(this.TYPING);this._recordKeystroke();}},_recordKeystroke:function(){this.typingLastKeystrokeAt=new Date();if(!this.typingCheckTimer){this.typingCheckTimer=setTimeout(this._checkTyping.bind(this),this.typingKeystrokeExpiry);}},_checkTyping:function(){var expiresAt=this.typingLastKeystrokeAt.valueOf()+this.typingKeystrokeExpiry;var now=new Date().valueOf();if(now>expiresAt){this._typingTransition(this.INACTIVE);}else{clearTimeout(this.typingCheckTimer);this.typingCheckTimer=setTimeout(this._checkTyping.bind(this),expiresAt-now+10);}},_typingTransition:function(newState){clearTimeout(this.typingCheckTimer);this.typingCheckTimer=null;typingLastKeystrokeAt=null;presence.debug('typing:'+this.typingState+' -> '+newState);this.typingState=newState;clearTimeout(this.typingNotifyTimer);this.typingNotifyTimer=setTimeout(this.notifyTypingState.bind(this,newState),this.typingNotifyDelay);},_resetTypingState:function(){presence.debug('typing: ** RESET **');this.typingState=this.INACTIVE;this.typingRemoteState=this.INACTIVE;this.typingLastKeystrokeAt=null;clearTimeout(this.typingNotifyTimer);this.typingNotifyTimer=null;clearTimeout(this.typingCheckTimer);this.typingCheckTimer=null;},trimName:function(maxLength){var name=this.name;if(name.length>maxLength){name=name.substring(0,maxLength-2)+'...';}
return name;},handleVisibility:function(onload){var justCameOnline=statusControl.visibility;if(statusControl.visibility){this._enableTab(true,false,justCameOnline,onload);}else{this._disableTab(true,justCameOnline,onload);}
this.handleBuddyAvailability(!onload&&justCameOnline,onload);},handleBuddyAvailability:function(justCameOnline,onload){if(!statusControl.visibility){return;}
var availability=buddyList.getAvailability(this.id);if(availability){this._enableTab(false,availability.i,justCameOnline,onload);}else{this._disableTab(false,justCameOnline,onload);}},_enableTab:function(isYou,isIdle,justCameOnline,onload){onload=onload||false;var wasDisabled=this.tabDisabled;this.tabDisabled=false;if(presence.inPopoutWindow){CSS.removeClass(this.popoutTab,'disabled');CSS.conditionClass(this.popoutTab,'idle',isIdle);}
CSS.removeClass(this.tabHandle,'disabled');CSS.conditionClass(this.tabHandle,'idle',isIdle);if((isYou&&!onload)||(!isYou&&wasDisabled&&!justCameOnline)){this._newVisibilityChange(isYou,onload,true);}},_disableTab:function(isYou,justCameOnline,onload){onload=onload||false;var wasDisabled=this.tabDisabled;this.tabDisabled=true;if(presence.inPopoutWindow){CSS.addClass(this.popoutTab,'disabled');CSS.removeClass(this.popoutTab,'idle');}
CSS.addClass(this.tabHandle,'disabled');CSS.removeClass(this.tabHandle,'idle');if((isYou||onload||!wasDisabled)&&!this.lastMessageHadOfflineResponse&&!justCameOnline){this._newVisibilityChange(isYou,onload,false);}},handleResize:function(){var newConvWidth;var newTextWidth;var newNotAvailWidth;var newTabHeight;var heightExtra=31;var toolboxChildren=this.toolbox.childNodes;for(var i=0;i<toolboxChildren.length;++i){var child=toolboxChildren[i];if(shown(child)){heightExtra+=Vector2.getElementDimensions(child).y;}}
if(presence.inVideoChat||presence.inPopoutWindow){var chatInfoMinHeight=33;heightExtra+=Vector2.getElementDimensions(this.chatInfo).y-chatInfoMinHeight;}
if(presence.inVideoChat){var videoChatWidth=226;newConvWidth=videoChatWidth;newTextWidth=videoChatWidth-28;newNotAvailWidth=videoChatWidth-16;newTabHeight=presence.popoutHeight-77;}else if(presence.inPopoutWindow){var popoutWidth=(presence.popoutWidth>330)?presence.popoutWidth:330;if(presence.sitevars.FL_LIVE){newConvWidth=popoutWidth-this.flPopoutWidthOffset;newTextWidth=popoutWidth-this.flPopoutWidthOffset-28;newNotAvailWidth=popoutWidth-this.flPopoutWidthOffset-16;}else{newConvWidth=popoutWidth-this.popoutWidthOffset;newTextWidth=popoutWidth-this.popoutWidthOffset-28;newNotAvailWidth=popoutWidth-this.popoutWidthOffset-16;}
newTabHeight=presence.popoutHeight-77;}else{newConvWidth=this.popinWidth;newTextWidth=this.popinWidth-28;newNotAvailWidth=this.popinWidth-8;newTabHeight=this.popinHeight;}
this.chatShadowInput.style.width=this.chatInput.style.width=newTextWidth+'px';this.chatShadowInput.value=this.chatInput.value;var textHeight=this.chatShadowInput.scrollHeight;if(!textHeight||presence.isOpera){textHeight=this.minTextHeight;if(this.chatInput.value){var re=new RegExp('([\n]|[^\n]{'+parseInt(newTextWidth/8)+'})','g');var matches=this.chatInput.value.match(re);if(matches){textHeight=(matches.length+1)*this.minTextHeight;}}
if(presence.isSafari2){textHeight+=8;}}
if(ua.ie()){textHeight-=6;}
if(textHeight>this.maxTextHeight){textHeight=this.maxTextHeight;}else if(textHeight<this.minTextHeight){textHeight=this.minTextHeight;}
if(presence.isSafari2){heightExtra-=7;}else if(ua.ie()<7){if(this.tabDisabled){heightExtra+=4;}}
if(!presence.inPopoutWindow||ua.ie()||!presence.sitevars.FL_LIVE){this.chatHeader.style.width=newConvWidth+'px';this.chatInfo.style.width=(newConvWidth-55)+'px';this.chatConv.style.width=newConvWidth+'px';}
this.chatInput.style.height=textHeight+'px';this.chatConv.style.height=Math.max(0,(newTabHeight-heightExtra-textHeight))+'px';this.scrollToBottom();},isUserScrolled:function(){return(this.chatConv.scrollHeight>this.chatConv.scrollTop+this.chatConv.clientHeight);},scrollToBottom:function(){this.chatConv.scrollTop=this.chatConv.scrollHeight;},unfocus:function(){this.focused=false;CSS.removeClass(this.tabHandle,'focused');},focus:function(hidden,chatDisplayLoaded){if(this.focused){return;}
CSS.addClass(this.tabHandle,'focused');this.focused=true;if(!hidden){this._onFocusUIActions();setTimeout(this._onFocusUIActions.bind(this),100);}
if(!this.historyLoaded){this.getHistory(false);}
this._updateNumMissed(0);this._stopBounce();},_onFocusUIActions:function(){this.handleResize();if(ua.ie()<7&&presence.inPopoutWindow){this.chatWrapper.style.top='67px';}
this.focusChatInput();},_startBounce:function(){if(presence.isFF2&&presence.isWindows){return;}
this.bounceAnimation=animation(this.tabCount).to('top',-11).duration(this.bounceDuration+40).checkpoint().to('top',this.bounceOrgPosition).duration(this.bounceDuration).checkpoint().to('top',-11).duration(this.bounceDuration+40).checkpoint().to('top',this.bounceOrgPosition).duration(this.bounceDuration).checkpoint().to('top',-7).duration(this.bounceDuration).checkpoint().to('top',-5).duration(this.bounceDuration).checkpoint().to('top',this.bounceOrgPosition).duration(this.bounceDuration).checkpoint().go();},_stopBounce:function(){if(this.bounceAnimation){this.bounceAnimation.stop();this.bounceAnimation=null;}},close:function(){this.tabHandle.parentNode.removeChild(this.tabHandle);this.closePopoutChat();},addPopoutChat:function(id){if(this.popoutChatTabs){this.popoutTab=document.createElement('div');this.popoutTab.id='popout_tab_'+this.id;this.popoutTab.className='popout_tab_button'
+(this.chatDisplay.gatedFeatures.typ_show?'':' vanilla')
+((id==this.chatDisplay.focused)?' highlight':'');var popoutCountID='popout_tab_count_'+this.id;this.popoutTab.innerHTML='<div class="popout_tab_hit_area" onclick="'+this.tabRef+'.tabHitAreaOnClick();">'+'<div id="'+popoutCountID+'" class="popout_tab_count"></div>'+'<div class="popout_tab_name">'+this.name+'</div>'+'</div>'+'<div class="popout_tab_x" onclick="'+this.tabRef+'.tabXOnClick(event)"></div>';this.popoutChatTabs.appendChild(this.popoutTab);this.popoutTabCount=ge(popoutCountID);show(ge('popout_chat_tabs'));}},closePopoutChat:function(){if(this.popoutChatTabs){this.popoutChatTabs.removeChild(this.popoutTab);if(this.popoutChatTabs.childNodes.length<=0){hide(ge('popout_chat_tabs'));}}},selectPopoutChat:function(){CSS.addClass(this.popoutTab,'highlight');},deselectPopoutChat:function(){CSS.removeClass(this.popoutTab,'highlight');},_newVisibilityChange:function(isYou,onload,online){var time=presence.getTime();var text;if(isYou){if(online){text=_tx("You are online.",{'name':this.firstName});}else{text=_tx("You are not online.",{'name':this.firstName});}}else{if(online){text=_tx("{name} is online.",{'name':this.firstName});}else{text=_tx("{name} is offline.",{'name':this.firstName});}}
var item={'type':'online','time':time,'text':text};var history=this.chatDisplay.getHistory(this.id,true);history.push(item);var markup=this._renderVisibilityChange(time,text);this._addConvMarkup(markup);this.lastLogItem=item;},newMinifeed:function(mfItem){if(mfItem.status){this.updateStatus(mfItem.status,mfItem.time,mfItem.statusTimeRel);}
if(this.lastLogItem&&this.lastLogItem.type=='mf'){return;}
var history=this.chatDisplay.getHistory(this.id,true);history.push(mfItem);var markup=this._renderMinifeed(mfItem.from,mfItem.time,mfItem.markup);this._addConvMarkup(markup);this.lastLogItem=mfItem;},newTyping:function(msgItem){var from=msgItem.from;var to=msgItem.to;var typ=msgItem.st;if(!this.chatDisplay.gatedFeatures.typ_show){return;}
else if((new Date()-this.lastMessageAt)<this.typingNotifyDelay){return;}
presence.debug('typing from '+from+': '+typ);var show_typing=(typ==this.TYPING)&&(this.numMissed==0);if(to!=this.id){if(presence.inPopoutWindow){CSS.conditionClass(this.popoutTab,'typing',show_typing);}
CSS.conditionClass(this.tabHandle,'typing',show_typing);buddyList.setAvailable(this.id);}},_isChatMessage:function(message){return
typeof this.messageTypes[message.type]!='undefined'&&this.messageTypes[message.type].user;},newMsg:function(msgItem){var from=msgItem.from;var to=msgItem.to;var type=msgItem.type;var msg=msgItem.msg;var time=msg.time;var clientTime=msg.clientTime;var msgID=msg.msgID;var shouldRender=true;this.lastMessageAt=new Date();var history=this.chatDisplay.getHistory(this.id,true);var lastMsg=null;for(var i=history.length-1;i>=0;i--){if(this._isChatMessage(history[i])){lastMsg=history[i];break;}}
if(lastMsg&&time<=lastMsg.time){var found=false;for(var i=0;i<history.length;i++){if(this._isChatMessage(history[i])&&time==history[i].time){found=true;break;}}
if(found){presence.warn('tabs: already had this msg');return;}
for(var i=history.length-1;i>=0;i--){var historyItem=history[i];if(this._isChatMessage(historyItem)&&(historyItem.to!=to||(!historyItem.msg.clientTime||historyItem.msg.clientTime<clientTime))){break;}}
presence.warn('tabs: merging new msg due to out-of-order server timestamp');if(i==history.length-1){this.chatDisplay.histories[this.id].push(msgItem);}else{history.splice(i+1,0,msgItem);this._setHistory(history);shouldRender=false;}}else{this.chatDisplay.histories[this.id].push(msgItem);}
if(to!=this.id){if(this.chatDisplay.gatedFeatures.sound&&this.chatDisplay.isSoundWindow&&statusControl.getSetting('sound')){Sound.play('/sound/pop.mp3');}
buddyList.setAvailable(this.id);if(!this.focused){this._updateNumMissed(this.numMissed+1,time);this._startBounce();}
if(presence.inPopoutWindow){CSS.removeClass(this.popoutTab,'typing');}
CSS.removeClass(this.tabHandle,'typing');}else{this._updateNumMissed(0,time);for(var i=0;i<this.pendingSentMsgs.length;i++){if(msgID==this.pendingSentMsgs[i].msgID){var pendingMsg=this.pendingSentMsgs.splice(i,1);this._bumpSendingMessageDisplay(msgID);this._popSendQueue();shouldRender=false;break;}}}
this.arbiter.inform(ChatTab.TABMESSAGETYPE.RECEIVEMSG,{type:type,msgItem:msgItem});shouldRender=this.messageTypes[type].visible&&shouldRender;if(shouldRender){var msgMarkup=this._renderMsg(from,to,time,msg);this._addConvMarkup(msgMarkup);if(this.actions.setVisible('clearHistory',true).refresh()){this.handleResize();}
this.lastLogItem=msgItem;}},getInputElemId:function(){return'chat_input_'+this.id;},_updateNumMissed:function(numMissed,time){if(numMissed==this.numMissed||(time&&time<=this.missedTime)){return;}
if(numMissed>99){numMissed=99;}
this.numMissed=numMissed;this.missedTime=time;this._updateNumMissedDisplay();},_updateNumMissedDisplay:function(){this.tabCount.innerHTML=this.numMissed;if(this.numMissed>0){if(this.popoutTabCount){this.popoutTabCount.style.display='block';this.popoutTabCount.innerHTML=this.numMissed;}else{chatTabSlider.updateMissedCount();}
CSS.addClass(this.tabHandle,'highlight');this.tabCount.style.display='block';}else{if(this.popoutTabCount){this.popoutTabCount.style.display='none';}else{chatTabSlider.updateMissedCount();}
CSS.removeClass(this.tabHandle,'highlight');this.tabCount.style.display='none';}},_addConvMarkup:function(markup){var isUserScrolled=this.isUserScrolled();this.chatConvContent.innerHTML+=markup;if(!isUserScrolled){this.scrollToBottom();}},_renderDateBreak:function(time){var newDate=new Date();newDate.setTime(time);var shouldRender=false;var lastDate=new Date();if(this.lastLogItem){lastDate.setTime(this.lastLogItem.time);}
if(newDate.getDate()!=lastDate.getDate()||newDate.getMonth()!=lastDate.getMonth()){shouldRender=true;}
var markup='';if(shouldRender){var classname='date_divider';if(!this.lastLogItem){classname+=' first';}
markup='<div class="'+classname+'">'+
renderDate(newDate,!presence.inPopoutWindow)+'</div>';}
return markup;},_renderVisibilityChange:function(time,visibilityMarkup){var markup=this._renderDateBreak(time);markup+='<div class="visibility_change">'+'<span class="time_stamp">'+
chatDisplay.renderServerTime(time)+'</span>'+
visibilityMarkup+'</div>';return markup;},_renderMinifeed:function(from,time,storyMarkup){var markup=this._renderDateBreak(time);markup+='<div class="minifeed">'+
storyMarkup+'</div>';return markup;},_renderMsg:function(from,to,time,msg,pendingMsgID,isError,errorMarkup){var fromSelf=from!=this.id;var fromToSelf=fromSelf&&from==to;var msgClass=fromSelf&&!fromToSelf?'self':'other';var markup=this._renderDateBreak(time);if(!markup&&this.lastLogItem&&this.lastLogItem.type=='msg'&&this.lastLogItem.from==from&&time-this.lastLogItem.time<this.msgBunchTime){}else{var pic=this.chatDisplay.userInfos[from]&&presence.inPopoutWindow?'<img src="'+this.chatDisplay.userInfos[from].thumbSrc+'" class="pic" />':'';var name=fromSelf?htmlize(presence.firstName):presence.renderLink(this.chatDisplay.profileURL+'?id='+this.id,htmlize(this.firstName));var timeStr=chatDisplay.renderServerTime(time);markup+='<h5 class="'+msgClass+'">'+
pic+' <span class="time_stamp ts_'+msgClass+'">'+timeStr+'</span>'+
name+'</h5>';}
if(pendingMsgID||errorMarkup){var pendingElementID=pendingMsgID?' id="pending_'+this.id+'_'+pendingMsgID+'"':'';markup+='<div'+pendingElementID+' class="pic_padding">'+
(errorMarkup?errorMarkup:'')+'</div>';}
var msgElementID=pendingMsgID?' id="msg_'+this.id+'_'+pendingMsgID+'"':'';msgClasses='p_'+msgClass+' pic_padding'+
(isError?' msg_error':'');markup+='<p'+msgElementID+' class="'+msgClasses+'">'+
this._renderMsgHtmlize(msg)+'</p>';return markup;},_renderMsgHtmlize:function(msg){var textProcessor=statusControl.showEmoticons?this.convTextEmoteProcessor:this.convTextProcessor;return html_hyperlink(msg.text||'',textProcessor,this.convTextProcessor,true);},_processConvText:function(str){return html_wordwrap(str,this.convWrapLimit);},_processConvTextEmote:function(str){return Emote.htmlEmote(str,this.convTextProcessor);},_processStatusText:function(str){return html_wordwrap(str,this.statusWrapLimit);}});function renderDate(date,showRelative){if(showRelative){var today=new Date();today.setHours(0);today.setMinutes(0);today.setSeconds(0);today.setMilliseconds(0);var dayMilliseconds=24*60*60*1000;var diff=today.getTime()-date.getTime();if(diff<=0){return _tx("Today");}else if(diff<dayMilliseconds){return _tx("Yesterday");}}
var month='';switch(date.getMonth()){case 0:month=_tx("January");break;case 1:month=_tx("February");break;case 2:month=_tx("March");break;case 3:month=_tx("April");break;case 4:month=_tx("May");break;case 5:month=_tx("June");break;case 6:month=_tx("July");break;case 7:month=_tx("August");break;case 8:month=_tx("September");break;case 9:month=_tx("October");break;case 10:month=_tx("November");break;case 11:month=_tx("December");break;}
return _tx("{month} {date}",{'month':month,'date':date.getDate()});}

function ChatDisplay(userInfos,histories,everSentMessage,activeChats,focusedChat,profileURL,messageURL,gatedFeatures){this.userInfos=userInfos;this.histories=histories;this.everSentMessage=everSentMessage;this.user=presence.user;this.profileURL=profileURL;this.messageURL=messageURL;this.settingsURL='/ajax/chat/settings.php';this.gatedFeatures=gatedFeatures;this.useUICookieCache=gatedFeatures['ui_cookie_cache'];this.renderServerTime=this.gatedFeatures['24h_times']?this._renderServerTime24hr:this._renderServerTime12hr;this._init(activeChats,focusedChat);}
ChatDisplay.prototype={blinkTime:1500,initialBlinkDelay:3000,_init:function(activeChats,focusedChat){this.loaded=false;this.tabs={};this.numTabs=0;this.lastFocused=null;this.newMsgNames=[];this.newMsgNamesIndex=0;this.blinkingTimer=null;this.isSoundWindow=false;this.windowIsFocused=true;this.chatActivityTime=0;if(this.useUICookieCache){this.uiChangeTime=0;this.uiCookieCacheTime=(Env['rep_lag']+presence.sitevars.CHAT_UI_COOKIE_CACHE_WINDOW)*1000;}
this.favIcon=null;this.altFavIcon=null;this.initialFocusedChat=focusedChat;this.initialActiveChats=activeChats;presence.registerResizeHandler(this.handleResize.bind(this));presence.registerStateStorer(this._store.bind(this));presence.registerStateLoader(this._load.bind(this));presence.registerMsgHandler(this._handleMsg.bind(this));presence.registerStartHandler(this.start.bind(this));presence.registerShutdownHandler(this.shutdown.bind(this));presence.registerRestartHandler(this.restart.bind(this));statusControl.registerVisibilityHandler(this.handleVisibility.bind(this));buddyList.registerAvailabilityHandler(this.handleBuddyAvailability.bind(this));Event.listen(window,'focus',this.onWindowFocus.bind(this));Event.listen(window,'blur',this.onWindowBlur.bind(this));},onWindowFocus:function(){this.isWindowFocused=true;this.doStopBlinking();},onWindowBlur:function(){this.isWindowFocused=false;},start:function(){for(var id in this.tabs){this.tabs[id].start();}},shutdown:function(){this._stopBlinking();},restart:function(){for(var id in this.tabs){this.tabs[id].restart();}},loadInitialUserInfo:function(id,name,firstName){if(this.userInfos[id]){return;}
this.userInfos[id]={'name':name,'firstName':firstName,'thumbSrc':'','status':'','statusTime':'','statusTimeRel':''};},_loadInitialTabs:function(activeChats,focusedChat){var firstTab=null;for(var id in activeChats){if(presence.inVideoChat&&id!=presence.inVideoChatWith){continue;}
if(!firstTab){firstTab=id;}
if(this.tabs[id]){continue;}
var tabInfo=activeChats[id];var name,firstName;if(this.userInfos[id]){name=this.userInfos[id].name;firstName=this.userInfos[id].firstName;}else{if(!tabInfo.n){Util.warn('chat display: trying to load chat tab '+id+', but don\'t have the name');continue;}
name=tabInfo.n;firstName=tabInfo.fn?tabInfo.fn:getFirstName(name);}
var numMissed=tabInfo.m||0;var missedTime=tabInfo.t||0;this.tabs[id]=new ChatTab(this,id,name,firstName,numMissed,missedTime);this.numTabs++;}
if(presence.inVideoChat&&!firstTab){focusedChat=presence.inVideoChatWith;}else if(presence.inPopoutWindow&&!focusedChat){focusedChat=firstTab;}
if(focusedChat&&(focusedChat!=this.focused)){this._focusTab(focusedChat);}},load:function(){this._load(presence.state);},_load:function(presenceState){var loadedFromCache=false;if(presenceState){this.isSoundWindow=channelManager.isLowestSubdomain();if(this.blinkingTimer&&presenceState.sb){this._stopBlinking();}
this.chatActivityTime=verifyNumber(presenceState.ct)*1000;if(this.useUICookieCache){var now=presence.getTime();this.uiChangeTime=Math.max(this.uiChangeTime,verifyNumber(presenceState.uct)*1000);if(!this.loaded){if(now-this.uiChangeTime<this.uiCookieCacheTime){if(now-presenceState.ut>60*60*1000){for(var id in presenceState.t){presenceState.t[id].m=0;}}
presence.debug('chatDisplay: loading tabs from cookie cache');this._loadInitialTabs.bind(this,presenceState.t,presenceState.f).defer();loadedFromCache=true;}}}}
if(!this.loaded&&!loadedFromCache){presence.debug('chatDisplay: loading tabs from server state');this._loadInitialTabs.bind(this,this.initialActiveChats,this.initialFocusedChat).defer();this.initialFocusedChat=this.initialActiveChats=false;}
this.loaded=true;},_store:function(presenceState){presenceState.ct=Math.floor(this.chatActivityTime*0.001);presenceState.sb=(this.blinkingTimer==null)?1:0;if(this.useUICookieCache){presenceState.t={};presenceState.f=null;presenceState.uct=0;var now=presence.getTime();if(now-this.uiChangeTime<this.uiCookieCacheTime){for(var id in this.tabs){var tab=this.tabs[id];presenceState.t[id]={n:tab.name,m:tab.numMissed};if(tab.firstName!=getFirstName(tab.name)){presenceState.t[id].fn=tab.firstName;}}
presenceState.f=this.focused;presenceState.uct=Math.floor(this.uiChangeTime*0.001);}}
return presenceState;},handleResize:function(){if(!this.focused){return;}
var tab=this.tabs[this.focused];tab.handleResize();},_sendTabStateChange:function(data){data['window_id']=presence.windowID;new AsyncRequest().setURI(this.settingsURL).setData(data).setHandler(this._onCheckTabStateChangeResponse.bind(this)).setErrorHandler(bagofholding).setTransportErrorHandler(bagofholding).send();},_onCheckTabStateChangeResponse:function(response){var payload=response.getPayload();if(payload.overlay){buddyList.addOverlayInfo(payload.overlay);}},reloadTabs:function(){for(var id in this.tabs){this.tabs[id].loadData();}},_closeTab:function(id){if(!this.tabs[id]){return;}
if(this.focused==id){if(presence.inPopoutWindow){var toFocus=null;var breakNext=false;for(var otherId in this.tabs){if(otherId!=id){toFocus=otherId;if(breakNext){break;}}else if(toFocus){break;}else{breakNext=true;}}
if(toFocus){var tabToFocus=this.tabs[toFocus];this._focusTab(toFocus);}else{this.focused=null;}}else{this.focused=null;}}
this.tabs[id].close();delete this.tabs[id];this.numTabs--;chatTabSlider.close(id);},uiChanged:function(){if(this.useUICookieCache){this.uiChangeTime=presence.getTime();presence.doSync();}},closeTab:function(id){this._closeTab(id);this._sendTabStateChange({'close_chat':id});this.uiChanged();},showVideoChatTab:function(){if(presence.inVideoChat){this.tabs[this.focused].showChat();}},_unfocus:function(){if(!this.focused){return false;}
if(presence.poppedOut)this.tabs[this.focused].deselectPopoutChat();this.tabs[this.focused].unfocus();this.focused=null;return true;},unfocus:function(){var changed=this._unfocus();if(changed){this._sendTabStateChange({'unfocus_chat':1});this.uiChanged();}
this.lastFocused=null;},unfocusNoSync:function(){this._unfocus();},refocus:function(){if(!this.lastFocused||!this.tabs[this.lastFocused]){return null;}
this._focusTab(this.lastFocused);},_focusTab:function(id,name,firstName){if(id==this.focused||presence.inVideoChat&&id!=presence.inVideoChatWith){return;}
if(!this.tabs[id]){if(typeof name=='undefined'){if(!this.userInfos[id]||!this.userInfos[id].name){presence.warn("chat: couldn't create tab "+id+" since no name is specified");return;}
name=this.userInfos[id].name;firstName=this.userInfos[id].firstName;}
this.tabs[id]=new ChatTab(this,id,name,firstName,0);this.numTabs++;chatTabSlider.addTab(id);}
chatTabSlider.gotoTab(id);if(this.focused){this.tabs[this.focused].unfocus();if(presence.poppedOut)this.tabs[this.focused].deselectPopoutChat();}
this.focused=id;this.lastFocused=id;if(this.focused){var loaded=this.loaded;(function(){var hidden=!presence.inPopoutWindow&&presence.poppedOut;if(this.tabs[this.focused]){this.tabs[this.focused].focus(hidden,loaded);}
if(presence.poppedOut){this.tabs[id].selectPopoutChat();}}).bind(this).defer();}},focusTab:function(id,name,firstName){presence.pauseSync();this._focusTab(id,name,firstName);this._sendTabStateChange({'focus_chat':id});this.uiChanged();this.chatActivityTime=(new Date()).getTime();this.doStopBlinking();presence.resumeSync();},toggleTab:function(id,name,firstName){if(this.focused==id){this.unfocus();}else{this.focusTab(id,name,firstName);}},doBlink:function(){if(!this.favIcon){var links=document.getElementsByTagName('link');for(var i=0;i<links.length;i++){if(links[i].rel=='shortcut icon'){this.favIcon=links[i];this.altFavIcon=document.createElement('link');this.altFavIcon.rel='shortcut icon';this.realTitle=document.title;break;}}}
if(this.favIcon.parentNode){if(this.newMsgNames&&this.newMsgNames.length>0){if(this.newMsgNamesIndex>=this.newMsgNames.length){this.newMsgNamesIndex=0;}
var name=this.newMsgNames[this.newMsgNamesIndex++];document.title=_tx("New message from {name}!",{'name':name});}else{document.title=_tx("New message!");}
var p=this.favIcon.parentNode;p.removeChild(this.favIcon);p.appendChild(this.altFavIcon);}else{document.title=this.realTitle;var p=this.altFavIcon.parentNode;p.removeChild(this.altFavIcon);p.appendChild(this.favIcon);}},doStopBlinking:function(force){if(this.blinkingTimer||force){this._stopBlinking();presence.doSync();}},_stopBlinking:function(){if(this.blinkingTimer){if(this.favIcon&&!this.favIcon.parentNode){this.doBlink();}
clearInterval(this.blinkingTimer);this.blinkingTimer=null;this.newMsgNames=[];this.newMsgNamesIndex=0;}},handleBuddyAvailability:function(justCameOnline){for(var id in this.tabs){this.tabs[id].handleBuddyAvailability(justCameOnline);}},_handleMsg:function(channel,obj){if(obj.from){if(obj.from==this.user){var id=obj.to;}else{var id=obj.from;}
var tab=this.tabs[id];}
if(obj.window_id==presence.windowID){return false;}
switch(obj.type){case'unfocus_chat':if(!presence.inVideoChat){this._unfocus();}
return true;case'focus_chat':if(!presence.inVideoChat){this._focusTab(obj.id);}
return true;case'close_chat':if(!presence.inVideoChat){this._closeTab(obj.id);}
return true;case'msg':case'video':if(this.inVideoChat&&(obj.from==presence.inVideoChatWith||obj.to==presence.inVideoChatWith)){break;}
if(obj.from==this.user){var name=obj.to_name;var firstName=obj.to_first_name?obj.to_first_name:getFirstName(name);}else{var name=obj.from_name;var firstName=obj.from_first_name?obj.from_first_name:getFirstName(name);}
this.loadInitialUserInfo(id,name,firstName);var fromMe=(obj.from==this.user);buddyList.setAvailable(id,fromMe);if(!tab){tab=this.tabs[id]=new ChatTab(this,id,name,firstName,0);this.numTabs++;chatTabSlider.addTab(id);if(!this.focused){this.focusTab(id);}else{tab.getHistory();}}
if(presence.inPopoutWindow||!presence.poppedOut){if(fromMe){this.doStopBlinking(true);}else if(this.isWindowFocused){setTimeout(this.doStopBlinking.bind(this,true),500);}else if(!presence.isOpera){this.newMsgNames.push(tab.firstName);if(!this.blinkingTimer){this.blinkingTimer=setTimeout(function(){this.blinkingTimer=setInterval(this.doBlink.bind(this),this.blinkTime);}.bind(this),this.initialBlinkDelay);}}}
obj.time=obj.msg.time;tab.newMsg(obj);return true;case'mf':if(!tab){return false;}
tab.newMinifeed(obj);return true;case'status':if(!tab){return false;}
tab.updateStatus(obj.status,obj.time,obj.statusTimeRel);return true;case'typ':if(tab){tab.newTyping(obj);}else{presence.debug('typing message ignored');}
return true;default:return false;}},handleVisibility:function(){for(var id in this.tabs){this.tabs[id].handleVisibility();}},getHistory:function(id,create){create=create||false;if(!this.histories[id]&&create){this.histories[id]=[];}
return this.histories[id];},_renderServerTime12hr:function(serverTimeMS){var time=new Date();time.setTime(serverTimeMS+presence.timeSkew);var hours=time.getHours();var ampm='am';if(hours>=12){ampm='pm';hours-=12;}
if(hours==0){hours=12;}
var minutes=time.getMinutes();if(minutes<10){minutes='0'+minutes;}
var timeStr=hours+':'+minutes+ampm;return timeStr;},_renderServerTime24hr:function(serverTimeMS){var time=new Date();time.setTime(serverTimeMS+presence.timeSkew);var hours=time.getHours();if(hours<10){hours='0'+hours;}
var minutes=time.getMinutes();if(minutes<10){minutes='0'+minutes;}
var timeStr=hours+':'+minutes;return timeStr;}};function chat_simple_popout(popoutURL){window.open(popoutURL,"fbChatWindow","status=0,toolbar=0,location=0,menubar=0,"+"directories=0,resizable=1,scrollbars=0,"+"width="+Presence.prototype.defWidth+",height="+Presence.prototype.defHeight+",left="+Presence.prototype.defX+",top="+Presence.prototype.defY);}

function typeahead_source(){}
typeahead_source.prototype.cache_results=false;typeahead_source.prototype.enumerable=false;typeahead_source.prototype.allow_fake_results=false;typeahead_source.prototype.search_limit=10;typeahead_source.prototype.bootstrap=bagofholding;typeahead_source.check_match=function(search,value){value=typeahead_source.tokenize(value);for(var i=0,il=search.length;i<il;i++){if(search[i].length){var found=false;for(var j=0,jl=value.length;j<jl;j++){if(value[j].length>=search[i].length&&value[j].substring(0,search[i].length)==search[i]){found=true;value[j]='';break;}}
if(!found){return false;}}}
return true;}
typeahead_source.tokenize=function(text,capture,noflatten){return(noflatten?text:typeahead_source.flatten_string(text)).split(capture?typeahead_source.normalizer_regex_capture:typeahead_source.normalizer_regex);}
typeahead_source.normalizer_regex_str='(?:(?:^| +)["\'.\\-]+ *)|(?: *[\'".\\-]+(?: +|$)|[@_]| +)';typeahead_source.normalizer_regex=new RegExp(typeahead_source.normalizer_regex_str,'g');typeahead_source.normalizer_regex_capture=new RegExp('('+typeahead_source.normalizer_regex_str+')','g');typeahead_source.flatten_string=function(text){if(!typeahead_source.accents){typeahead_source.accents={a:/\u0430|\u00e0|\u00e1|\u00e2|\u00e3|\u00e4|\u00e5/g,b:/\u0431/g,c:/\u0446|\u00e7/g,d:/\u0434|\u00f0/g,e:/\u044d|\u0435|\u00e8|\u00e9|\u00ea|\u00eb/g,f:/\u0444/g,g:/\u0433/g,h:/\u0445/g,i:/\u0438|\u00ec|\u00ed|\u00ee|\u00ef/g,j:/\u0439/g,k:/\u043a/g,l:/\u043b/g,m:/\u043c/g,n:/\u043d|\u00f1/g,o:/\u043e|\u00f8|\u00f6|\u00f5|\u00f4|\u00f3|\u00f2/g,p:/\u043f/g,r:/\u0440/g,s:/\u0441/g,t:/\u0442/g,u:/\u0443|\u044e|\u00fc|\u00fb|\u00fa|\u00f9/g,v:/\u0432/g,y:/\u044b|\u00ff|\u00fd/g,z:/\u0437/g,ae:/\u00e6/g,oe:/\u0153/g,ts:/\u0446/g,ch:/\u0447/g,sh:/\u0448/g,ya:/\u044f/g}}
text=text.toLowerCase();for(var i in typeahead_source.accents){text=text.replace(typeahead_source.accents[i],i);}
return text;}
typeahead_source.prototype.set_owner=function(obj){this.owner=obj;if(this.is_ready){this.owner.update_status(typeaheadpro.STATUS_IDLE);}}
typeahead_source.prototype.ready=function(){if(this.owner&&!this.is_ready){this.is_ready=true;this.owner.update_status(typeaheadpro.STATUS_IDLE);}else{this.is_ready=true;}}
typeahead_source.highlight_found=function(result,search){var html=[];resultv=typeahead_source.tokenize(result,true,true);result=typeahead_source.tokenize(result,true);search=typeahead_source.tokenize(search);search.sort(typeahead_source._sort);for(var i=0,il=resultv.length;i<il;i++){var found=false;for(var j=0,jl=search.length;j<jl;j++){if(search[j]&&result[i].lastIndexOf(search[j],0)!=-1){html.push('<em>',htmlspecialchars(resultv[i].substring(0,search[j].length)),'</em>',htmlspecialchars(resultv[i].substring(search[j].length,resultv[i].length)));found=true;break;}}
if(!found){html.push(htmlspecialchars(resultv[i]));}}
return html.join('');}
typeahead_source._sort=function(a,b){return b.length-a.length;}
typeahead_source.prototype.gen_nomatch=function(){return this.text_nomatch!=null?this.text_nomatch:_tx("No matches found");}
typeahead_source.prototype.gen_loading=function(){return this.text_loading!=null?this.text_loading:_tx("Loading...");}
typeahead_source.prototype.gen_placeholder=function(){return this.text_placeholder!=null?this.text_placeholder:_tx("Start typing...");}
typeahead_source.prototype.gen_noinput=function(){return this.text_noinput!=null?this.text_noinput:_tx("Start typing...");}
typeahead_source.prototype.onselect_not_found=function(){if(typeof this.tokenizer._ontokennotfound!='undefined'){this.tokenizer._ontokennotfound(this.obj.value);}
if(typeof this.tokenizer.onselect!='undefined'){return this.tokenizer.onselect();}}

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;if(buddyList.flLive&&buddyList.flMode){this.minBuddyCount=20;}
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();this.buildIndex();buddyList.registerAvailabilityHandler(this.buildIndex.bind(this));}
ChatBuddyListTypeahead.numTypeaheads=0;ChatBuddyListTypeahead.mixin({buildIndex:function(justCameOnline){this.availableListIDs=buddyList.getSortedListUI(this.flid);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;}}
this._refreshAvailableList();if(buddyList.availableCount<this.minBuddyCount){hide(this.inputDiv);this.resetSearch(true);}else{show(this.inputDiv);this.search.bind(this,true).defer();}},_onfocus:function(e){this.focused=true;this.captureSubmit();},_onblur:function(e){this.focused=false;if(this.curStr==''){this.hideClear();}},_getAvailableListIDs:function(){if(!this.availableIDs){this._refreshAvailableList();}
return this.availableIDs;},_refreshAvailableList:function(){var ids=this.availableListIDs;if(this.excludedIds){ids=ids.filter((function(id){return this.excludedIds[id]!=1;}).bind(this));}
this.availableIDs=ids;},_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.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 firstMatch;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,false,this.flid);matches++;if(!firstMatch){firstMatch=id;}}else{CSS.removeClass(buddyList.getBuddyItem(id,this.flid),'selected');buddyList.hideBuddy(id,this.flid);}}
if(matches>0){buddyList.hideEmptySearch(this.flid);if(matches==1||(tokenizedStr.length==1&&tokenizedStr[0].length==1)){this.selected=firstMatch;this.selectedIndex=0;CSS.addClass(buddyList.getBuddyItem(firstMatch,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');Vector2.scrollIntoView(buddy);}else{CSS.removeClass(buddy,'selected');}
this.selectableCount++;}}},downArrowPress:function(){this.selectedIndex++;var max=this.selectableCount-1;if(this.selectedIndex>max){if(buddyList.flLive){this.resetSearch();}else{this.selectedIndex=max;}}
this.selectMatchingFriends();},upArrowPress:function(){this.selectedIndex--;if(this.selectedIndex<0){if(buddyList.flLive){this.selectedIndex=0;}else{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(){this.user=presence.user;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.flNuxData={};this.otherFriendsFlid='-1';this.botsFlid='-2';this.stopUpdates=false;this.flSortableGroup=null;this.reorderingLists=false;this.sortables={};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,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,flNuxData,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.flNuxData=flNuxData;this._init();if(presence.inPopoutWindow){this._forceUpdate.bind(this).defer();}},initFullList:function(availableList,updateTime,listChanged,flLive,flMode,flData,flNuxData,updateOverlay){this.availableList=availableList;this.updateTime=updateTime;this.listChanged=listChanged;this.haveFullList=true;this.flLive=flLive;this.flMode=flMode;this.flData=flData;this.flNuxData=flNuxData;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.flLive){Arbiter.subscribe(FriendListManagerBootstrap.FRIEND_LISTS_CHANGED,this._flManagerHandler.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);},registerAvailabilityHandler:function(fn){this.availabilityHandlers.push(fn);},_storeState:function(presenceState){presenceState.blo=this.buddyListOpen?1:0;presenceState.bvt=parseInt(this.buddyViewTime*0.001);return presenceState;},_loadState:function(presenceState){this.buddyViewTime=verifyNumber(presenceState.bvt)*1000;var openBuddyList=!!presenceState.blo;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){switch(obj.type){case'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;case'seen_fl_messaging':if(!this.flNuxSaved){this._saveNuxChangesCallback();}
return true;default: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(){goURI(URI.getRequestURI().toString(),true);},_onFlChange:function(newFlMode,newFlData){if(!this.flLive){return;}
if(!this.rendered){this.flMode=newFlMode;this.flData=newFlData;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);}
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);}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){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,[])));}}},_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)));}}},loadTypeahead:function(){this.typeahead=new ChatBuddyListTypeahead($("buddy_list_typeahead_input"),$("buddy_list_typeahead"));},getContentWrapper:function(){return this.contentDiv.parentNode;},isWideViewport:function(){return Vector2.getViewportDimensions().x>=1457;},resizeTab:function(force){if(this.resizeFrozen){if(force){this.resizeFrozen=false;}else{return;}}
presence.tabContentResize(this.wrapperID,this.contentID);},freezeTabSize:function(forceLockHeight){if(this.resizeFrozen||this.showingError){return;}
this.resizeFrozen=true;if(forceLockHeight===undefined){forceLockHeight=true;}
presence.tabContentResize(this.wrapperID,this.contentID,forceLockHeight);},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();}},_goOnline:function(){statusControl.sendVisibility(true);if(ge('chat_fl_loggedout_callout')){DOM.remove($('chat_fl_loggedout_callout'));}},openTab:function(focusTypeahead){if(this.buddyListOpen){return;}
if(CSS.hasClass(presence.holder,'buddy_list_hidden')){if(this.flLive){this._goOnline();}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.typeahead){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.typeahead){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){var flids;if(flid){flids=[flid];}else{flids=this._getUserFlids(id,null,true);}
this._toggleBuddy(id,false,flids);},_toggleBuddy:function(id,show,flids){var newDisplay=show?'block':'none';var listItem,flItem;for(var i=0;i<flids.length;i++){var flid=flids[i];listItem=ge(this._getBuddyListItemId(id,flid));if(listItem){listItem.style.display=newDisplay;}
if(show&&(flItem=ge(this._getFriendListId(flid)))){CSS.removeClass(flItem,'suppress');}}},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[0]];}}
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||flid===undefined){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;},getSortedListUI:function(flid){if(!flid&&this.flLive&&this.flMode){var groupedList=this._groupAvailableListByFl(true);var list=[];for(var flid in groupedList){list=list.concat(groupedList[flid]);}
return unique(list);}
return this._getSortedList();},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);var idleMarker,flItem;for(var i=0;i<flids.length;i++){var flid=flids[i];if(idleMarker=ge(this._getIdleMarkerId(flid))){CSS.conditionClass(idleMarker,'suppress',suppress);}
if(flid&&(flItem=ge(this._getFriendListId(flid)))){CSS.conditionClass(flItem,'suppress',suppress);}}},_updateCount:function(){if(this.buddyCountSpan){var countText;if(this.flLive){countText=_tx("{Chat} {number-available}",{'Chat':_tx("Chat"),'number-available':'<span class="buddy_count_num">(<strong>'+this.availableCount+'</strong>)</span>'});}else{countText=_tx("Online Friends {number-available}",{'number-available':'<span class="buddy_count_num">(<strong>'+this.availableCount+'</strong>)</span>'});}
this.buddyCountSpan.innerHTML=countText;}},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||(!this.stopUpdates&&(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);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){elem.style.height=itemHeight+'px';DOM.insertAfter(prevElem,elem);}else{elem.style.height='0px';DOM.insertAfter(prevElem,elem);var anim=animation(elem);if(shouldDelayExpand){anim.duration(this.expandAnimDuration+500).checkpoint();}
anim.from('height','0').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();}
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(){var emptyItem=ge(this._getBuddyListEmptyItemId());if(emptyItem){CSS.conditionClass(emptyItem,'hide_empty_item',this.availableCount!=0);}},_hideBuddyListEmptyItem:function(){var emptyItem=ge(this._getBuddyListEmptyItemId());if(emptyItem){CSS.addClass(emptyItem,'hide_empty_item');}},_updateAvailableListWithDiff:function(nowAvailableList,wasAvailableIDs,flid){if(this.stopUpdates){return;}
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=!flid&&!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);var defaultPrevAvailElemIds={},prevIdleElemIds={},prevAvailElemIds={},hasIdle={},hasNotIdle={};var globalFlids=[];if(this.shouldRender){globalFlids=this._getGlobalFlids();for(var i=0;i<globalFlids.length;i++){var flid=globalFlids[i];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(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];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);},_sort:function(ids,availableList){availableList=availableList||this.availableList;var compareFunction=this._compareFunction.bind(this,availableList);ids.sort(compareFunction);return ids;},_compareFunction:function(availableList,id1,id2,id1Idle,id2Idle){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;}
this.flNuxData=buddyListResponse.flNuxData;if(this.stopUpdates){if(this._shouldRenderNux()){this._renderNux();}
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.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;},_listNameInUse:function(name){for(var flid in this.flData){if(this.flData[flid].n==name){return true;}}
return false;},keyPressNewListInput:function(e){if(event_get_keypress_keycode(e)==KEYS.RETURN){var e=$E(e);var list_name=e.getTarget().value;if(this._listNameInUse(list_name)){new ErrorDialog().showError(_tx("An error occurred."),_tx("You cannot have two lists with the same name. Please create a unique name for this list."))
return;}
var data={'create':list_name};this._saveBuddyListSetting(data,function(){for(var flid in this.flData){if(this.flData[flid].n==list_name){Vector2.scrollIntoView($(this._getFriendListId(flid)));break;}}}.bind(this));return e.kill();}},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,function(){this._showEmptyListMomentarily(flid);Vector2.scrollIntoView($(this._getFriendListId(flid)));}.bind(this));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);}},_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,callback){data['user']=this.user;callback=callback||bagofholding;new AsyncRequest().setData(data).setURI('/ajax/chat/buddy_list_settings.php').setHandler(this._onBuddyListSettingSave.bind(this,callback)).setFinallyHandler(function(){buddyListDisplay.closeOpenFlyout();}).send();},_goOnlineToLists:function(flids,readOnly){readOnly=readOnly||false;var data={'online_to_list':1,'flids':flids,'read_only':readOnly};this._handleFlVisibilityChange(flids,1);this._saveBuddyListSetting(data);},_handleFlVisibilityChange:function(flids,online,callback){for(var i=0;i<flids.length;i++){var flid=flids[i]
var flItem=$(this._getFriendListId(flid));this.flData[flid].o=online;if(online){CSS.addClass(flItem,'online');CSS.removeClass(flItem,'offline');if(flid==this.otherFriendsFlid){this._showEmptyListMomentarily(flid);}}else{CSS.addClass(flItem,'offline');CSS.removeClass(flItem,'online');}
var tooltip=DOM.find(flItem,'div.titletip strong');DOM.setText(tooltip,this._getFriendListTooltipText(flid));callback&&callback(flid);}},_showEmptyListMomentarily:function(flid){this.emptyMomentaryFlids=this.emptyMomentaryFlids||{};this.emptyMomentaryFlids[flid]=1;var flItem=ge(this._getFriendListId(flid));if(flItem){CSS.addClass(flItem,'show_empty_list');}
(function(){delete this.emptyMomentaryFlids[flid];var flItem=ge(this._getFriendListId(flid));if(flItem){CSS.removeClass(flItem,'show_empty_list');}}).bind(this).defer(2000);},_goOfflineToLists:function(flids,uiOnly){uiOnly=uiOnly||false;var groupedLists=this._groupAvailableListByFl();this._handleFlVisibilityChange(flids,0,function(flid){var idsToRemove=groupedLists[flid];this._removeFromBuddyList(idsToRemove,flid);}.bind(this));if(!uiOnly){var data={'offline_to_list':1,'flids':flids};this._saveBuddyListSetting(data);}},_removeFlidsFromBuddyList:function(flids,groupedList){groupedList=groupedList||this._groupAvailableListByFl(true);if(!groupedList){return;}
var nowAvailList={};for(var i=0;i<flids.length;i++){var flid=flids[i];var ids=groupedList[flid];if(!ids){continue;}
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,[]);}
this._removeFlidsFromDOM(flids);},_onBuddyListSettingSave:function(callback,asyncResponse){var payload=asyncResponse.getPayload();if(this.flLive&&payload){if(payload.availableList){this.updateUserInfos(payload.userInfos);var flid;if(payload.flids&&payload.flids.length==1){flid=payload.flids[0];}
this._updateAvailableListWithDiff(payload.availableList,[],flid);}
if(payload.flNuxData){this.flNuxData=payload.flNuxData;}
if(payload.flData){var flMode;if(typeof payload.flMode!='undefined'){flMode=payload.flMode;}else{flMode=true;}
this._onFlChange(flMode,payload.flData);this._resetFlidClasses();}
callback&&callback();}},_flManagerHandler:function(message,data){if(data.deleted_lists){this._removeFlidsFromBuddyList(data.deleted_lists);}},_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 flid_online=this.flData[flid].o;var flid_hidden=this.flData[flid].h;var classes=['friend_list'];if(flid_online){classes.push('online');}else{classes.push('offline');}
if(!flid_hidden&&this.emptyMomentaryFlids&&this.emptyMomentaryFlids[flid]){classes.push('show_empty_list');}
if(is_empty(groupedFl[flid])){if(this.availableCount!=0&&(this.flData[flid].c==0||flid==this.otherFriendsFlid)){classes.push('empty_friend_list');}else if(flid_online){classes.push('hide_friend_list');}}
if(flid==this.otherFriendsFlid){classes.push('compact_friend_list');classes.push('other_friends_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='';var edit_link='';if(!sacred&&flid!=this.otherFriendsFlid){edit_link_onclick=sprintf('return !buddyList.reorderingLists ? FriendListManagerBootstrap.bootstrap(%d) : false;',flid);edit_link=_tx("edit");}
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,'">',edit_link,'</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,'" ','>','<div class="titletip"><strong>',this._getFriendListTooltipText(flid),'</strong></div>','</a>','</div>');}
return markupArr.join('');},_getFriendListTooltipText:function(flid){return this.flData[flid].o?_tx("Go Offline"):_tx("Go Online");},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){var markupArr;var haveFlid=this.flMode&&flid;if(haveFlid){markupArr=['<ul id="',this._getFriendListContainerId(flid),'"','class="friend_list_container">'];}else{markupArr=[];}
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(idle){hasIdle=true;idleArr=idleArr.concat(itemMarkupArr);}else{hasNotIdle=true;markupArr=markupArr.concat(itemMarkupArr);}}
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 emptyItemClass=(this.availableCount?'hide_empty_item':'');var markupArr=['<div id="buddy_list_all" class="subgroup">',this.renderEmptySearch(),'<ul id="buddy_list_parent" class="list_select">','<li id="',this._getBuddyListEmptyItemId(),'" class="info_text ',emptyItemClass,'">',_tx("No one is available to chat."),'</li>'];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=[];if(this.flMode&&flid){if(this.flData[flid].h){continue;}
var sacred=typeof this.flData[flid].s!='undefined';var onmouseover='',onmouseout='';if(!sacred){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{ids=this._getSortedList();}
markupArr.push(this._renderFriendListContent(flid,ids));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');}
DOM.empty(this.contentDiv);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;}},_renderNux:function(){CSS.addClass(this.wrapperDiv,'fl_nux');if(!this.flNuxData.checked_lists||is_empty(this.flNuxData.checked_lists)){this._showLoading();}else{DOM.setContent(this.contentDiv,this._renderNuxContent());this._hideError();CSS.removeClass(this.contentDiv,'hidden');}},_renderNuxContent:function(){var friend_lists=this.getFriendLists();var lists=$N('div',{className:'chat_fl_nux_friend_lists'});for(var flid in friend_lists){var div_id=this._encodeFlid('chat_fl_select',flid);var checkbox_id=this._encodeFlid('chat_fl_checkbox',flid);lists.appendChild(buddyListDisplay._renderToggle(div_id,this.flNuxData.checked_lists[flid],friend_lists[flid].n,checkbox_id));}
var content=$N('div',{className:'chat_fl_nux_content'});var header_text;if(this.flNuxData.used_chat){header_text=_tx("Organize Chat using your Friend Lists");}else{header_text=_tx("Welcome to Chat");}
var header=$N('div',{className:'chat_fl_nux_header'},header_text);content.appendChild(header);content.appendChild($N('div',{className:'chat_fl_nux_messaging'},_tx("Decide which lists you'd like to add to chat.  You'll be able to go offline or online to any specific list.")));content.appendChild(lists);var button=$N('input',{type:'button',className:'inputbutton',value:_tx("Save and Continue")});button.listen('click',this._saveNuxChanges.bind(this));content.appendChild($N('div',{className:'chat_fl_nux_save_button'},button));return content;},_saveNuxChanges:function(){var checkboxes=DOM.scry(this.contentDiv,'input[type="checkbox"]');var checkbox,flid,checked;var listsInChat=[];for(var i=0;i<checkboxes.length;++i){checkbox=checkboxes[i];flid=this._extractFlid(checkbox.id);checked=checkbox.checked;if(checked){listsInChat.push(flid);}}
var data={'set_lists_in_chat':1,'flids':listsInChat};this.flNuxSaved=true;this._saveBuddyListSetting(data,this._saveNuxChangesCallback.bind(this));},_saveNuxChangesCallback:function(){this._forceUpdate();CSS.removeClass(this.wrapperDiv,'fl_nux');this.stopUpdates=false;},dismissFlNuxCallout:function(){DOM.remove('chat_fl_loggedout_callout');this._saveBuddyListSetting({dismiss_fl_callout:1});},_shouldRenderNux:function(){return this.flLive&&!this.flNuxData.seen_messaging&&this.flNuxData.has_lists;},_firstRender:function(){if(this._shouldRenderNux()){this.stopUpdates=true;this._renderNux();}else{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');},enterReorderingFlMode:function(){if(this.reorderingLists){return;}
this.reorderingLists=true;CSS.addClass(this.wrapperDiv,'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 lists to re-order.")),$N('input',{type:'button',className:'inputbutton',value:_tx("Done Re-Ordering"),onclick:this.exitReorderingFlMode.bind(this)})]);DOM.insertBefore(reorder_alert,this.contentDiv);this.freezeTabSize(false);},exitReorderingFlMode:function(){if(!this.reorderingLists){return;}
this._reorderFlids();DOM.remove($('reorder_fl_alert'));CSS.removeClass(this.wrapperDiv,'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.flData[flid].s){return;}
var firstFlid=head(this.sortables);this.sortables[flid]=new SortableGroup();if(firstFlid){firstFlid.link(this.sortables[flid]);}
var emptyMessage=$N('li',{id:this._getEmptyListDropZoneId(flid),className:'list_drop_zone'},$N('span',{className:'list_drop_zone_inner'},_tx("Drag a friend here to add")));var root=$(this._getFriendListContainerId(flid));this.sortables[flid].addEmptyMessage(emptyMessage,root).setBoundingBox(this._getBoundingBox()).setDragOverCallback(this._dragOverHandler.bind(this)).setDropCallback(this._dropHandler.bind(this));for(var j=0;j<ids.length;j++){this._addSortable(ids[j],flid);}},_getBoundingBox:function(){return Rect.newFromVectors(new Vector2(0,0),Vector2.getElementDimensions(this.contentDiv));},_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||!this.flData[flid]){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,otherFlid){if(!flid||!this.flLive||!this.flMode){return;}
if(this.sortables[flid]){this.sortables[flid].removeSortable(this._getDragKey(id,otherFlid||flid));}},_dragOverHandler:function(draggable,droppable){if(CSS.hasClass(droppable,'list_drop_zone')){var flid=this._extractFlid(droppable.id);var parent=$(this._getFriendListId(flid));CSS.addClass(parent,'drag_over');}},_dropHandler:function(key){var temp=key.split('_');if(temp.length!=2){return;}
var id=temp[0];var oldFlid=temp[1];var draggedItem=$(this._getBuddyListItemId(id,oldFlid));if(!draggedItem){return;}
var newFlid=this._extractFlid(draggedItem.parentNode.id);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;var saveData=false;if(newFlid==this.otherFriendsFlid){removingList=true;if(currentFlids.length==1){this.availableList[id].fl=[this.otherFriendsFlid];}else{this.availableList[id].fl.remove(oldFlid);saveData=true;DOM.remove(draggedItem);Vector2.scrollIntoView(this.getBuddyItem(id));}}else if(currentFlids.length==1){this.availableList[id].fl=[newFlid];movingList=oldFlid!=this.otherFriendsFlid;}else{movingList=true;this.availableList[id].fl.push(newFlid);this.availableList[id].fl.remove(oldFlid);}
if(saveData||this._updateUIAfterDragging(id,oldFlid,newFlid,draggedItem)){var data;if(removingList){data={'remove_fl':true,'old_flid':oldFlid,'drag_uid':id};}else if(movingList){data={'move_fl':true,'new_flid':newFlid,'old_flid':oldFlid,'drag_uid':id};}else{data={'add_fl':1,'new_flid':newFlid,'drag_uid':id};}
this._saveBuddyListSetting(data);}}
this._resetFlidClasses();},_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(){var shouldAnimate,showHighlight=false;if(sortedList.length!=1){shouldAnimate=showHight=true;}
var newItem=this._expandItem(id,newFlid,prevElem,this.availableList[id].i,shouldAnimate,false,showHighlight);if(oldFlid!=newFlid){DOM.remove(draggedItem);this._removeSortable(id,newFlid,oldFlid);}
Vector2.scrollIntoView(newItem);}).bind(this).defer(500);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._encodeFlid('buddy_list_avail_marker',flid);},_getIdleMarkerId:function(flid){return this._encodeFlid('buddy_list_idle_marker',flid);},_getEmptyListDropZoneId:function(flid){return this._encodeFlid('buddy_list_drop_zone',flid);},_getBuddyListItemId:function(id,flid){return this._encodeFlid('buddy_list_item_'+id,flid);},_getBuddyListItemNameId:function(id,flid){return this._encodeFlid('buddy_list_item_name_'+id,flid);},_getBuddyListWasItemId:function(id,flid){return this._encodeFlid('buddy_list_was_item_'+id,flid);},_getEmptySearchId:function(flid){return this._encodeFlid('buddy_list_empty_search',flid);},_getBuddyListEmptyItemId:function(){return'buddy_list_empty_item';},_encodeFlid:function(elemId,flid){return flid?(flid+'_'+elemId):elemId;},_getFriendListId:function(flid){return this._encodeFlid('friend_list_item',flid);},_extractFlid:function(id){return id.split('_').shift();},_getFriendListContainerId:function(flid){return this._encodeFlid('friend_list_container',flid);},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.openFlyout=null;this.openControl=null;if(presence.sitevars.FL_LIVE){presence.registerTabOpenHandler(this._init.bind(this,buddy_list_panel));if(presence.inPopoutWindow){this._init(buddy_list_panel,'buddy_list_tab');}}
this._initialized=false;}
ChatBuddyListDisplay.prototype={_init:function(buddy_list_panel,tab){if(tab=='buddy_list_tab'&&!this._initialized){this.buddy_list_panel=$(buddy_list_panel,true);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);this._initialized=true;}},_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');if(!presence.poppedOut){var flyoutHeight=Vector2.getElementDimensions($(flyoutID)).y;var contentWrapperHeight=Vector2.getElementDimensions(buddyList.getContentWrapper()).y;if(flyoutHeight>contentWrapperHeight){CSS.addClass(flyoutID,'flyout_reversed');}}
this.openFlyout=flyoutID;this.openControl=controlID;},isFlyoutOpen:function(){return this.openFlyout;},closeOpenFlyout:function(){if(!this.openFlyout){return;}
CSS.addClass(this.openFlyout,'hidden_elem');CSS.removeClass(this.openFlyout,'flyout_reversed');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_list_input.listen('keypress',buddyList.keyPressNewListInput.bind(buddyList));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("Display these lists in Chat:"));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('div',{className:'menu_icon'}),$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>1){var reorder_button=$N('a',{className:'list_reorder_control'},[$N('div',{className:'menu_icon'}),$N('span',{},_tx("Re-order Lists"))]);reorder_button.listen('click',this._clickReorderLists.bind(this));options_actions.appendChild(reorder_button);}
var popout_button=$N('a',{className:'list_popout_control'},[$N('div',{className:'menu_icon'}),$N('span',{},(presence.poppedOut?_tx("Pop in Chat"):_tx("Pop out Chat")))]);popout_button.listen('click',presence.popout.bind(presence));options_actions.appendChild(popout_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++){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();if(presence.poppedOut&&presence.sitevars.FL_LIVE){presence.popout();}},_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=ge('chat_setting_checkbox_'+name);if(setting){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';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);}};

var PrivacyBaseValue={'FACEBOOK_EMPLOYEES':112,'CUSTOM':111,'OPEN':100,'EVERYONE':80,'NETWORKS_FRIENDS_OF_FRIENDS':60,'NETWORKS_FRIENDS':55,'FRIENDS_OF_FRIENDS':50,'ALL_FRIENDS':40,'SELF':10,'NOBODY':0};var PrivacyFriendsValue={'EVERYONE':80,'NETWORKS_FRIENDS':55,'FRIENDS_OF_FRIENDS':50,'ALL_FRIENDS':40,'SOME_FRIENDS':30,'NO_FRIENDS':0};var PrivacySpecialPreset={'ONLY_CORP_NETWORK':200,'COLLEGE_NETWORK_FRIENDS_OF_FRIENDS':201,'COLLEGE_NETWORK_FRIENDS':202};var PrivacyNetworkTypes={'TYPE_COLLEGE':1,'TYPE_HS':2,'TYPE_CORP':3,'TYPE_GEO':4,'TYPE_TEST':50};var PrivacyNetworksAll=1;copy_properties(PrivacyBaseValue,PrivacySpecialPreset);function PrivacyModel(){this.value=PrivacyBaseValue.ALL_FRIENDS;this.friends=PrivacyFriendsValue.ALL_FRIENDS;this.networks=[];this.lists=[];this.lists_x=[];this.list_anon=0;this.ids_anon=[];this.list_x_anon=0;this.ids_x_anon=[];this.tdata={};return this;}
copy_properties(PrivacyModel.prototype,{init:function(value,friends,networks,lists,lists_x,list_anon,ids_anon,list_x_anon,ids_x_anon,tdata){this.value=value;this.friends=friends;this.networks=networks.clone();this.lists=lists.clone();this.lists_x=lists_x.clone();this.list_anon=list_anon;this.ids_anon=ids_anon.clone();this.list_x_anon=list_x_anon;this.ids_x_anon=ids_x_anon.clone();tdata=tdata||{};copy_properties(this.tdata,tdata);},clone:function(){var clone=new PrivacyModel();clone.init(this.value,this.friends,this.networks,this.lists,this.lists_x,this.list_anon,this.ids_anon,this.list_x_anon,this.ids_x_anon,this.tdata);return clone;},getData:function(){var fields=['value','friends','networks','lists','lists_x','list_anon','ids_anon','list_x_anon','ids_x_anon'];var res={};for(var i=0;i<fields.length;++i){var field=fields[i];res[field]=this[field];}
return res;}});

var PrivacyWidgetInstance={}
function PrivacyWidget(root,fbid,range,row,networks,dialog_title,properties){copy_properties(this,{root:$(root),fbid:fbid,range:range,tdata:row.tdata,networks:networks,mode:'basic',dialog_title:dialog_title});this.properties={};copy_properties(this.properties,properties);this.model=new PrivacyModel();this.model.init(row.value,row.friends,row.networks,row.lists,row.lists_x,row.list_anon,row.ids_anon,row.list_x_anon,row.ids_x_anon);this.form=this.root.childNodes[0];this.basic=this.root.childNodes[2];this.advanced=this.root.childNodes[3];this.prompt=this.root.childNodes[4];this.out_of_range={};this.summary_select=this.$('summary_select');this.summary_select.onchange=bind(this,'summary_onselect');this.advanced_select=this.$('advanced_select');this.advanced_select.onchange=bind(this,'adv_onselect');var links=this.root.getElementsByTagName('a');for(var i=0;i<links.length;++i){if(links[i].className){links[i].onclick=bind(this,links[i].className);}}
if(ge('privacy_page_custom_links_'+this.fbid)){var custom_links=this.$('privacy_page_custom_links').getElementsByTagName('a');for(var i=0;i<custom_links.length;++i){if(custom_links[i].className){custom_links[i].onclick=bind(this,custom_links[i].className);}}}
this.$('save').onclick=bind(this,'adv_onclick_save');this.$('cancel').onclick=bind(this,'adv_onclick_cancel');this.$('nothanks').onclick=bind(this,'adv_onclick_nothanks');if(ge('advanced_everyone_'+this.fbid)){this.$('advanced_everyone').getElementsByTagName('input')[0].onclick=bind(this,'adv_onclick_everyone');}else{this.out_of_range['everyone']=true;}
var friend_radios=this.$('advanced_friends_radios').getElementsByTagName('input');for(var i=0;i<friend_radios.length;++i){if(friend_radios[i].getAttribute('type')=="radio"){friend_radios[i].onclick=bind(this,'adv_onclick_friends_radio',friend_radios[i].value);}}
if(ge('advanced_networks_'+this.fbid)){var networks_checks=this.$('advanced_networks').getElementsByTagName('input');for(var i=0;i<networks_checks.length;++i){networks_checks[i].onclick=bind(this,'adv_onclick_networks_checkbox',networks_checks[i].value);}
this.$('advanced_networks_select').onchange=bind(this,'adv_onclick_networks_select');}else{this.out_of_range['networks']=true;}
if(!ge('some_friends_'+this.fbid)){this.out_of_range['some_friends']=true;}
if(!ge('advanced_except_'+this.fbid)){this.out_of_range['except']=true;}
this.undo=[];for(var i=0;i<this.model.networks.length;i++){if(this.model.networks[i]==1){this.model.networks=PrivacyNetworksAll;break;}}
this._model_check_for_valid_value();this.public_search=this.properties.toggle_public_search?ge('_priv_public_search_listing'):null;this.search_net=this.properties.toggle_public_search?ge('_priv_network_type_controls'):null;this.model_write_to_summary();PrivacyWidgetInstance[this.fbid]=this;return this;};copy_properties(PrivacyWidget.prototype,{$:function(elem){return $(elem+'_'+this.fbid);},model_read_from_adv:function(){this.model.value=this.get_model_value(this.adv_reverse_preset_value(false),this.adv_read_custom_ids('except','lists'),this.adv_read_custom_ids('except','names'));if(this.model.value==PrivacyBaseValue.EVERYONE){this.model.friends=PrivacyFriendsValue.EVERYONE;}else{this.model.friends=this.adv_read_friends();}
this.model.networks=this.adv_read_networks();if(!this._model_preset_exists(this.model.value)){var values=this.interpret_value(this.model.value);this.model.value=PrivacyBaseValue.CUSTOM;this.model.friends=values.friends;this.model.networks=values.networks;}
this.model.lists=[];this.model.lists_x=[];this.model.ids_anon=[];this.model.ids_x_anon=[];this._model_read_adv_tokens('lists','some','lists');this._model_read_adv_tokens('ids_anon','some','names');this._model_read_adv_tokens('lists_x','except','lists');this._model_read_adv_tokens('ids_x_anon','except','names');},_model_preset_exists:function(preset){preset=parseInt(preset);var options=this.$('advanced_select').options;for(var i=0;i<options.length;i++){if(options[i].value==preset){return true;}}},_model_check_for_valid_value:function(){if(this.model.value!=PrivacyBaseValue.CUSTOM){if(!this._model_preset_exists(this.model.value)){var valid_values=[];var options=this.$('advanced_select').options;for(var i=0;i<options.length;i++){var special_preset=false;for(var k in PrivacySpecialPreset){if(options[i].value==PrivacySpecialPreset[k]){special_preset=true;}}
if(!special_preset){valid_values.push(options[i].value);}}
valid_values.sort();var values=this.interpret_value(this.model.value);var value_ok=false;if(this.adv_friends_value_exists(values.friends)){value_ok=true;}
if(values.networks===PrivacyNetworksAll||values.networks.length>0){if(valid_values[valid_values.length-1]>PrivacyBaseValue.ALL_FRIENDS){value_ok=true;}else{value_ok=false;}}
if(values.everyone==true){if(this.out_of_range['everyone']==true){value_ok=false;}}
if(value_ok){this.model.value=PrivacyBaseValue.CUSTOM;this.model.friends=values.friends;this.model.networks=values.networks;}else{if(this.model.value>valid_values[valid_values.length-1]){this.model.value=valid_values[valid_values.length-1];}else{this.model.value=valid_values[0];}}}}else{if(this.model.friends==PrivacyFriendsValue.NETWORKS_FRIENDS){this.model.friends=PrivacyFriendsValue.ALL_FRIENDS;this.model.networks=PrivacyNetworksAll;}
if(this.model.friends==PrivacyFriendsValue.NO_FRIENDS&&this.model.networks!==PrivacyNetworksAll&&this.model.networks.length==0){if(this._model_preset_exists(PrivacyBaseValue.NOBODY)){this.model.value=PrivacyBaseValue.NOBODY;}else{this.model.value=PrivacyBaseValue.SELF;this._model_check_for_valid_value();}}
if(this.model.friends==PrivacyFriendsValue.EVERYONE&&this.model.value!=PrivacyBaseValue.EVERYONE){if(!this.adv_friends_value_exists(PrivacyFriendsValue.EVERYONE)){Util.log('Advanced Everyone does not exist');var friends=[];var friend_radios=this.$('advanced_friends_radios').getElementsByTagName('input');for(var i=0;i<friend_radios.length;i++){if(friend_radios[i].type=='radio'){friends.push(friend_radios[i].value);}}
friends.sort();this.model.friends=friends[friends.length-1];this.model.networks=PrivacyNetworksAll;}}}},_model_read_adv_tokens:function(field,type,entity){var ids=this.adv_read_custom_ids(type,entity);for(var i=0;i<ids.length;++i){this.model[field].push(ids[i]);}},model_write_to_adv:function(){this.edit_value(this.model.value,true);if(this.model.value==PrivacyBaseValue.CUSTOM){this.edit_friends(this.model.friends);if(this.model.networks!==PrivacyNetworksAll&&this.model.networks.length==0){this.model.networks=[];}
this.edit_networks(this.model.networks);var select_display_value=this.select_display_value(this.model.value,this.model.friends,this.model.networks,this.model.lists,this.model.ids_anon);this.edit_preset();}
if(!this.out_of_range['some_friends']){DOM.empty(this.$('some_friends_container').firstChild);}
if(!this.out_of_range['except']){DOM.empty(this.$('except_friends_container').firstChild);}
if(!this.out_of_range['some_friends']){this._model_write_adv_token('lists','flid','some');this._model_write_adv_token('ids_anon','i','some');}
if(!this.out_of_range['except']){this._model_write_adv_token('lists_x','flid','except');this._model_write_adv_token('ids_x_anon','i','except');}},_model_write_adv_token:function(source,field,target){var ids=this.model[source];for(var i=0;i<ids.length;++i){var p={};p[field]=ids[i];p.t=this.tdata[ids[i]];this.adv_add_token(p,target);}},model_write_to_form:function(){this.form_save_value('changed',1);this.form_save_value('value',this.model.value);this.form_save_value('friends',this.model.friends);this.form_save_value('list_anon',this.model.list_anon);this.form_save_value('list_x_anon',this.model.list_x_anon);this.form_save_array('networks',this.model.networks);this.form_save_array('lists',this.model.lists);this.form_save_array('ids_anon',this.model.ids_anon);this.form_save_array('lists_x',this.model.lists_x);this.form_save_array('ids_x_anon',this.model.ids_x_anon);if(this.public_search){this.toggle_public_search();}},toggle_public_search:function(){var enable=false;if(this.model.value==PrivacyBaseValue.EVERYONE||this.model.value==PrivacyBaseValue.OPEN||this.model.friends==PrivacyFriendsValue.EVERYONE){this.public_search.style.display='block';}else{this.public_search.style.display='none';enable=true;}
var inputs=this.search_net.getElementsByTagName('input');for(var i=0;i<inputs.length;++i){if(enable){inputs[i].disabled=false;}else{inputs[i].disabled=true;}}
if(enable){this.search_net.style.display='block';}else{this.search_net.style.display='none';}},model_write_to_view:function(){var displaySummary=this.summary_select.options[this.summary_select.options.selectedIndex].innerHTML;DOM.setText($('summary_text_view_'+this.fbid),displaySummary);this.model_write_to_summary('_view');},model_write_to_summary:function(id_suffix){var suffix=id_suffix||'';if(this.model.value!=PrivacyBaseValue.CUSTOM){var values=this.interpret_value(this.model.value);var select_display_value=this.select_display_value(this.model.value,values.friends,values.networks,[],[]);this.model.friends=values.friends;this.model.networks=values.networks;}else{var select_display_value=this.select_display_value(this.model.value,this.model.friends,this.model.networks,this.model.lists,this.model.ids_anon);}
set_form_select_value(this.summary_select,select_display_value);this.summary_toggle_advanced_link(select_display_value);this.summary_update_select_text(select_display_value);var x=false;if(!this.out_of_range['except']){if(this._model_write_summary_lists('lists_x','summary_lists_x'+suffix)){x=true;}
if(this._model_write_summary_lists('ids_x_anon','summary_names_x'+suffix)){x=true;}}
if(x){CSS.removeClass(this.$('summary_except'+suffix),'collapsed');}else{CSS.addClass(this.$('summary_except'+suffix),'collapsed');}
if(select_display_value==PrivacyBaseValue.CUSTOM){if(this.model.friends==PrivacyFriendsValue.EVERYONE){CSS.addClass(this.$('summary_custom'+suffix),'collapsed');CSS.addClass(this.$('summary_networks'+suffix),'collapsed');CSS.addClass(this.$('summary_friends'+suffix),'collapsed');CSS.addClass(this.$('summary_lists'+suffix),'collapsed');CSS.addClass(this.$('summary_names'+suffix),'collapsed');}else{CSS.removeClass(this.$('summary_custom'+suffix),'collapsed');network_names=[];if(this.model.networks.length>0){for(var i=0;i<this.model.networks.length;++i){network_names.push('<li><a href="/networks/?nk='+this.model.networks[i]+'">'+this.networks[this.model.networks[i]]['name']+'</a></li>');}
this.$('summary_networks'+suffix).innerHTML='<ul>'+network_names.join('')+'</ul>';CSS.removeClass(this.$('summary_networks'+suffix),'collapsed');}else if(this.model.networks===PrivacyNetworksAll){this.$('summary_networks'+suffix).innerHTML='<ul><li>'+_tx("All of My Networks")+'</li></ul>';CSS.removeClass(this.$('summary_networks'+suffix),'collapsed');}else{CSS.addClass(this.$('summary_networks'+suffix),'collapsed');}
switch(parseInt(this.model.friends)){case PrivacyFriendsValue.ALL_FRIENDS:CSS.addClass(this.$('summary_friends_fof'+suffix),'collapsed');CSS.removeClass(this.$('summary_friends_all'+suffix),'collapsed');CSS.removeClass(this.$('summary_friends'+suffix),'collapsed');CSS.addClass(this.$('summary_friends_only_me'+suffix),'collapsed');break;case PrivacyFriendsValue.FRIENDS_OF_FRIENDS:CSS.addClass(this.$('summary_friends_all'+suffix),'collapsed');CSS.removeClass(this.$('summary_friends_fof'+suffix),'collapsed');CSS.removeClass(this.$('summary_friends'+suffix),'collapsed');CSS.addClass(this.$('summary_friends_only_me'+suffix),'collapsed');break;case PrivacyFriendsValue.NO_FRIENDS:CSS.addClass(this.$('summary_friends_all'+suffix),'collapsed');CSS.addClass(this.$('summary_friends_fof'+suffix),'collapsed');CSS.removeClass(this.$('summary_friends'+suffix),'collapsed');CSS.removeClass(this.$('summary_friends_only_me'+suffix),'collapsed');break;default:CSS.addClass(this.$('summary_friends'+suffix),'collapsed');break;}
if(this.model.friends==PrivacyFriendsValue.SOME_FRIENDS){this._model_write_summary_lists('lists','summary_lists'+suffix);this._model_write_summary_lists('ids_anon','summary_names'+suffix);}else{CSS.addClass(this.$('summary_lists'+suffix),'collapsed');CSS.addClass(this.$('summary_names'+suffix),'collapsed');}}
CSS.removeClass(this.$('summary'+suffix),'simple');CSS.removeClass(this.$('summary'+suffix),'except');if(x){CSS.addClass(this.$('summary'+suffix),'except_custom');}else{CSS.removeClass(this.$('summary'+suffix),'except_custom');}}else{CSS.addClass(this.$('summary_custom'+suffix),'collapsed');CSS.removeClass(this.$('summary'+suffix),'except_custom');CSS.addClass(this.$('summary'+suffix),'simple');if(x&&select_display_value!=PrivacyBaseValue.NOBODY&&select_display_value!=PrivacyBaseValue.SELF){CSS.addClass(this.$('summary'+suffix),'except');}else{CSS.removeClass(this.$('summary'+suffix),'except');}}},_model_write_summary_lists:function(source,target){var elems=this.model[source];var is_list=(source.indexOf('lists')!=-1);if(elems.length>0){if(is_list){var str='<ul>';}else{var str=[];}
if(!is_list){var min=Math.min(2,elems.length);}else{var min=elems.length;}
for(var i=0;i<min;++i){if(is_list){str+='<li>'+this.tdata[elems[i]]+'</li>';}else{str.push('<a href="/profile.php?id='+elems[i]+'">'+this.tdata[elems[i]]+'</a>');}}
if(!is_list){if(elems.length==3){if(is_list){str+='<li>'+this.tdata[elems[2]]+'</li>';}else{str.push('<a href="/profile.php?id='+elems[2]+'">'+this.tdata[elems[2]]+'</a>');}}else if(elems.length>3){str.push(_tx("{num} others",{'num':String(elems.length-2)}));}
this.$(target).innerHTML=str.join(', ');}else{str+='</ul>';this.$(target).innerHTML=str;}
CSS.removeClass(this.$(target),'collapsed');return true;}else{CSS.addClass(this.$(target),'collapsed');return false;}},model_simplify:function(){},form_save_value:function(elem,value){this.$(elem).value=value;},form_save_array:function(dest,arr){var name=dest+'_'+this.fbid+'[]';var dest=this.$('inputs_'+dest);html='';if(arr instanceof Array){for(var i=0;i<arr.length;++i){html+='<input type="hidden" name="'+name+'" value="'+arr[i]+'" />';}}else{html+='<input type="hidden" name="'+name+'" value="'+arr+'" />';}
dest.innerHTML=html;},adv_onfs_some:function(p){if(p===false){return;}
this.clear();var fbid=this.obj.getAttribute('fbid');var instance=PrivacyWidgetInstance[fbid];instance.adv_add_token(p,'some');instance.dialog.reset_dialog();return false;},adv_onfs_except:function(p){if(p===false){return;}
this.clear();var fbid=this.obj.getAttribute('fbid');var instance=PrivacyWidgetInstance[fbid];instance.adv_add_token(p,'except');instance.dialog.reset_dialog();return false;},adv_add_token:function(p,type){var reverse_types={'some':'except','except':'some'};var id=null;if(p.flid){id=p.flid;}else if(p.i){id=p.i;}
var container_div=this.$(type+'_friends_container');var container=container_div.childNodes[0];var container_inputs=container.getElementsByTagName('input');for(var i=0;i<container_inputs.length;++i){if(container_inputs[i].value==id){return;}}
var container_elements=container.getElementsByTagName('li');if(p.i){var has_names=false;var names_container;var names_container_text;for(var i=0;i<container_elements.length;i++){if(CSS.hasClass(container_elements[i],'friends_names')){has_names=true;names_container=container_elements[i];names_container_text=names_container.childNodes[1];break;}}
if(!has_names){names_container=document.createElement('li');CSS.setClass(names_container,'friends_names clearfix');var icon_div=document.createElement('div');icon_div.appendChild(document.createTextNode(''));CSS.setClass(icon_div,'icon');var text_area=document.createElement('div');CSS.setClass(text_area,'text_area');names_container.appendChild(icon_div);names_container.appendChild(text_area);names_container_text=text_area;if(container.childNodes>0){container.insertBefore(names_container,container.childNodes[0]);}else{container.appendChild(names_container);}}
names_container_text.innerHTML+=this.adv_gen_token(id,p.t);}else{for(var i=0;i<container.childNodes.length;i++){var li=container.childNodes[i];var inputs=li.getElementsByTagName('input');for(var i2=0;i2<inputs.length;i2++){if(inputs[i2].type=='hidden'){if(inputs[i2].value==id){var has_fl=true;}
break;}}
if(has_fl){break;}}
if(!has_fl){var friend_list_li=document.createElement('li');CSS.setClass(friend_list_li,'friends_lists clearfix');var icon_div=document.createElement('div');CSS.setClass(icon_div,'icon');var text_area=document.createElement('div');CSS.setClass(text_area,'text_area');friend_list_li.appendChild(icon_div);friend_list_li.appendChild(text_area);text_area.innerHTML=this.adv_gen_token(id,p.t);container.appendChild(friend_list_li);}}
this.edit_preset();this.tdata[id]=p.t;CSS.removeClass(container_div,'empty');},adv_gen_token:function(id,name){var js='PrivacyWidget.prototype.adv_rem_token(this, '+this.fbid+');';var html='<a class="token"><span><span><span><span>'+
name+'<input type="hidden" name="ids[]" value="'+id+'" />'+'<span class="x" onmouseout="CSS.setClass(this, \'x\');" onmouseover="CSS.setClass(this, \'x_hover\');" onclick="event.cancelBubble=true;'+js+'return false;">&nbsp;</span>'+'</span></span></span></span></a>';return html;},adv_rem_token:function(span,fbid){var instance=PrivacyWidgetInstance[fbid];if(instance.mode=='prompt'){animation(instance.prompt).from('background','#ffeeee').to('background','#fff').duration(250).go();return false;}
instance.dialog.reset_dialog();var anchor=span.parentNode.parentNode.parentNode.parentNode.parentNode;var container=anchor.parentNode.parentNode;var container_parent=container.parentNode;if(CSS.hasClass(container,'friends_lists')){container.parentNode.removeChild(container);}else{container.childNodes[1].removeChild(anchor);if(container.childNodes[1].childNodes.length==0){container.parentNode.removeChild(container);}}
if(container_parent.childNodes.length==0){CSS.addClass(container_parent.parentNode,'empty');}},adv_onselect:function(){this.edit_value(get_form_select_value(this.advanced_select));},adv_onclick_edit_settings:function(){this.edit_value(PrivacyBaseValue.CUSTOM);},adv_onclick_friends_radio:function(value){this.edit_everyone(false);if(value==PrivacyFriendsValue.SOME_FRIENDS){if(!this.out_of_range['some_friends']){CSS.removeClass(this.$('some_friends'),'collapsed');this.$('fs_some').focus();}}else{if(!this.out_of_range['some_friends']){CSS.addClass(this.$('some_friends'),'collapsed');}}
this.edit_preset();},adv_onclick_networks_select:function(value){this.edit_networks(this.adv_read_networks(),(this.adv_read_networks_select()=='some'));this.edit_everyone(false);this.edit_preset();},adv_onclick_networks_checkbox:function(value){this.edit_preset();},adv_onclick_everyone:function(){var checked=this.$('advanced_everyone').getElementsByTagName('input')[0].checked;if(checked){this.edit_friends(PrivacyFriendsValue.EVERYONE);}else if(!this.toggle_everyone){this.edit_networks(PrivacyNetworksAll);}
this.edit_preset();this.toggle_everyone=true;},adv_onclick_cancel:function(){this.model_write_to_summary();if(!this.properties.prevent_dialog_fade_out){this.dialog.fade_out(null,null,function(){this.hide_advanced();}.bind(this));}else{this.dialog.hide();this.hide_advanced();}},adv_onclick_save:function(){var cold=this.model.ids_anon.length;var some_names=this.adv_read_custom_ids('some','names');var cnew=some_names.length;var prompt=false;if(cnew!=cold&&cnew>=3){prompt='some';}
if(!prompt){cold=this.model.ids_x_anon.length;some_names=this.adv_read_custom_ids('except','names');cnew=some_names.length;if(cnew!=cold&&cnew>=3){prompt='except';}}
this.model_read_from_adv();this.model_write_to_form();this.model_write_to_summary();if(prompt){this.adv_show_prompt(prompt);}else{if(!this.properties.prevent_dialog_fade_out){this.dialog.fade_out(null,null,function(){this.root.appendChild(this.advanced);}.bind(this));}else{this.dialog.hide();this.root.appendChild(this.advanced);}}
this.on_save();},adv_show_prompt:function(type){this.mode='prompt';this.$('savelist').onclick=bind(this,'adv_onclick_savelist',type);this.$('savelist').disabled=false;this.$('listname').value='';this.dialog.content.childNodes[0].childNodes[0].innerHTML=_tx("Create a Friend List?");var some_ids=this.adv_read_custom_ids(type,'names');var token_html='';for(var i=0;i<some_ids.length;i++){token_html+=this.adv_gen_token(some_ids[i],this.tdata[some_ids[i]]);}
this.$('prompt_tokens').innerHTML=token_html;var cls='privacy_widget privacy_widget_pop';var id='privacy_pop_'+this.fbid;this.root.appendChild(this.advanced);$(id).appendChild(this.prompt);this.$('listname').focus();},adv_onclick_savelist:function(type){if(!this.$('listname').value){this.$('listname').focus();animation(this.$('listname')).from('background','#ffc0c0').to('background','#ffffff').duration(500).go();return;}
this.$('savelist').disabled=true;var data=serialize_form(this.prompt);new AsyncRequest().setURI('/privacy/ajax/lists.php').setData(data).setHandler(bind(this,'_adv_savelist',type)).setErrorHandler(bind(this,'_adv_savelist',type)).send();},_adv_savelist:function(type,r){if(r.getError()==kError_Privacy_FriendListNameAlreadyExists){this.dialog.is_stackable=true;ErrorDialog.showAsyncError(r);this.$('savelist').disabled=false;return;}
var payload=r.getPayload();if(payload&&(flid=payload.flid)){if(window.friendlist_source){friendlist_source.dirty();}
this.tdata[flid]=r.getPayload().name;if(type=='some'){this.model.ids_anon=[];this.model.lists.push(flid);}else{this.model.ids_x_anon=[];this.model.lists_x.push(flid);}
this.model_write_to_form();this.model_write_to_summary();}
if(!this.properties.prevent_dialog_fade_out){this.dialog.fade_out(null,null,function(){this.root.appendChild(this.prompt);}.bind(this));}else{this.dialog.hide();this.root.appendChild(this.prompt);}},adv_onclick_nothanks:function(){if(!this.properties.prevent_dialog_fade_out){this.dialog.fade_out(null,null,function(){this.root.appendChild(this.prompt);}.bind(this));}else{this.dialog.hide();this.root.appendChild(this.prompt);}},adv_toggle_except:function(){CSS.toggleClass(this.$('advanced_except'),'collapsed');return false;},adv_toggle_networks:function(){CSS.toggleClass(this.$('advanced_networks'),'collapsed');return false;},edit_preset:function(){set_form_select_value(this.$('advanced_select'),this.adv_reverse_preset_value());this.edit_friends(this.adv_read_friends());this.dialog.reset_dialog();},select_display_value:function(value,friends,networks,some_lists,some_names,check_if_exists){if(check_if_exists==null){var check_if_exists=true;}
var current_value=null;if(friends!=null){switch(friends){case PrivacyFriendsValue.EVERYONE:current_value=PrivacyBaseValue.EVERYONE;break;case PrivacyFriendsValue.NETWORKS_FRIENDS:current_value=PrivacyBaseValue.NETWORKS_FRIENDS;break;case PrivacyFriendsValue.SOME_FRIENDS:current_value=PrivacyBaseValue.CUSTOM;break;case PrivacyFriendsValue.ALL_FRIENDS:current_value=PrivacyBaseValue.ALL_FRIENDS;break;case PrivacyFriendsValue.FRIENDS_OF_FRIENDS:current_value=PrivacyBaseValue.FRIENDS_OF_FRIENDS;break;case PrivacyFriendsValue.NO_FRIENDS:current_value=PrivacyBaseValue.SELF;break;}}
if(current_value!=PrivacyBaseValue.EVERYONE){if(networks!==PrivacyNetworksAll&&networks.length!=0){if(networks.length==1&&(friends==PrivacyFriendsValue.NO_FRIENDS)&&this.networks[networks[0]]['type']==PrivacyNetworkTypes.TYPE_CORP&&this.networks[networks[0]]['primary']==true){current_value=PrivacySpecialPreset.ONLY_CORP_NETWORK;}else if(networks.length==1&&(friends==PrivacyFriendsValue.FRIENDS_OF_FRIENDS)&&this.networks[networks[0]]['type']==PrivacyNetworkTypes.TYPE_COLLEGE&&this.networks[networks[0]]['primary']==true){current_value=PrivacySpecialPreset.COLLEGE_NETWORK_FRIENDS_OF_FRIENDS;}else if(networks.length==1&&(friends==PrivacyFriendsValue.ALL_FRIENDS)&&this.networks[networks[0]]['type']==PrivacyNetworkTypes.TYPE_COLLEGE&&this.networks[networks[0]]['primary']==true){current_value=PrivacySpecialPreset.COLLEGE_NETWORK_FRIENDS;}else{current_value=PrivacyBaseValue.CUSTOM;}}
if(networks===PrivacyNetworksAll){if(friends==PrivacyFriendsValue.ALL_FRIENDS){current_value=PrivacyBaseValue.NETWORKS_FRIENDS;}else if(friends==PrivacyFriendsValue.FRIENDS_OF_FRIENDS){current_value=PrivacyBaseValue.NETWORKS_FRIENDS_OF_FRIENDS;}else{current_value=PrivacyBaseValue.CUSTOM;}}}
if(!current_value){if(value==PrivacyBaseValue.EVERYONE){current_value=PrivacyBaseValue.EVERYONE;friends=PrivacyFriendsValue.EVERYONE;}
if(value==PrivacyBaseValue.SELF){current_value=PrivacyBaseValue.SELF;friends=PrivacyFriendsValue.NO_FRIENDS;}}
if(!current_value){current_value=value;}
if(friends===PrivacyFriendsValue.SOME_FRIENDS&&some_lists.length==0&&some_names.length==0&&networks!==PrivacyNetworksAll&&networks.length==0){current_value=PrivacyBaseValue.NOBODY;if(!this._model_preset_exists(current_value)){if(this._model_preset_exists(current_value)){current_value=PrivacyBaseValue.SELF;}else if(this.adv_friends_value_exists(PrivacyFriendsValue.NO_FRIENDS)){current_value=PrivacyBaseValue.SELF;}else{current_value=PrivacyBaseValue.ALL_FRIENDS;}}}
if(friends===PrivacyFriendsValue.NO_FRIENDS&&networks!==PrivacyNetworksAll&&networks.length==0){current_value=PrivacyBaseValue.SELF;}
if(check_if_exists&&!this._model_preset_exists(current_value)){return PrivacyBaseValue.CUSTOM;}
return current_value;},get_model_value:function(display_value,lists_x,ids_anon_x){if(display_value==PrivacyBaseValue.CUSTOM){return display_value;}else{if(display_value===PrivacyBaseValue.NOBODY){return PrivacyBaseValue.NOBODY;}
for(var k in PrivacySpecialPreset){if(display_value==PrivacySpecialPreset[k]){return PrivacyBaseValue.CUSTOM;}}
if(((lists_x&&lists_x.length>0)||(ids_anon_x&&ids_anon_x.length>0))&&display_value!=PrivacyBaseValue.SELF&&display_value!=PrivacyBaseValue.NOBODY){return PrivacyBaseValue.CUSTOM;}
return display_value;}},adv_read_friends:function(){if(this.adv_read_everyone()==true){return PrivacyFriendsValue.EVERYONE;}
var friends=this.$('advanced_friends_radios').getElementsByTagName('input');for(var i=0;i<friends.length;i++){if(friends[i].type=='radio'){if(friends[i].checked){return parseInt(friends[i].value);}}}},adv_friends_value_exists:function(value){if(value==PrivacyFriendsValue.EVERYONE){if(this.out_of_range['everyone']){return false;}else{return true;}}
var friends=this.$('advanced_friends_radios').getElementsByTagName('input');for(var i=0;i<friends.length;i++){if(friends[i].type=='radio'&&parseInt(friends[i].value)===value){return true;}}
return false;},adv_read_everyone:function(){if(!this.out_of_range['everyone']){return this.$('advanced_everyone').getElementsByTagName('input')[0].checked;}},adv_read_custom_ids:function(type,entity){if(type=='some'&&this.out_of_range['some_friends']){return[];}
if(type=='except'&&this.out_of_range['except']){return[];}
var container_div=this.$(type+'_friends_container');var container=container_div.childNodes[0];var returns=[];if(container.childNodes.length>0){for(var i=0;i<container.childNodes.length;i++){if(CSS.hasClass(container.childNodes[i],'friends_'+entity)){var inputs=container.childNodes[i].getElementsByTagName('input');for(var i2=0;i2<inputs.length;i2++){returns.push(inputs[i2].value);}}}}
return returns;},adv_read_networks_select:function(){return get_form_select_value(this.$('advanced_networks_select'));},adv_read_networks:function(){if(this.out_of_range['networks']){return[];}
var select_value=this.adv_read_networks_select();if(select_value!='some'){if(select_value=='none'){return[];}else if(select_value=='all'){return PrivacyNetworksAll;}}
var selected_networks=[];var networks=this.$('advanced_networks_checkboxes').getElementsByTagName('input');for(var i=0;i<networks.length;i++){if(networks[i].checked){selected_networks.push(networks[i].value);}}
return selected_networks;},adv_all_networks:function(){if(this.out_of_range['networks']){return[];}
var inputs=this.$('advanced_networks_checkboxes').getElementsByTagName('input');var networks=[];for(var i=0;i<inputs.length;i++){networks.push(inputs[i].value);}
return networks;},adv_reverse_preset_value:function(check_if_exists){return this.select_display_value(get_form_select_value(this.$('advanced_select')),this.adv_read_friends(),this.adv_read_networks(),this.adv_read_custom_ids('some','lists'),this.adv_read_custom_ids('some','names'),check_if_exists);},interpret_value:function(value){var friends=PrivacyFriendsValue.NO_FRIENDS;var everyone=false;var networks=[];var self=false;value=parseInt(value);switch(value){case PrivacyBaseValue.OPEN:case PrivacyBaseValue.EVERYONE:friends=PrivacyFriendsValue.EVERYONE;everyone=true;break;case PrivacyBaseValue.FRIENDS_OF_FRIENDS:friends=PrivacyFriendsValue.FRIENDS_OF_FRIENDS;networks=[];break;case PrivacyBaseValue.NETWORKS_FRIENDS_OF_FRIENDS:friends=PrivacyFriendsValue.FRIENDS_OF_FRIENDS;networks=PrivacyNetworksAll;break;case PrivacySpecialPreset.COLLEGE_NETWORK_FRIENDS_OF_FRIENDS:friends=PrivacyFriendsValue.FRIENDS_OF_FRIENDS;networks=[];for(var k in this.networks){if(this.networks[k]['primary']==true&&this.networks[k]['type']==PrivacyNetworkTypes.TYPE_COLLEGE){networks.push(k);break;}}
break;case PrivacySpecialPreset.COLLEGE_NETWORK_FRIENDS:friends=PrivacyFriendsValue.ALL_FRIENDS;networks=[];for(var k in this.networks){if(this.networks[k]['primary']==true&&this.networks[k]['type']==PrivacyNetworkTypes.TYPE_COLLEGE){networks.push(k);break;}}
break;case PrivacySpecialPreset.ONLY_CORP_NETWORK:friends=PrivacyFriendsValue.NO_FRIENDS;networks=[];for(var k in this.networks){if(this.networks[k]['primary']==true&&this.networks[k]['type']==PrivacyNetworkTypes.TYPE_CORP){networks.push(k);break;}}
break;case PrivacyBaseValue.NETWORKS_FRIENDS:friends=PrivacyFriendsValue.ALL_FRIENDS;networks=PrivacyNetworksAll;break;case PrivacyBaseValue.ALL_FRIENDS:friends=PrivacyFriendsValue.ALL_FRIENDS;networks=[];break;case PrivacyBaseValue.SELF:friends=PrivacyFriendsValue.NO_FRIENDS;break;case PrivacyBaseValue.NOBODY:friends=PrivacyFriendsValue.SOME_FRIENDS;break;}
return{friends:friends,everyone:everyone,networks:networks,self:self};},edit_value:function(value,hidden){this.undo.push(value);value=parseInt(value);if(value&&value!=PrivacyBaseValue.CUSTOM){var values=this.interpret_value(value);this.edit_networks(values.networks);this.edit_everyone(values.everyone);this.edit_self(values.self);this.edit_friends(values.friends)}else{if(!this.out_of_range['some_friends']){this.edit_friends(PrivacyFriendsValue.SOME_FRIENDS);if(!hidden){this.$('fs_some').focus();}}
this.edit_networks([]);set_form_select_value(this.$('advanced_select'),PrivacyBaseValue.CUSTOM);this.edit_preset();}
if(!this._model_preset_exists(value)){set_form_select_value(this.$('advanced_select'),this.select_display_value(value,this.adv_read_friends(),this.adv_read_networks(),this.adv_read_custom_ids('some','lists'),this.adv_read_custom_ids('some','names')));}},edit_friends:function(friends){if(friends==PrivacyFriendsValue.EVERYONE){this.edit_everyone(true);friends=PrivacyFriendsValue.FRIENDS_OF_FRIENDS;this.edit_networks(PrivacyNetworksAll);}else{this.edit_everyone(false);}
if(!this.friends_radios){var friends_items=this.$('advanced_friends_radios').getElementsByTagName('input');this.friends_radios=[];for(var i=0;i<friends_items.length;i++){if(friends_items[i].type=='radio'){this.friends_radios.push(friends_items[i]);}}}
if(!this.friends_radio_items){var divs=this.$('advanced_friends_radios').getElementsByTagName('div');this.friends_radio_items=[];for(var i=0;i<divs.length;i++){if(CSS.hasClass(divs[i],'advanced_friends_radio_item')){this.friends_radio_items.push(divs[i]);}}}
for(var i=0;i<this.friends_radios.length;++i){var checked=(friends==this.friends_radios[i].value)?'checked':false;this.friends_radios[i].checked=checked;if(checked){CSS.addClass(this.friends_radio_items[i],'selected');}else{CSS.removeClass(this.friends_radio_items[i],'selected');}}
if(!this.out_of_range['some_friends']){if(friends==PrivacyFriendsValue.SOME_FRIENDS){CSS.removeClass(this.$('some_friends'),'collapsed');}else{CSS.addClass(this.$('some_friends'),'collapsed');}}},edit_networks:function(networks,force_some){if(this.out_of_range['networks']){return;}
var select_value;if(networks!==PrivacyNetworksAll&&(networks.length!=0||force_some)){networks_enabled=networks;select_value='some';CSS.removeClass(this.$('advanced_networks'),'no_checkboxes');var networks=this.$('advanced_networks_checkboxes');var inputs=networks.getElementsByTagName('input');for(var i2=0;i2<inputs.length;++i2){on=false;if(networks_enabled.length>0){for(var i=0;i<networks_enabled.length;i++){if(networks_enabled[i]==inputs[i2].value){inputs[i2].checked=true;on=true;}}
if(!on){inputs[i2].checked=false;}}else{inputs[i2].checked=false;}}}
if(networks===PrivacyNetworksAll||networks.length==0){CSS.addClass(this.$('advanced_networks'),'no_checkboxes');if(networks===PrivacyNetworksAll){select_value='all';}else{select_value='none';}}
set_form_select_value(this.$('advanced_networks_select'),select_value);},edit_everyone:function(on){if(!this.out_of_range['everyone']){this.$('advanced_everyone').getElementsByTagName('input')[0].checked=on;if(!this.out_of_range['networks']){if(on){CSS.setOpacity(this.$('advanced_networks'),0.7);CSS.setOpacity(this.$('advanced_friends_radios'),0.7);}else{CSS.setOpacity(this.$('advanced_networks'),1);CSS.setOpacity(this.$('advanced_friends_radios'),1)}}}},edit_self:function(on){if(on){this.edit_friends(PrivacyFriendsValue.NO_FRIENDS);}},set_friends_radio:function(value){var friends_options=this.$('advanced_friends_radios').getElementsByTagName('input');for(var i=0;i<friends_options.length;i++){if(parseInt(friends_options[i].value)==value){friends_options[i].checked=true;break;}}},show_advanced:function(){if(this.dialog&&this.dialog.obj){return false;}
this.mode='advanced';var cls='privacy_widget privacy_widget_pop';var id='privacy_pop_'+this.fbid;this.dialog=new pop_dialog('privacy_widget');if(!this.properties.prevent_dialog_expand_animation){this.dialog.show_loading_title(_tx("Edit Privacy Settings"));this.dialog.do_expand_animation=true;}
this.dialog.show_prompt((this.dialog_title?this.dialog_title:_tx("Edit Privacy Settings")),'<div class="'+cls+'" id="'+id+'"></div>');$(id).appendChild(this.advanced);this.model_write_to_adv();this.dialog.reset_dialog();return false;},hide_advanced:function(){this.root.appendChild(this.advanced);CSS.setOpacity(this.dialog.obj,1);},summary_onselect:function(){var value=parseInt(get_form_select_value(this.summary_select));this.summary_update_select_text(value);if(value==PrivacyBaseValue.CUSTOM){this.show_advanced();}else{CSS.addClass(this.$('summary'),'simple');if((this.model.lists_x.length>0||this.model.ids_x_anon.length>0)&&value!=PrivacyBaseValue.NOBODY&&value!=PrivacyBaseValue.SELF){CSS.addClass(this.$('summary'),'except');}else{CSS.removeClass(this.$('summary'),'except');}
var values=this.interpret_value(parseInt(value));this.model.friends=values.friends;this.model.networks=values.networks;this.model.value=this.get_model_value(parseInt(value),this.model.lists_x,this.model.ids_x_anon);this.model_write_to_form();this.on_save();}
this.summary_toggle_advanced_link(value);},summary_toggle_advanced_link:function(value){var show_advanced=false;if((this.model.lists_x.length>0||this.model.ids_x_anon.length>0)&&value!=PrivacyBaseValue.NOBODY&&value!=PrivacyBaseValue.SELF){show_advanced=true;}else if(value==PrivacyBaseValue.CUSTOM){show_advanced=true;}
if(show_advanced){this.$('show_advanced_custom').style.display='';}else{this.$('show_advanced_custom').style.display='none';}},summary_update_select_text:function(value){if(value!=PrivacyBaseValue.CUSTOM){value_text=_tx("Customize...");}else{value_text=_tx("Custom");}
for(var i=(this.summary_select.options.length-1);i>=0;--i){if(this.summary_select.options[i].value==PrivacyBaseValue.CUSTOM){this.summary_select.options[i].innerHTML=value_text;break;}}},set_on_save_handler:function(handler){this.save_handler=handler;},on_save:function(){if(this.save_handler){this.save_handler(serialize_form(this.root),this);}},is_me_or_nobody:function(){if(this.model.value==PrivacyBaseValue.SELF||this.model.value==PrivacyBaseValue.NOBODY||(this.model.value==PrivacyBaseValue.CUSTOM&&this.model.friends==PrivacyFriendsValue.NO_FRIENDS&&this.model.networks.length==0)){return true;}
return false;}});function privacy_profile_wall_check(form_data,instance){if(instance.is_me_or_nobody()){CSS.addClass($('privacy_profile_wall_setting'),'wall_setting_disabled');$('wall_setting').checked=false;$('wall_setting').disabled=true;$('has_wall_setting').value=0;}else{CSS.removeClass($('privacy_profile_wall_setting'),'wall_setting_disabled');$('wall_setting').disabled=false;$('wall_setting').checked=true;$('has_wall_setting').value=1;}}

function static_source(){this.values=null;this.index=null;this.index_includes_hints=false;this.exclude_ids={};this.parent.construct(this);}
static_source.extend('typeahead_source');static_source.prototype.enumerable=true;static_source.prototype.filter_excluded=function(values){return values.filter((function(value){return!this.exclude_ids[value.i];}).bind(this));}
static_source.prototype.build_index=function(){var index=[];var values=this.values;var gen_id=values.length&&typeof values[0].i=='undefined';for(var i=0,il=values.length;i<il;i++){var tokens=typeahead_source.tokenize(values[i].t);for(var j=0,jl=tokens.length;j<jl;j++){index.push({t:tokens[j],o:values[i]});}
if(this.index_includes_hints&&values[i].s){var tokens=typeahead_source.tokenize(values[i].s);for(var j=0,jl=tokens.length;j<jl;j++){index.push({t:tokens[j],o:values[i]});}}
if(gen_id){values[i].i=i;}}
index.sort(function(a,b){return(a.t==b.t)?0:(a.t<b.t?-1:1)});this.index=index;this.ready();}
static_source.prototype._sort_text_obj=function(a,b){if(a.e&&!b.e){return 1;}
if(!a.e&&b.e){return-1;}
return a.t.localeCompare(b.t);}
static_source.prototype.search_value=function(text){if(!this.is_ready){return;}
var results;if(text==''){results=this.values;}else{var ttext=typeahead_source.tokenize(text).sort(typeahead_source._sort);var index=this.index;var lo=0;var hi=this.index.length-1;var p=Math.floor(hi/2);while(lo<=hi){if(index[p].t>=ttext[0]){hi=p-1;}else{lo=p+1;}
p=Math.floor(lo+((hi-lo)/2));}
var results=[];var stale_keys={};var check_ignore=typeof _ignoreList!='undefined';for(var i=lo;i<index.length&&index[i].t.lastIndexOf(ttext[0],0)!=-1;i++){var elem_id=index[i].o.flid?index[i].o.flid:index[i].o.i;if(typeof stale_keys[elem_id]!='undefined'){continue;}else{stale_keys[elem_id]=true;}
if((!check_ignore||!_ignoreList[elem_id])&&!this.exclude_ids[elem_id]&&(ttext.length==1||typeahead_source.check_match(ttext,index[i].o.t))){results.push(index[i].o);}}}
results.sort(this._sort_text_obj.bind(this));if(this.owner&&this.owner.max_results){results=results.slice(0,this.owner.max_results);}
return results;}
static_source.prototype.set_exclude_ids=function(ids){this.exclude_ids=ids;}

function friend_source(get_param){this.bootstrap=this.bootstrap.bind(this,get_param);this.parent.construct(this);}
friend_source.extend('static_source');friend_source.prototype.text_noinput=friend_source.prototype.text_placeholder=_tx("Start typing a name");friend_source.friends={};friend_source.friends_index={};friend_source.prototype.cache_results=true;friend_source.prototype.bootstrap=function(get_param){if(friend_source.friends[get_param]){this.values=friend_source.friends[get_param];this.index=friend_source.friends_index[get_param];this.ready();}else{new AsyncRequest().setMethod('GET').setReadOnly(true).setURI('/ajax/typeahead_friends.php?'+get_param).setHandler(function(response){friend_source.friends[get_param]=this.values=this.filter_excluded(response.getPayload().friends);this.build_index();friend_source.friends_index[get_param]=this.index;}.bind(this)).disableNectar().send();}}
friend_source.dirty=function(){friend_source.friends={};friend_source.friends_index={};typeaheadpro.dirty_instances();}
friend_source.prototype.gen_html=function(friend,highlight){var text=friend.n||'&nbsp;';if(friend.n===false){text=_tx("0 friends");}else if(typeof(friend.n)=="object"){var names=[];for(var k in friend.n){names.push(friend.n[k]);}
if(names.length>3){text=_tx("{name1}, {name2}, {count} others",{name1:names[0],name2:names[1],count:names.length-2});}else if(names.length){text=names.join(', ');}else{text=_tx("0 friends");}}
return['<div>',typeahead_source.highlight_found(friend.t,highlight),'</div><div><small>',text,'</small></div>'].join('');}
friend_source.prototype.search_value=function(text){if(text=='\x5e\x5f\x5e'){return[{t:text,n:'\x6b\x65\x6b\x65',i:10,it:'http://static.ak.facebook.com/pics/t_default.jpg'}];}
return this.parent.search_value(text);}

function friendlist_source(get_param){this.parent.construct(this,get_param);this.generation=0;}
friendlist_source.extend('friend_source');friendlist_source.master_generation=1;friendlist_source.dirty=function(){friend_source.dirty();friendlist_source.master_generation++;}
friendlist_source.prototype.friend_lists=false;friendlist_source.prototype.text_placeholder=_tx("Start typing the name of a friend or friend list...");friendlist_source.prototype.return_friend_lists=function(){if(!this.friend_lists||(this.generation<friendlist_source.master_generation)||(this.friend_lists&&this.friend_lists.length==0)){this.generation=friendlist_source.master_generation;this.friend_lists=[];var index=this.index;var results=[];var pushed=[];if(!index.length||!(index.length>=1)){return;}
for(var i=0;i<index.length;i++){if(index[i].o.flid&&!pushed[index[i].o.flid]){pushed[index[i].o.flid]=true;results.push(index[i].o);}}
var results_sorted=results.sort(function(a,b){if(a.t>b.t)return 1;else if(a.t<b.t)return-1;else return 0;});this.friend_lists=results_sorted;}
return this.friend_lists;}
friendlist_source.prototype.search_value=function(text){if(text=='**FRIENDLISTS**'){return this.return_friend_lists();}
return this.parent.search_value(text);}
friendlist_source.prototype.gen_nomatch=function(){if(this.showing_icon_list){return _tx("You do not have any friend lists. Use the friends page to create a list.");}else{return this.parent.gen_nomatch();}}

function show_edit_app_dialog(app_id,profile_id,visible_tab,handlers){EditAppSettings.setup(app_id,profile_id,true,visible_tab,handlers);}
EditAppSettings={currentTab:undefined,dialogUrl:'/ajax/editapp_dialog.php',callbackUrl:'/ajax/edit_app_settings.php',statusElement:'edit_app_settings_save_fill',appID:0,uiMode:false,setup:function(appID,profileID,uiMode,currentTab,handlers){this.appID=appID;this.profileID=profileID;this.uiMode=uiMode;this.currentTab=currentTab;this.setupHandlers(handlers||{});if(this.uiMode){this.showDialog(this.dialogHandler);}
return this;},_getCurrentTab:function(){if(!this.currentTab){var tabs=['profile','bookmarks','extended'];for(var i=0;i<tabs.length;i++){if(ge(this._getTabId(tabs[i]))){this.currentTab=tabs[i];break;}}}
return this.currentTab;},_getTabId:function(tab){return tab+'_tab_link';},setupHandlers:function(handlers){this.dialogHandler=handlers['dialogHandler']||bagofholding;this.bookmarkHandler=handlers['bookmark']||bagofholding;this.profileHandler=handlers['profile']||bagofholding;this.extendedHandler=handlers['extended']||bagofholding;},showDialog:function(handler){var async=new AsyncRequest().setURI(this.dialogUrl).setData({'app_id':this.appID,'profile_id':this.profileID,'visible_tab':this._getCurrentTab()});new Dialog().setAsync(async).setStackable(true).setHandler(handler||bagofholding).show();return this;},switchTab:function(tabName){CSS.removeClass(this._getTabId(this._getCurrentTab()),'tab_link_selected');hide('app_settings_'+this._getCurrentTab()+'_tab');CSS.addClass(this._getTabId(tabName),'tab_link_selected');show('app_settings_'+tabName+'_tab');this.currentTab=tabName;},setBookmarked:function(bookmarked){var async=new AsyncRequest().setURI(this.callbackUrl).setHandler(this.bookmarkHandler.bind(this,this.appID,bookmarked)).setData({'bookmark':1,'bookmarked':bookmarked,'profile_id':this.profileID,'app_id':this.appID});if(this.uiMode){async.setStatusElement(this.statusElement);}
async.send();},setAllowPublish:function(setting,show_minor_buttons){if(show_minor_buttons){show('app_feed_minor_buttons');}else{$('edit_app_settings_allow_publish_small_radio').checked=false;$('edit_app_settings_allow_publish_medium_radio').checked=false;hide('app_feed_minor_buttons');}
new AsyncRequest().setStatusElement(this.statusElement).setURI(this.callbackUrl).setHandler(bagofholding).setData({'publishing':1,'setting':setting,'profile_id':this.profileID,'app_id':this.appID}).send();return true;},setExtendedPermission:function(permission,allow){var async=new AsyncRequest().setURI(this.callbackUrl).setHandler(this.extendedHandler.bind(this,this.appID,permission)).setData({'extended':1,'permission':permission,'allow':allow,'profile_id':this.profileID,'app_id':this.appID});if(this.uiMode){async.setStatusElement(this.statusElement);}
async.send();return true;},makeProfileChange:function(item,action,box_tab){var async=new AsyncRequest().setURI(this.callbackUrl).setHandler(this.profileHandler.bind(this,item,this.appID)).setData({'profile':1,'item':item,'action':action,'app_id':this.appID,'profile_id':this.profileID,'box_tab':box_tab})
if(this.uiMode){async.setStatusElement(this.statusElement);}
async.send();if(this.uiMode){toggleDisplayNone('app_settings_profile_'+item+'_add');toggleDisplayNone('app_settings_profile_'+item+'_remove');}},savePrivacy:function(privacyData){privacyData['privacy']=1;privacyData['profile_id']=this.profileID;var async=new AsyncRequest().setURI(this.callbackUrl).setHandler(bagofholding).setData(privacyData);if(this.uiMode){async.setStatusElement(this.statusElement);}
async.send();},removeApplication:function(callback,rating,blurb){var handler=callback||bagofholding;var data={remove:1,app_id:this.appID,profile_id:this.profileID};if(rating){data.rating=rating;}
if(blurb){data.blurb=blurb;}
new AsyncRequest().setURI(this.callbackUrl).setHandler(handler).setData(data).send();},blockApplication:function(callback){var handler=callback||bagofholding;new AsyncRequest().setURI(this.callbackUrl).setHandler(handler).setData({'block':1,'app_id':this.appID,'profile_id':this.profileID}).send();},reorderBookmarks:function(appIDs){new AsyncRequest().setURI(this.callbackUrl).setHandler(bagofholding).setData({'reorder_bookmarks':1,'profile_id':this.profileID,'app_ids':appIDs}).send();},setExternalWebsitePolicy:function(setting){new AsyncRequest().setURI(this.callbackUrl).setHandler(bagofholding).setData({external_site:1,app_id:this.appID,profile_id:this.profileID,policy:setting}).send();},setGlobalExternalWebsitePolicy:function(setting){new AsyncRequest().setURI(this.callbackUrl).setHandler(bagofholding).setData({global_external_site:1,profile_id:this.profileID,policy:setting?1:0}).send();},setAlertSetting:function(alert_setting,is_active,callback){var handler=callback||bagofholding;var async=new AsyncRequest().setURI(this.callbackUrl).setHandler(handler).setData({'alerts':1,'alert_setting':alert_setting,'profile_id':this.profileID,'alert_value':is_active?1:0});if(this.uiMode){async.setStatusElement(this.statusElement);}
async.send();},setBlockComposer:function(block,callback){new AsyncRequest().setURI(this.callbackUrl).setHandler(callback||bagofholding).setData({composer:1,blocked_composer:block,profile_id:this.profileID,app_id:this.appID}).send();},killComposerDialog:function(app_name,context,callback){var composer_dialog=new contextual_dialog();var killComposer=function(){this.setBlockComposer(1,callback);composer_dialog.fade_out(100);}.bind(this);var title=_tx("Remove {app-name} Publisher?",{'app-name':htmlize(app_name)});var content=_tx("You can undo this action in {app-name}'s application settings.",{'app-name':htmlize(app_name)});var button=_tx("Remove");composer_dialog.set_context(context).show_choice(title,content,_tx("Remove"),killComposer,_tx("Cancel"),function(){composer_dialog.fade_out(100);});},reviveComposerDialog:function(app_name,callback){var title=_tx("Unblock {app-name} Publisher?",{'app-name':htmlize(app_name)});var content='<p>'+_tx("Are you sure you want to allow this application's publisher on your profile? ")+'</p>';var button=_tx("Unblock");new Dialog().setTitle(title).setBody(content).setButtons([{'name':'remove','label':button},Dialog.CANCEL]).setHandler(this.setBlockComposer.bind(this,0,callback)).show();}}

var
kError_Global_ValidationError=1346001,kError_Login_GenericError=1348009,kError_Chat_NotAvailable=1356002,kError_Chat_SendOtherNotAvailable=1356003,kError_Async_NotLoggedIn=1357001,kError_Async_LoginChanged=1357003,kError_Async_CSRFCheckFailed=1357004,kError_Chat_TooManyMessages=1356008,kError_Platform_CallbackValidationFailure=1349007,kError_Platform_ApplicationResponseInvalid=1349008,kError_FBPayments_Unknown=1383001,kError_FBPayments_InvalidParameters=1383002,kError_Gifts_NoGiftSelected=1391001,kError_Gifts_NoReceiverSpecified=1391003,kError_Gifts_NoMessageAttached=1391004,kError_RestrictionMessage_Featureblock=1395001,kError_RestrictionMessage_Featurewarning=1395002,kError_RestrictionMessage_Spamwarning=1395003,kError_Async_InternalCaptchaRequired=1357007,kError_Recruiting_MessageDeliveryFailed=1405001,kError_FBPayments_PaymentFailure=1383003,kError_Intern_UnknownError=1408001,kError_Privacy_FriendListNameAlreadyExists=1409001,kError_Mobile_InvalidWapLocale=1347008,kError_Gifts_MessageTooLong=1391007,kError_Inbox_DuplicateMessages=1415001,kError_Async_ConfirmationRequired=1357008,kError_Gifter_GiftNotMoved=1416001,kError_Gifter_GiftNotCreated=1416002,kError_Gifter_GiftNotUpdated=1416003,kError_Gifter_DesignerNotAdded=1416004,kError_Gifter_GiftsNotLoaded=1416005,kError_Megaphone_InvalidHideData=1419001,kError_Megaphone_StoryNotFound=1419002,kError_Megaphone_InternalError=1419003,kError_Megaphone_HandleHideFailed=1419004,kError_Screenname_LimiteExceeded=1423001,kError_Screenname_AllocationError=1423002,kError_OpenId_RegistrationGeneralError=1428001,kError_OpenId_SignatureError=1428002,kError_OpenId_MissingRequiredInformation=1428003,kError_OpenId_ProtocolError=1428004,kError_OpenId_ProtocolErrorWithMessage=1428005,kError_OpenId_EmailAlreadyTaken=1428006,kError_Inbox_ThreadsUnavailable=1415002,kError_OpenId_CancelResponse=1428010,kError_OpenId_SetupNeededResponse=1428011,kError_FBPayments_InvalidOperation=1383004,kError_FBPayments_PermissionDenied=1383005,kError_FBPayments_DatabaseError=1383006,kError_FBPayments_InvalidApp=1383007,kError_FBPayments_AppNoResponse=1383008,kError_FBPayments_AppErrorResponse=1383009,kError_FBPayments_UserCanceled=1383010;

function dropmenu(clickTarget){if(this==window){return new dropmenu(clickTarget);}else{this.className=null;this.menu=null;this.menuClickArea=null;this.showHandler=null;this.hideHandler=null;this.alignment=null;this.direction=null;this.isShown=false;this.canHide=false;this.show_hooks=[];this.hide_hooks=[];this.clickTarget=$(clickTarget);this.displayTarget=$(clickTarget);this.id=null;this.rtl=false;this._clickToHide=true;this._markupContentCallback=bagofholding;this.clickHandle=this.clickTarget.listen('click',this.toggle.bind(this));this.container=$('dropmenu_container')||document.body;return this;}}
dropmenu.ALIGN_RIGHT=1;dropmenu.ALIGN_LEFT=2;dropmenu.DIRECTION_UP=3;dropmenu.DIRECTION_DOWN=4;dropmenu.INSTANCES={};dropmenu.prototype.setPosition=function(alignment){this.alignment=alignment;return this;}
dropmenu.prototype.setDirection=function(direction){this.direction=direction;return this;}
dropmenu.prototype.setMenuClickArea=function(id){this.menuClickArea=$(id);return this;}
dropmenu.prototype.setDisplayTarget=function(id){this.displayTarget=$(id);return this;}
dropmenu.prototype.setClickToHide=function(click_to_hide){this._clickToHide=click_to_hide;return this;}
dropmenu.prototype.setMarkupContent=function(id,className,markup){this.menuContent=markup;this.className=className;this.id=id;return this;}
dropmenu.prototype.setMarkupContentCallback=function(fn){this._markupContentCallback=fn;return this;}
dropmenu.prototype._getMarkupContent=function(){return this.menuContent||this._markupContentCallback();}
dropmenu.prototype.registerHTMLMenu=function(menu_id){this.registered_menu_id=menu_id;return this;}
dropmenu.prototype.addHook=function(type,fn){this[type+'_hooks'].push(fn);return this;}
dropmenu.prototype.removeHook=function(type,fn){for(var i=0;i<this[type+'_hooks'].length;i++){if(fn==this[type+'_hooks'][i]){this[type+'_hooks'].splice(i,1);return true;}}
return this;}
dropmenu.prototype.toggle=function(e){if(!this.isShown){this._show();this.canHide=false;}else{this._hide();}
$E(e).prevent();}
dropmenu.prototype.show=function(){this._show();}
dropmenu.prototype.hide=function(){if(!this.menu){return;}
this._hide();}
dropmenu.prototype.destroy=function(){if(this.menu&&this.menu.parentNode){this.menu.parentNode.removeChild(this.menu);this.menu=null;}}
dropmenu.prototype._buildMenu=function(){if(intl_locale_is_rtl()&&!this.rtl){this.alignment=(this.alignment==dropmenu.ALIGN_RIGHT)?dropmenu.ALIGN_LEFT:dropmenu.ALIGN_RIGHT;this.rtl=true;}
if(this.registered_menu_id){this.menu=$(this.registered_menu_id);if(this.alignment||this.direction){this.container.appendChild(this.menu);}}else{this._buildDynamicMenu();}
dropmenu.INSTANCES[this.id]=this;this.menuClickArea=this.menuClickArea||DOM.scry(this.menu,'div.menu_content');this.menuClickArea.onclick=chain(this.menuClickArea.onclick,Event.stop);var menu_links=DOM.scry(this.menu,'a');for(var i=0;i<menu_links.length;i++){addEventBase(menu_links[i],'click',function(){if(this._clickToHide){this._hide();}}.bind(this),this.menu_id+'_link_'+i);}}
dropmenu.prototype._buildDynamicMenu=function(){this.menu=document.createElement('div');this.menu.className='dropdown_menu hidden_elem '+(this.className?' '+this.className:'');this.menu.id='dropdown_menu_'+this.id;var markupContent=this._getMarkupContent();if(!is_scalar(markupContent)){DOM.setContent(this.menu,markupContent);}else{set_inner_html(this.menu,markupContent);}
this.container.appendChild(this.menu);}
dropmenu.prototype._positionMenu=function(){if(this.alignment||this.direction||(!this.alignment&&!this.direction&&!this.registered_menu_id)){if(this.menu.parentNode!=this.container){this.container.appendChild(this.menu);}
var menuPos=Vector2.getElementPosition(this.displayTarget,'document');var contPos=Vector2.getElementPosition(this.container,'document');var x=menuPos.x-contPos.x;var y=menuPos.y-contPos.y+this.displayTarget.offsetHeight;if(this.alignment==dropmenu.ALIGN_RIGHT||this.direction==dropmenu.DIRECTION_UP){CSS.removeClass(this.menu,'hidden_elem');this.menu.style.left='-9999px';this.menu.style.top='-9999px';if(this.alignment==dropmenu.ALIGN_RIGHT){var menu_width=this.menu.offsetWidth;x=x+this.displayTarget.offsetWidth-menu_width;}
if(this.direction==dropmenu.DIRECTION_UP){var menu_height=this.menu.offsetHeight;y=y-this.displayTarget.offsetHeight-menu_height+1;}
CSS.addClass(this.menu,'hidden_elem');}
this.menu.style.left=x+'px';this.menu.style.top=y+'px';}}
dropmenu.prototype._onclick=function(event){this._hide();return false;}
dropmenu.prototype._show=function(){if(!this.menu){this._buildMenu();}
this._positionMenu();CSS.removeClass(this.menu,'hidden_elem');var hide=this._documentHideHandler.bind(this);this.click_event=addEventBase(document.body,'click',hide,this.menu.id);onbeforeunloadRegister(hide);this.isShown=true;for(var i=0;i<this.show_hooks.length;i++){this.show_hooks[i]();}}
dropmenu.prototype._documentHideHandler=function(e){if(!this.canHide){this.canHide=true;}else{this._hide();}}
dropmenu.prototype._hide=function(){if(this.menu){CSS.addClass(this.menu,'hidden_elem');removeEventBase(document.body,'click',this.click_event,this.menu.id);}
this.click_event=null;this.isShown=false;for(var i=0;i<this.hide_hooks.length;i++){this.hide_hooks[i]();}
if(!this.registered_menu_id){this.destroy();}}
dropmenu.prototype._build_menu_shim=function(){this.shim=null;if(ua.ie()<7){this.shim=document.createElement('iframe');CSS.setClass(shim,'iframe_shim');this.container.appendChild(this.shim);}}
dropmenu.getExistingInstance=function(id){return dropmenu.INSTANCES[id];}
function flyout_menu(clickTarget){if(this==window){return new flyout_menu(clickTarget);}else{this.title='';this.parent.construct(this,clickTarget);}}
flyout_menu.extend('dropmenu');flyout_menu.prototype.setMarkupContent=function(id,className,title,markup){this.parent.setMarkupContent(id,className,markup);this.title=title;return this;}
flyout_menu.prototype.setIconPosition=function(iconElem){this.iconElem=iconElem;return this;}
flyout_menu.prototype._buildDynamicMenu=function(){this.menu=document.createElement('div');CSS.addClass(this.menu,(this.className||'')+' flyout_menu hidden_elem');if(this.alignment==dropmenu.ALIGN_RIGHT){CSS.addClass(this.menu,'flyout_menu_left');}
this.menu.id='flyout_menu_'+this.id;var menuContentId='content_'+this.id;var html=[];html.push('<div class="flyout_menu_header_shadow">');html.push('<div class="flyout_menu_header clearfix">');html.push('<div class="flyout_menu_mask"></div>');html.push('<div class="flyout_menu_title">'+this.title+'</div>');html.push('</div></div>');html.push('<div class="flyout_menu_content_shadow">');html.push('<div class="menu_content" id="content_'+this.id+'">');html.push('</div></div>');set_inner_html(this.menu,html.join(''));this.container.appendChild(this.menu);var markupContent=this._getMarkupContent();if(!is_scalar(markupContent)){DOM.setContent($(menuContentId),markupContent);}else{set_inner_html($(menuContentId),markupContent);}
this.menuClickArea=$(menuContentId);}
flyout_menu.prototype._positionMenu=function(){if(this.alignment||(!this.alignment&&!this.registered_menu_id)){var x;var icon_anchor=this.iconElem?this.iconElem:this.clickTarget;switch(this.alignment){case dropmenu.ALIGN_LEFT:case null:x=elementX(icon_anchor)-elementX(this.container);break;case dropmenu.ALIGN_RIGHT:this.menu.style.left='-9999px';this.menu.style.top='-9999px';CSS.removeClass(this.menu,'hidden_elem');var menuWidth=Vector2.getElementDimensions(this.menu).x;var right_anchor_pos=Rect.getElementBounds(icon_anchor).r-elementX(this.container);var padding=4;x=right_anchor_pos-menuWidth+padding*2;CSS.addClass(this.menu,'hidden_elem');break;}
var y=elementY(icon_anchor)-elementY(this.container);this.menu.style.left=x+'px';this.menu.style.top=y+'px';}}
function hover_menu(clickTarget){if(this==window){return new hover_menu(clickTarget);}else{this.parent.construct(this,clickTarget);this.timeOut=0;this.clickHandle.remove();this.enterTimer=null;this.exitTimer=null;}}
hover_menu.extend('dropmenu');hover_menu.prototype.setTimeoutInterval=function(time){this.timeOut=time;return this;}
hover_menu.prototype._clickTarget_onmouseover=function(target,e){this.enterTimer=setTimeout(function(){this._show();}.bind(this),this.timeOut);clearTimeout(this.exitTimer);}
hover_menu.prototype._clickTarget_onmouseout=function(target,e){e=e||window.event;var relatedTarget=(e.relatedTarget)?e.relatedTarget:e.toElement;if(DOM.contains(target,relatedTarget)){return;}
if(!DOM.contains(this.menu,relatedTarget)){this.exitTimer=setTimeout(function(){this._hide();}.bind(this),this.timeOut);}
clearTimeout(this.enterTimer);}
hover_menu.prototype._menu_onmouseover=function(target,e){clearTimeout(this.exitTimer);}
hover_menu.prototype._menu_onmouseout=function(target,e){e=e||window.event;var relatedTarget=(e.relatedTarget)?e.relatedTarget:e.toElement;if(DOM.contains(target,relatedTarget)){return;}
this.exitTimer=setTimeout(function(){this._hide();}.bind(this),this.timeOut);clearTimeout(this.enterTimer);}
hover_menu.prototype.initialize=function(){if(!this.menu){this._buildMenu();}
this.clickTarget.listen('mouseover',this._clickTarget_onmouseover.bind(this,this.clickTarget));this.clickTarget.listen('mouseout',this._clickTarget_onmouseout.bind(this,this.clickTarget));this.menu.listen('mouseout',this._menu_onmouseout.bind(this,this.menu));this.menu.listen('mouseover',this._menu_onmouseover.bind(this,this.menu));this._positionMenu();}

function intl_locale_selector_dialog(uri){var dialog=new Dialog().setContentWidth(550).setStackable(true).setShowLoading(true);new AsyncRequest().setURI('/ajax/intl/language_dialog.php').setData({'uri':uri}).setReadOnly(true).setHandler(function(asyncResponse){var payload=asyncResponse.getPayload();dialog.setTitle(payload.dialog_title);dialog.setBody(payload.dialog_body);dialog.setButtons([Dialog.OK]);dialog.show();}).send();return false;}

function SortableGroup(){this.namespace='sortable'+(++SortableGroup.instanceCount);this.draggables={};this.droppables={};this.sortables={};this.linkedGroups=[];this.linkedGroups.onlinkjump=bagofholding;this.rootNode=null;this.boundingBox=null;this.neverEmpty=false;this.hasEmptyMessage=false;this.isDroppable=true;this.anchor=null;}
SortableGroup.instanceCount=0;SortableGroup.prototype.gutter=15;SortableGroup.prototype.setBoundingBox=function(bounding_box){this.boundingBox=bounding_box;for(var k in this.draggables){this.draggables[k].setBoundingBox(this.boundingBox);}
return this;}
SortableGroup.prototype.setDroppable=function(val){this.isDroppable=val;return this;}
SortableGroup.prototype._initializeAdded=function(key,obj){if(this.rootNode===null){this.rootNode=obj.parentNode;if(!this.linkedGroups.placeholder){this.linkedGroups.placeholder=this.placeholder=$N(obj.tagName,{className:'dragPlaceholder',style:{padding:'0px'}});}else{this.placeholder=this.linkedGroups.placeholder;}}else if(this.rootNode!=obj.parentNode){throw new Error('All sortables of a collection must share the same parentNode');}
if(key in this.draggables){throw new Error('All sortables must have a unique key');}}
SortableGroup.prototype.addSortable=function(key,obj,handle){this._initializeAdded(key,obj);this.sortables[key]=obj;this.draggables[key]=(new Draggable(obj)).setNamespace(this.namespace).setGutter(this.gutter).setUseAbsolute(true).setGrabHandler(this.grabHandler.bind(this,key)).setDropHandler(this.dropHandler.bind(this,key)).setKey('key',key).setBoundingBox(this.boundingBox);if(handle){this.draggables[key].addHandle(handle);}
this.droppables[key]=(new Droppable(obj)).setNamespace(this.namespace).setDragOverHandler(this._dragOverHandlerShim.bind(null,this,key));return this;}
SortableGroup.prototype.addEmptyMessage=function(obj,root){var key='placeholder';if(obj.parentNode!=root){root.appendContent(obj);}
this._initializeAdded(key,obj);this.hasEmptyMessage=true;this.sortables[key]=obj;this.droppables[key]=(new Droppable(obj)).setNamespace(this.namespace).setDragOverHandler(this._dragOverHandlerShim.bind(null,this,key));return this;}
SortableGroup.prototype.setNeverEmpty=function(neverEmpty){this.neverEmpty=neverEmpty;}
SortableGroup.prototype.link=function(sortgroup){sortgroup.linkedGroups=this.linkedGroups;if(!this.linkedGroups.length){this.linkedGroups.push(this);}
this.linkedGroups.push(sortgroup);for(var i=0;i<this.linkedGroups.length;i++){if(this.linkedGroups[i].namespace!=this.namespace){this.linkedGroups[i].namespace=this.namespace;for(var j in this.linkedGroups[i].droppables){this.linkedGroups[i].droppables[j].setNamespace(this.namespace);this.linkedGroups[i].draggables[j].setNamespace(this.namespace);}}}
return this;}
SortableGroup.prototype.getOrder=function(){if(!this.rootNode){return[];}
var ret=[],childNodes=this.rootNode.childNodes;for(var i=0;i<childNodes.length;i++){for(var k in this.sortables){if(this.sortables[k]==childNodes[i]){ret.push(k);break;}}}
return ret;}
SortableGroup.prototype.migrateLinkedSortable=function(key){for(var i=0;i<this.linkedGroups.length;i++){if(key in this.linkedGroups[i].draggables){this.sortables[key]=this.linkedGroups[i].sortables[key];this.draggables[key]=this.linkedGroups[i].draggables[key];this.draggables[key].setGrabHandler(this.grabHandler.bind(this,key)).setDropHandler(this.dropHandler.bind(this,key));this.droppables[key]=this.linkedGroups[i].droppables[key];this.droppables[key].setDragOverHandler(this._dragOverHandlerShim.bind(null,this,key));delete this.linkedGroups[i].sortables[key];delete this.linkedGroups[i].draggables[key];delete this.linkedGroups[i].droppables[key];return true;}}
return false;}
SortableGroup.prototype.setLinkJumpHandler=function(func){this.linkedGroups.onlinkjump=func;return this;}
SortableGroup.prototype.onorderchange=bagofholding;SortableGroup.prototype.setOrderChangeHandler=function(func){this.onorderchange=func;return this;}
SortableGroup.prototype.ongrabcallback=bagofholding;SortableGroup.prototype.setGrabCallback=function(func){this.ongrabcallback=func;return this;}
SortableGroup.prototype._checkLastRemaining=function(draggable){var oneNodeLeft=this.hasEmptyMessage?2:1;return this.neverEmpty&&this.rootNode.childNodes.length==oneNodeLeft;}
SortableGroup.prototype.grabHandler=function(draggableKey){if(this._checkLastRemaining()){this.draggables[draggableKey].killDrag();return;}
CSS.setClass(this.placeholder,this.sortables[draggableKey].className);CSS.addClass(this.placeholder,'droppable_placeholder');CSS.addClass(this.sortables[draggableKey],'drag');Vector2.getElementDimensions(this.sortables[draggableKey]).setElementDimensions(this.placeholder);this.rootNode.insertBefore(this.placeholder,this.sortables[draggableKey]);this.ongrabcallback(draggableKey);if(!this.isDroppable){var sortable=this.sortables[draggableKey];this.anchor=sortable.nextSibling;if(!this.anchor){this.anchor=$N('div');sortable.parentNode.appendChild(this.anchor);}}}
SortableGroup.prototype.ondropcallback=bagofholding;SortableGroup.prototype.setDropCallback=function(func){this.ondropcallback=func;return this;}
SortableGroup.prototype.dropHandler=function(draggableKey){if(this._checkLastRemaining()){this.draggables[draggableKey].resetPosition();return;}
CSS.removeClass(this.sortables[draggableKey],'drag');this.draggables[draggableKey].resetPosition();this.rootNode.insertBefore(this.sortables[draggableKey],this.placeholder);this.rootNode.removeChild(this.placeholder);for(var i=0;i<this.linkedGroups.length;i++){if(this.linkedGroups[i].anchor){delete this.linkedGroups[i].anchor;}}
this.ondropcallback(draggableKey);this.onorderchange();}
SortableGroup.prototype._dragOverHandlerShim=function(that,droppableKey,draggable){that.dragOverHandler(droppableKey,draggable.getKey('key'));};SortableGroup.prototype.dragOverHandler=function(droppableKey,draggableKey){if(!this.isDroppable&&!this.anchor){return;}
var jumped=false;if(!(draggableKey in this.draggables)){if(!this.migrateLinkedSortable(draggableKey)){throw new Error('Draggable dropped onto a foreign droppable!');}
jumped=true;}
var before=true,childNodes=this.rootNode.childNodes,draggable=this.sortables[draggableKey],droppable=this.sortables[droppableKey];if(!this.anchor){for(var i=0;i<childNodes.length;i++){if(childNodes[i]==droppable){break;}else if(childNodes[i]==draggable){before=false;break;}}}else{droppable=this.anchor;}
if(before||this.anchor){this.rootNode.insertBefore(this.placeholder,droppable);}else{this.rootNode.insertBefore(this.placeholder,droppable.nextSibling);}
this.rootNode.insertBefore(draggable,this.placeholder);this.ondragover(draggable,droppable);if(jumped){this.linkedGroups.onlinkjump.call(this,draggableKey);}}
SortableGroup.prototype.ondragover=bagofholding;SortableGroup.prototype.setDragOverCallback=function(func){this.ondragover=func;return this;}
SortableGroup.prototype.destroy=function(){for(var k in this.droppables){this.droppables[k].destroy();}
for(var k in this.draggables){this.draggables[k].destroy();}
this.droppables=this.draggables=this.rootNode=null;this.linkedGroups.remove(this);for(var i=0;i<this.linkedGroups.length;i++){this.linkedGroups[i].linkedGroups=this.linkedGroups;}}
SortableGroup.prototype.removeSortable=function(key){if(key in this.sortables){this.draggables[key].destroy();this.droppables[key].destroy();delete this.draggables[key];delete this.droppables[key];delete this.sortables[key];}}
SortableGroup.prototype.keyExists=function(key){return this.sortables[key];}

function search_typeaheadpro(obj,source,properties){this.parent.construct(this,obj,source,properties);this._onunload_registered=false;}
search_typeaheadpro.extend('typeaheadpro');search_typeaheadpro.prototype.auto_select=false;search_typeaheadpro.prototype.less_than_n_chars=false;search_typeaheadpro.prototype.dirty_results=function(){this.parent.dirty_results();if(!this._onunload_registered){this._onunload_registered=true;onunloadRegister(bind(this,function(){this.clear();this.blur();search_friend_source.hasSubmitted=false;search_friend_source.already_logged=false;this._onunload_registered=false;}));}}
search_typeaheadpro.prototype.show=function(){this.dropdown.style.border='0px none';if(this.suggestions.length){CSS.addClass(this.list,'typeahead_list_with_shadow');}else{CSS.removeClass(this.list,'typeahead_list_with_shadow');}
var typeahead_width=191;if(!this.less_than_n_chars){CSS.addClass(this.dropdown,'typeahead_search');this.parent.show();var anchor_dimensions=Vector2.getElementDimensions(this.anchor);this.dropdown.style.left=(elementX(this.anchor)-(typeahead_width-anchor_dimensions.x)+4)+'px';this.dropdown.style.width=typeahead_width+'px';}else{this.hide();}}
search_typeaheadpro.prototype.select_suggestion=function(index){this.log_data.sm=this.log_data.sm?this.log_data.sm:'mouse';if(this.suggestions&&this.suggestions.length>index){this.log_data.ty=index>=0?this.suggestions[index].ty:'fs';this.log_data.i=index>=0?this.suggestions[index].i:'0';this.log_data.f=this.suggestions.length>0?0:1;}
this.log_data.si=index;search_typeahead_log_data(this);if(this.suggestions&&this.source.history!=undefined&&this.suggestions.length>index&&index>=0){this.suggestions[index].o=-1;this.source.history[this.suggestions[index].i]=-1;}
return this.parent.select_suggestion.call(this,index);}
search_typeaheadpro.prototype.hide=function(){this.parent.hide();}
search_typeaheadpro.prototype.search_cache=function(text){return undefined;}
search_typeaheadpro.prototype.found_suggestions=function(suggestions,text,fake_data){var auto_select=ADVANCED_SEARCH_TYPEAHEAD&&suggestions&&suggestions.length==1;if(auto_select){suggestions.push({t:text,i:text.trim().replace(/ /g,'+'),ty:'search'});}
this.parent.found_suggestions(suggestions,text,fake_data);if(suggestions.length>0&&suggestions[0].ty=='search'){this.parent.set_suggestion(0);}
if(this.suggestion_count>0){CSS.addClass(this.list.firstChild.firstChild,'suggestions_top_border');CSS.removeClass(this.list,'no_border_list');CSS.addClass(this.list.lastChild.lastChild,'suggestions_bottom_border');}else{CSS.addClass(this.list,'no_border_list');}
if(auto_select){this.set_suggestion(0);}}
search_typeaheadpro.prototype._onkeydown=function(e){this.last_key=e?event_get_keypress_keycode(e):-1;this.interactive=true;if(this.last_key==KEYS.TAB&&this.suggestions.length>0){var next_tab_index=this.selectedindex+(e.shiftKey?-1:1);if(next_tab_index<-1||next_tab_index>=this.suggestions.length){return true;}
this.log_data.kt+=1;return false;}
this.parent._onkeydown(e);}
search_typeaheadpro.prototype._onkeypress=function(e){this.last_key=e?event_get_keypress_keycode(e):-1;this.interactive=true;if(this.last_key==KEYS.TAB&&this.suggestions.length>0){var next_tab_index=this.selectedindex+(e.shiftKey?-1:1);if(next_tab_index>=-1&&next_tab_index<this.suggestions.length){this.set_suggestion(next_tab_index);this.last_key_suggestion=(new Date()).getTime();return false;}}
return this.parent._onkeypress(e);}
function search_typeahead_onselect(friend){if(friend&&!search_friend_source.hasSubmitted){search_friend_source.hasSubmitted=true;}else{return false;}
var url=friend.u;if(!url){var type_info=search_friend_source.url_templates[friend.ty];if(type_info){url=sprintf(type_info.default_url,escapeURI(friend.i));}}
if(!url){return undefined;}else if(url.indexOf('?')!=-1){goURI(url+'&ref=ts');}else{goURI(url+'?ref=ts');}
bind(this,this.blur).defer();return false;};function search_typeahead_wstest(query){new AsyncSignal('/ajax/search/web.php',{q:query}).send();};function search_typeahead_log_data(source){var log_data=source.udata;for(var key in source.log_data){log_data[key]=source.log_data[key];}
search_typeahead_log(log_data,'onsubmit');}
function search_typeahead_onsubmit(friend){return!search_friend_source.hasSubmitted;}
window.ADVANCED_SEARCH_TYPEAHEAD=false;

function search_friend_source(get_param){this.parent.construct(this,get_param);var current_time=(new Date()).getTime();new AsyncRequest().setMethod('GET').setReadOnly(true).setURI('/ajax/typeahead_search.php?'+get_param).setErrorHandler(function(){}).setTransportErrorHandler(function(){}).setHandler(function(response){var payload=response.getPayload();this.values=payload.entries;this.build_index.bind(this).defer();search_typeahead_log(this.udata,'getdata',current_time);var now_minus_5_min=((new Date()).getTime()/1000)-60*5;if(payload.gen_time<now_minus_5_min){new AsyncRequest().setMethod('GET').setReadOnly(true).setURI('/ajax/recent_pics.php').setData({ref_time:payload.gen_time}).setErrorHandler(function(){}).setTransportErrorHandler(function(){}).setHandler(function(response){this.updated_pics=response.getPayload().updated_pics;}.bind(this)).send();}}.bind(this)).disableNectar().send();}
search_friend_source.extend('static_source');search_friend_source.prototype.text_noinput=search_friend_source.prototype.text_placeholder=search_friend_source.prototype.text_nomatch='';search_friend_source.prototype.cache_results=true;search_friend_source.prototype.updated_pics={};search_friend_source.prototype._allowed_types=null;search_friend_source.url_templates={};search_friend_source.loaded_images={};search_friend_source.TYPES={USER:'u',FRIEND_REQUEST:'fr',CONNECTION:'c',FOLLOWER:'fl',PAGE:'p',APP:'a',GROUP:'g',EVENT:'e',SEARCH:'search',WEB:'web'};search_friend_source.prototype.build_index=function(){var history=this.history?this.history.entries:undefined;if(history!=undefined){this.values=this.values.each(function(value){value.o=history[value.i]!=undefined?history[value.i]:value.o;return value;});}
this.parent.build_index();}
search_friend_source.image_load=function(image_elm,insertion_time,user_id){var current_time=(new Date()).getTime();search_friend_source.loaded_images[user_id]=true;if((current_time-insertion_time)<100){CSS.setOpacity(image_elm,1);}else{animation(image_elm).to('opacity',1).duration(100).go();}};search_friend_source.prototype.gen_html=function(friend,highlight){var icon_url=friend.it;if(!icon_url&&friend.ty&&search_friend_source.url_templates[friend.ty]){icon_url=search_friend_source.url_templates[friend.ty].icon;}
if(this.updated_pics[friend.i]){icon_url=this.updated_pics[friend.i];}
switch(friend.ty){case search_friend_source.TYPES.USER:case search_friend_source.TYPES.CONNECTION:case search_friend_source.TYPES.PAGE:if(!icon_url){return['<div>',typeahead_source.highlight_found(friend.t,highlight),'</div><div><small>',friend.n||'&nbsp;','</small></div>'].join('');}else{if(!search_friend_source.loaded_images[friend.i]){var insertion_time=(new Date()).getTime();var attrs=sprintf('onload="search_friend_source.image_load(this, %d, %d);" style="opacity:0;filter:alpha(opacity=0);"',insertion_time,friend.i);}
return['<img ',attrs,' alt="" src="',icon_url,'"/>','<div class="with_pic"><span>',typeahead_source.highlight_found(friend.t,highlight),'</span><small>',friend.n||'&nbsp;','</small></div>'].join('');}
break;case search_friend_source.TYPES.SEARCH:return['<div class="app"><div class="icon" style="background-image: url(',icon_url,')">&nbsp;</div>','<span>',friend.t,'</span></div>'].join('');break;default:return['<div class="app clearfix"><div class="icon" style="background-image: url(',icon_url,')">&nbsp;</div>','<span>',typeahead_source.highlight_found(friend.t,highlight),'</span></div>'].join('');}};search_friend_source.prototype.allowTypes=function(type_arr){this._allowed_types=type_arr;return this;}
search_friend_source.prototype.search_value=function(text){var results;var enough_tokens=false;var tokens=typeahead_source.tokenize(text);for(var i=0;i<tokens.length;i++){if(tokens[i]!=''){enough_tokens=true;break;}}
if(enough_tokens){this.owner.less_than_n_chars=false;results=this.parent.search_value(text);}else if(this.is_ready){this.owner.less_than_n_chars=true;results=[];}
var non_people_search=(results&&results.length)?false:true;if(results){for(var i=0;i<results.length;i++){if((results[i].ty!=search_friend_source.TYPES.USER)&&(results[i].ty!=search_friend_source.TYPES.CONNECTION)){non_people_search=true;break;}}}
if(results&&non_people_search&&enough_tokens&&search_friend_source.WEBSEARCH_USER){results.push({t:_tx("Search Facebook"),ty:search_friend_source.TYPES.SEARCH,i:text});results.push({t:_tx("Search the Web"),ty:search_friend_source.TYPES.WEB,i:text});}
if(this._allowed_types){results=results.filter(function(result){return this._allowed_types.contains(result.ty);}.bind(this));}
return results;};search_friend_source.prototype._sort_text_obj=function(a,b){var history=this.history?this.history.entries:undefined;if(history!=undefined){a.o=history[a.i]||a.o;b.o=history[b.i]||b.o;}
if(a.o!=b.o){return a.o-b.o;}
return a.t.localeCompare(b.t);};search_friend_source.WEBSEARCH_USER=false;window.ADVANCED_SEARCH_TYPEAHEAD=false;

function MenuBar(core_menu_id){this.core_menu_id=core_menu_id;this.core_menu=$(core_menu_id);this.menus=DOM.scry(this.core_menu,'li.fb_menu');this.timeout=250;}
copy_properties(MenuBar.prototype,{setTimeoutInterval:function(timeout){this.timeout=timeout;return this;},init:function(){var i;for(i=0;i<this.menus.length;i++){var menu=this.menus[i];var dropdown_id=menu.id+'_dropdown';if(ge(dropdown_id)){var menu_anchor=menu.firstChild.firstChild;var dropdown=$(dropdown_id);hover_menu(menu_anchor).registerHTMLMenu(dropdown_id).setPosition(dropmenu.ALIGN_LEFT).setTimeoutInterval(this.timeout).addHook('show',bind(this,'_onShowCallback',menu_anchor,dropdown)).addHook('hide',bind(this,'_onHideCallback',menu_anchor)).initialize();}}},_onShowCallback:function(clickTarget,menuElement){CSS.addClass(clickTarget,'hover');var scroller=window['ScrollArea']&&ScrollArea.getInnerInstance(menuElement);if(scroller){scroller.moveTo(0);}},_onHideCallback:function(clickTarget){CSS.removeClass(clickTarget,'hover');}});

var EditAppsController={BOOKMARKS_VIEW:'bookmarks',currentView:'',bookmarkedApps:[],sortableGroup:null,reviewMarkup:null,ownedApps:null,ratingSetSubscription:null,init:function(profileID,reviewMarkup,ownedApps){this.profileID=profileID;this.reviewMarkup=reviewMarkup;this.ownedApps=ownedApps;},setView:function(view){this.currentView=view;},switchView:function(view){goURI(new URI('/editapps.php').addQueryData({'v':view}).toString());},removeBookmarkedApp:function(appID){return this.changeBookmarkSetting(appID,0);},undoRemoveBookmarkedApp:function(appID){return this.changeBookmarkSetting(appID,1);},changeBookmarkSetting:function(appID,setting){EditAppSettings.setup(appID,this.profileID,false,null,{bookmark:this.changeBookmarkCallback}).setBookmarked(setting);return true;},changeBookmarkCallback:function(appID,setting){if(ge('editapps_bookmarked_'+appID)){if(setting){EditAppsController.addSortable(appID);}else{EditAppsController.sortableGroup.removeSortable(appID);}
toggleDisplayNone('editapps_bookmarked_'+appID);toggleDisplayNone('editapps_bookmarked_'+appID+'_undo');}},removeProfileApp:function(section,appID,boxTabID){return this.changeProfileSetting(section,appID,boxTabID,'del');},undoRemoveProfileApp:function(section,appID,boxTabID){return this.changeProfileSetting(section,appID,boxTabID,'add');},changeProfileSetting:function(section,appID,boxTabID,action){EditAppSettings.setup(appID,this.profileID,false,null,{profile:EditAppsController.changeProfileCallback}).makeProfileChange(section,action,boxTabID);return true;},changeProfileCallback:function(section,appID){if(ge('editapps_'+section+'_'+appID)){toggleDisplayNone('editapps_'+section+'_'+appID);toggleDisplayNone('editapps_'+section+'_'+appID+'_undo');}},removeAppSuccessDialog:function(callback,appName,isRemovableApp,response){if(isRemovableApp){var title=_tx("Application Removed");var body=_tx("You have removed {application-name}.",{'application-name':appName});}else{var title=_tx("Application Removed");var body=_tx("You have removed all integration points for {application-name}.  {application-name} cannot be completely removed.",{'application-name':appName});}
new Dialog().setTitle(title).setBody(body).setButtons([Dialog.OK]).setHandler(callback.bind(this,response)).show();},onRatingSet:function(element){var textarea=$('app_remove_review_text');CSS.removeClass(textarea,'hidden');new TextAreaControl(textarea).setPlaceholderText(_tx("Why are you removing this application?")).setAutogrow(true);},removeApplication:function(appId,rawAppName,handler,isRemovableApp){var appName=htmlize(rawAppName);var title=_tx("Remove {application-name}?",{'application-name':appName});var application_link='<a href="/editapps.php">'+_tx("Applications Page")+'</a>';if(!isRemovableApp){var content='<p>'+
_tx("You cannot completely remove a Facebook application. This will remove {application-name} from your bookmarks, and remove any profile tabs or boxes; but it will remain in your {applications-link}.",{'applications-link':application_link,'application-name':appName})+'</p>'+'<p><strong>'+
_tx("Do you want to remove all integration points for {application-name}?",{'application-name':appName})+'</strong></p>'+'<input type="hidden" name="remove_appId" value="'+appId+'" />';}else{var content='<p>'+
_tx("If you remove {application-name}, it will no longer have access to your data and be removed from your profile, bookmarks, and {applications-link}.",{'application-name':appName,'applications-link':application_link})+'</p>';if(EditAppsController.reviewMarkup){if(!this.ratingSetSubscription){this.ratingSetSubscription=Arbiter.subscribe(ReviewsApp.ON_RATING_SET,this.onRatingSet.bind(this));}
var stars=HTML(EditAppsController.reviewMarkup).getNodes()[0];var prompt=$N('span',{className:'leave_rating_label'},_tx("Optional - Leave a rating for {application-name}:",{'application-name':rawAppName}));var textarea=$N('textarea',{className:'hidden',id:'app_remove_review_text'});var rating_markup=$N('div',null,[prompt,stars,textarea]);if(EditAppsController.ownedApps&&!EditAppsController.ownedApps.contains(parseInt(appId,10))){content+=rating_markup.innerHTML;}}
content+='<input type="hidden" name="remove_appId" value="'+appId+'" />';}
var remove_button={'name':'remove','label':_tx("Remove")};var buttons=[remove_button,Dialog.CANCEL];content='<div class="remove_application_dialog">'+
content+'</div>';new Dialog().setTitle(title).setBody(content).setButtons(buttons).setHandler(function(){var blurb_textarea=ge('app_remove_review_text');var blurb='';if(blurb_textarea){blurb=blurb_textarea.value;if(blurb==_tx("Why are you removing this application?")){blurb='';}}
var review_rating=ge('review_rating');var rating=null;if(review_rating){rating=parseInt(review_rating.value,10);}
var remove_handler=EditAppsController.removeAppSuccessDialog.bind(this,handler,appName,isRemovableApp);EditAppSettings.setup(appId,this.profileID,false).removeApplication(remove_handler,rating,blurb);}).show();return false;},removeExtendedPermission:function(appID,permission){this.setExtendedPermission(appID,permission,false);},undoRemoveExtendedPermission:function(appID,permission){this.setExtendedPermission(appID,permission,true);},setExtendedPermission:function(appID,permission,value){EditAppSettings.setup(appID,this.profileID,false,null,{extended:this.setExtendedPermissionCallback}).setExtendedPermission(permission,value);return true;},setExtendedPermissionCallback:function(appID,permission){toggleDisplayNone('editapps_extperm_'+permission+'_'+appID);toggleDisplayNone('editapps_extperm_'+permission+'_'+appID+'_undo');},setBookmarkedApps:function(appIds){this.bookmarkedApps=appIds;this.sortableGroup=new SortableGroup();this.sortableGroup.setOrderChangeHandler(function(){EditAppSettings.reorderBookmarks(this.sortableGroup.getOrder());}.bind(this));for(var i=0;i<this.bookmarkedApps.length;i++){this.addSortable(this.bookmarkedApps[i]);}},addSortable:function(appId){var obj=$('editapps_bookmarked_wrapper_'+appId);this.sortableGroup.addSortable(appId,obj);},saveGlobalExternalWebsitePolicy:function(setting){EditAppSettings.setGlobalExternalWebsitePolicy(setting);return true;}}

function fbpage_show_viewer_settings_dialog(fbpage_id,title){var src='/ajax/pages/viewer_settings.php?id='+fbpage_id;Dialog.showFormAjax(title,src,_tx("Save"),true);return false;}
function fbpage_set_fan_status(elem,fbpage_id,action_is_add,reload){var handler=function(asyncResponse){_fbpage_show_change_status_feedback(elem,asyncResponse.getPayload());};var data={'fbpage_id':fbpage_id,'add':action_is_add,'reload':reload};new AsyncRequest().setURI('/ajax/pages/fan_status.php').setData(data).setHandler(bind(this,handle_require_email_conf_response,handler,null,null)).send();return false;}
function fbpage_set_favorite_status(elem,fbpage_id,action_is_add){var handler=function(){_fbpage_show_change_status_feedback(elem,this.getUserData());};var data={'fbpage_id':fbpage_id,'add':action_is_add};var async=new AsyncRequest().setMethod('POST').setURI('/ajax/pages/favorite_status.php').setData(data);new Dialog().setAsync(async).setCloseHandler(handler).show();return false;}
function _fbpage_show_change_status_feedback(elem,data){if(!data||!elem){return;}
if(data.reload){window.location.reload();}else if(data.feedback){var newElem=document.createElement('span');newElem.innerHTML=data.feedback;CSS.setClass(newElem,'fan_status_inactive');elem.parentNode.replaceChild(newElem,elem);var handler=function(){if(data.can_repeat_action){newElem.parentNode.replaceChild(elem,newElem);}}
animation(newElem).duration(3000).checkpoint().to('backgroundColor','#FFFFFF').duration(1000).ondone(handler).go();}}
function fbpage_verification_reason_dialog(){new Dialog().setTitle(_tx("Why is this required?")).setBody(_tx("In order to upload music to your Page, we need you to submit a valid form of identification that identifies you, the admin of the Page. By submitting a valid form of identification, you are confirming that you either own the copyright to the content you will be uploading or that you are authorized by the copyright owner to upload that copyrighted content to your Page. Please note that you can black out any sensitive information on your identification if you wish, other than your name and picture. We currently only accept photo passports, school IDs, and drivers licenses.")).setButtons([Dialog.OK]).show();return false;}
function pages_show_block_app(app_id,action,source){var async=new AsyncRequest().setMethod('POST').setData({app_id:app_id,action:action,source:source}).setURI('/ajax/apps/block.php');new Dialog().setAsync(async).show();}
function pages_change_block_wording(app_id){hide('block_'+app_id);}
function pages_promote_sms_fanning(fan,vanity_url,shortcode){new Dialog().setTitle(_tx("Get more Fans through SMS")).setBody(_tx("Tell people to text \"{fan} {name}\" to {mobile-number} from their mobile phones, and they will be added as fans instantly. Standard charges may apply.",{'fan':fan,'name':vanity_url,'mobile-number':shortcode})).setButtons(Dialog.OK).show();return false;}
function fbpages_app_add(app_id){var async=new AsyncRequest().setURI('/ajax/apps/show_profile_add_dialog.php').setMethod('GET').setReadOnly(true).setData({profile_id:app_id});new Dialog().setAsync(async).show();return false;}
function fbpages_app_on_add(obj){var uri='/ajax/apps/add_to_profile.php';var data={profile_id:obj.profile_id,target_profile_id:obj.id};var handler=function(){ObjectBrowserController.getController(obj.element).removeItem(obj.id);};new AsyncRequest().setURI(uri).setMethod('POST').setData(data).setHandler(handler).send();}

var details_shown=false;function toggle_stored_cc(obj){if(obj.checked==true){show('cvv2_div');hide_new_cc();}else{hide('cvv2_div');show_new_cc();}}
function hide_cc_payment(){hide('card_payment');hide('cvv2_div');hide_new_cc();var sel_cc=ge('cc_id');if(sel_cc){sel_cc.checked=false;}}
function show_cc_payment(){show('card_payment');}
function hide_new_cc(){hide('cc_input');hide('enter_new_card');}
function show_new_cc(){show('cc_input');show('enter_new_card');if(details_shown){toggleStoredCreditCardDetails();}}
function toggleStoredCreditCardDetails(){var link=ge('toggle_stored_credit_card_details_link');if(!details_shown){show('stored_credit_card_details');link.innerHTML=_tx("hide details");details_shown=true;}else{hide('stored_credit_card_details');link.innerHTML=_tx("show details");details_shown=false;}}
function show_csc_info(cc_type){var csc_description=_tx("A Card Security Code (CSC) is a security feature of debit and credit cards that helps fight credit card fraud.  The following graphic illustrates where to find the CSC code on your credit card.");var csc_div_style='float: left;';var paragraph_style='text-align: center; margin: 5px 0;';var amex_html='';amex_html+='<div style="'+csc_div_style+'">';amex_html+='<img src="/images/cvv2_types/amex_csc.gif" alt="" />';amex_html+='<p style="'+paragraph_style+'">'+'American Express'+'</p>';amex_html+='</div>';var non_amex_html='';non_amex_html+='<div style="margin-right: 8px;'+csc_div_style+'">';non_amex_html+='<img src="/images/cvv2_types/backofcard.gif" alt="" />';non_amex_html+='<p style="'+paragraph_style+'">'+'Visa, Mastercard, JCB'+'</p>';non_amex_html+='</div>';var html='';html+='<div class="clearfix">';html+='<p>'+csc_description+'</p>';if(cc_type==null){html+=non_amex_html;html+=amex_html;}else if(cc_type==65){html+=amex_html;}else{html+=non_amex_html;}
html+='</div>';new Dialog().setClassName('csc_type').setTitle(_tx("What's a CSC code?")).setBody(html).setButtons([Dialog.OK]).show();}
function show_csc_validation_info(){var html='';html+='<div class="clearfix">';html+='<div style="float: left">';html+='<p style="text-align: left; margin: 5px 0;">';html+=_tx("In order to fight credit card fraud, we have started to enforce CSC code validation in credit card payments.  For credit cards we have stored before, this means they will need to be CSC validated once for later uses.  You will not be prompted in the future once the card gets validated.");html+='</p>';html+='</div>';html+='</div>';new Dialog().setClassName('validation').setTitle(_tx("Why is CSC validation required?")).setBody(html).setButtons([Dialog.OK]).show();}
function get_selected_cc_type(cc_select_name,dialog_pro){if(dialog_pro){cc_type=get_form_select_value(get_dialog_pro_elem(cc_select_name));}else{cc_type=get_form_select_value(ge(cc_select_name));}
return cc_type;}
function validate_csc(cc_select_name,dialog_pro){if(dialog_pro){var cvv2_elem=get_dialog_pro_elem('cc_cvv2');}else{var cvv2_elem=ge('cc_cvv2');}
var cc_type=get_selected_cc_type(cc_select_name,dialog_pro);if(cc_type==65){if(cvv2_elem.value.length!=4){cvv2_elem.style.border="1px solid red;"}else{cvv2_elem.style.border="";}}else{if(cvv2_elem.value.length!=3){cvv2_elem.style.border="1px solid red;"}else{cvv2_elem.style.border="";}}}
function get_dialog_pro_elem(elem_name){var candidates=document.getElementsByName(elem_name);var i;var result=null;for(i=0;i<candidates.length;i++){var candidate=candidates[i];if(DOM.contains('pop_dialog_table',candidate)){result=candidate;}}
return result;}

function ApplicationDock(bookmarks){this.bookmarks={};this.sortedBookmarks=[];this.bookmarkableApp=null;this.undoTimeouts={}
this.menuLoaded=false;this.menuOpen=false;this.menuWrapperID='presence_applications';this.applicationTabID='presence_applications_tab';this.applicationMenuContentID='presence_applications_content';this.menuWrapper=$(this.menuWrapperID);this.applicationTab=$(this.applicationTabID);this.applicationMenuContainer=$(this.applicationMenuContentID);this.iconGardenContainer=$('presence_applications_icon_garden');this.bookmarkableAppWrapper=$('bookmarkable_app');this.bookmarkableAppContainer=$('presence_applications_bookmark_app');this.sortableRoot=null;this.sortableGroup=null;this.extendedSortableGroup=null;this.extendedSortableRoot=null;this.iconGardenSortableGroup=null;this.iconGardenSortableRoot=null;this.currentIconGardenDraggableKey=null;this.recentSortableGroup=null;this.recentSortableRoot=null;this.lastBookmarkedApp=null;this.logTabOpen=false;this.logBMClick=false;this.topBookmark=null;this.recentApps=null;this.sortedRecentApps=null;this.bookmarks=bookmarks;this.suppressReset=false;this.removedBookmarks={};}
copy_properties(ApplicationDock,{NUM_SHOWN:6,BOOKMARKS_CHANGED:'bookmarks_changed',SaveBookmarksSource:{ICON_GARDEN:1,APPLICATION_MENU:2,BOOKMARK_CURRENT_APP:3},ANIM_DURATION:200,UNDO_ANIM_HIDE_DELAY:5000,RECENT_APPS_ANIM_HIDE_DELAY:1000});ApplicationDock.prototype={_init:function(){this.sortedBookmarks=this._getSortedList();this._renderIconGarden();if(!is_empty(this.bookmarkableApp)){this._renderBookmarkableApp();}
this._initIconGardenSortables.bind(this).defer();presence.registerMsgHandler(this._handleMsg.bind(this));},_getSortedList:function(applications){applications=applications||this.bookmarks;var array=keys(applications);array=mapToInt(array);this._sort(array,applications);return array;},_ensureSortedRecentApps:function(){if(!this.sortedRecentApps){this.sortedRecentApps=this._getSortedList(this.recentApps);}},_sort:function(array,applications){var compareFunction=this._sortApps.bind(null,applications);array.sort(compareFunction);},_sortApps:function(applications,id1,id2){return applications[id1].order-applications[id2].order;},_renderApplicationMenu:function(){DOM.setContent(this.applicationMenuContainer,HTML(this._renderAppMenuContent()));},_renderAppMenuContent:function(){var markupArr=[];var bookmarksDividerRendered=false;if(count(this.recentApps)>0){markupArr.push('<div id="application_menu_recent_apps_container">');markupArr.push(this._renderAppMenuDivider(_tx("Recently Used")));markupArr.push('<ul id="application_menu_recent_apps">');this._ensureSortedRecentApps();for(var i=0;i<this.sortedRecentApps.length;i++){var appID=this.sortedRecentApps[i];markupArr.push(this._renderAppMenuItem(appID));}
markupArr.push('</ul>');markupArr.push('</div>');if(this.sortedBookmarks.length){bookmarksDividerRendered=true;markupArr.push(this._renderAppMenuDivider(_tx("Bookmarks")));}}
if(this.sortedBookmarks.length){if(!bookmarksDividerRendered){markupArr.push(this._renderAppMenuDivider(_tx("Bookmarks")));}
markupArr.push('<ul id="application_menu_root">');for(var i=0;i<this.sortedBookmarks.length;i++){var appID=this.sortedBookmarks[i];if(i==ApplicationDock.NUM_SHOWN){markupArr.push('</ul>',this._renderAppMenuDivider(),'<ul id="application_menu_extended_root">');}
markupArr.push(this._renderAppMenuItem(appID,null,true));}
markupArr.push('</ul>');}
return markupArr.join('');},_renderAppMenuItem:function(appID){var removeBookmarkButtonStr='';var undoRemoveStr='';removeBookmarkButtonStr=sprintf('<div class="del_button" id="%s"></div>',this._getAppMenuRemoveItemId(appID));undoRemoveStr=['<div class="app_menu_undo_remove_bookmark" id="',this._getAppMenuUndoRemoveItemId(appID),'"><div class="app_menu_undo_remove_bookmark_link"><a href="#" id="',this._getAppMenuUndoRemoveItemLinkId(appID),'">',_tx("Undo"),'</a></div><div>',_tx("Bookmark removed"),'</div></div>'].join('');return['<li id="',this._getApplicationMenuItemId(appID),'"><div id="',this._getApplicationMenuLinkContainerId(appID),'">',removeBookmarkButtonStr,this._renderApplicationMenuItem(appID),'</div>',undoRemoveStr,'</li>',].join('');},_renderAppMenuDivider:function(dividerText){return['<div class="application_menu_divider">',dividerText||'','</div>'].join('');},_renderApplicationMenuItem:function(appID){var appInfo=this._getAppInfo(appID);var isFacebookURI=URI(appInfo['href']||'').isFacebookURI();var markupArr=['<a id="',this._getApplicationMenuLinkId(appID),'"',isFacebookURI?'':' target="_blank"',' href="',appInfo['href'],'" class="item">','<div class="item">',appInfo['new_icon_img'],'</div>',htmlize(appInfo['name']),'</a>'];return markupArr.join('');},_getApplicationMenuItemId:function(appID){return'application_menu_'+appID;},_getApplicationMenuLinkContainerId:function(appID){return'application_menu_link_container_'+appID;},_getApplicationMenuLinkId:function(appID){return'application_menu_link_'+appID;},render:function(){this._init();return this;},toggleTab:function(){if(!this.menuOpen){this._openTab();}else{this._closeTab();}},_openTab:function(){if(this.menuOpen){return;}
if(!this.menuLoaded){this._renderApplicationMenu();this._initApplicationMenu.bind(this).defer();this.menuLoaded=true;}
presence.openTab(this.menuWrapperID,this.applicationTabID,this.applicationMenuContentID);this.menuOpen=true;if(this.logTabOpen){AsyncRequest.pingURI('/ajax/abtest_multi_async.php',{test_names:['PLATFORM_APPDOCK_APPBUTTON','APPS_MENU_TEST'],actions:['APPLICATIONS_MENU_OPEN']});}},_closeTab:function(){presence.toggleTab(this.menuWrapperID,this.applicationTabID,this.applicationMenuContentID);this.menuOpen=false;},_initApplicationMenu:function(){this.sortableRoot=$('application_menu_root');this.sortableGroup=new SortableGroup();var source=ApplicationDock.SaveBookmarksSource.APPLICATION_MENU;this.sortableGroup.setOrderChangeHandler(this._saveBookmarksOrder.bind(this,source));var sortableGroup=this.sortableGroup;for(var i=0;i<this.sortedBookmarks.length;i++){var appID=this.sortedBookmarks[i];if(i==ApplicationDock.NUM_SHOWN){this._initExtendedApplicationMenuSortables();sortableGroup=this.extendedSortableGroup;}
this._addApplicationMenuSortable(appID,sortableGroup);this._initEventHandlers(appID);}
if(this.recentApps&&count(this.recentApps)>0){this.recentSortableRoot=$('application_menu_recent_apps');this.recentSortableGroup=new SortableGroup();this.recentSortableGroup.setDroppable(false);this.sortableGroup.link(this.recentSortableGroup);for(var appID in this.recentApps){this._addApplicationMenuSortable(appID,this.recentSortableGroup);}}},_initEventHandlers:function(appID){var menuLinkID=this._getApplicationMenuLinkId(appID);$(menuLinkID).listen('click',this._menuClick.bind(this,appID,menuLinkID));var item=$(this._getApplicationMenuItemId(appID));item.listen('mouseover',CSS.addClass.bind(CSS,item,'hover'));item.listen('mouseout',CSS.removeClass.bind(CSS,item,'hover'));this._registerRemoveItemHandler(appID,this._getAppMenuRemoveItemId(appID),false);this._registerRemoveItemHandler(appID,this._getAppMenuUndoRemoveItemLinkId(appID),true);},_registerRemoveItemHandler:function(appID,elemID,setting){$(elemID).listen('click',(function(e){this._setBookmarked(appID,setting);return $E(e).kill();}).bind(this));},_setBookmarked:function(appID,setting){this.suppressReset=true;var sortableGroup;var item=ge(this._getApplicationMenuItemId(appID));if(item.parentNode==this.sortableRoot){sortableGroup=this.sortableGroup;}else{sortableGroup=this.extendedSortableGroup;}
if(setting){this._addApplicationMenuSortable(appID,sortableGroup);var source=ApplicationDock.SaveBookmarksSource.APPLICATION_MENU;this._saveBookmarksOrder.bind(this,source).defer();delete this.removedBookmarks[appID];}else{if(!this.removedBookmarks[appID]){this.removedBookmarks[appID]=this.bookmarks[appID];}
sortableGroup.removeSortable(appID);this._removeBookmark(appID);}
this._animateSetBookmarked(appID,setting);},_removeBookmark:function(appID){new AsyncRequest().setURI('/ajax/edit_app_settings.php').setData({'bookmark':1,'bookmarked':false,'app_id':appID}).setHandler(this._removeBookmarkHandler.bind(this,appID)).send();},_removeBookmarkHandler:function(appID){this.sortedBookmarks.remove(appID);this._resetIconGarden();},_animateSetBookmarked:function(appID,setting){var itemElem=ge(this._getApplicationMenuLinkContainerId(appID));var undoElem=ge(this._getAppMenuUndoRemoveItemId(appID));var hiddenElem,shownElem;if(!setting){hiddenElem=itemElem;shownElem=undoElem;}else{hiddenElem=undoElem;shownElem=itemElem;}
hide(hiddenElem);animation(shownElem).show().from('opacity',0).to('opacity',1).duration(ApplicationDock.ANIM_DURATION).go();if(!setting){this.undoTimeouts[appID]=(function(){var item=ge(this._getApplicationMenuItemId(appID));if(item){animation(item).to('height',0).duration(ApplicationDock.ANIM_DURATION).hide().ondone(this._onsortableLinkJump.bind(this,null)).go();}}).bind(this).defer(ApplicationDock.UNDO_ANIM_HIDE_DELAY);}else{clearTimeout(this.undoTimeouts[appID]);delete this.undoTimeouts[appID];}},_menuClick:function(appID,menuLinkID){if(ApplicationDock.presenceWidthTest){AsyncRequest.pingURI('/ajax/abtest_async.php',{test_name:'APP_DOCK_TEST',action:'USED_APP_MENU'});}
var appInfo=this._getAppInfo(appID);var logAction=appInfo.logAction;if(logAction){AsyncRequest.pingURI('/ajax/abtest_async.php',{test_name:'APPS_MENU_TEST',action:logAction});}},_getAppInfo:function(appID){return this.bookmarks[appID]||this.recentApps[appID]||this.removedBookmarks[appID];},_initExtendedApplicationMenuSortables:function(){this.extendedSortableGroup=new SortableGroup();this.extendedSortableRoot=$('application_menu_extended_root');this.sortableGroup.link(this.extendedSortableGroup);this.sortableGroup.setLinkJumpHandler(this._onsortableLinkJump.bind(this));var source=ApplicationDock.SaveBookmarksSource.APPLICATION_MENU;this.extendedSortableGroup.setOrderChangeHandler(this._saveBookmarksOrder.bind(this,source));},_addApplicationMenuSortable:function(appID,sortableGroup){var obj=$(this._getApplicationMenuItemId(appID));var handle=$(this._getApplicationMenuLinkId(appID));sortableGroup.addSortable(appID,obj,handle);},_resetApplicationMenu:function(){if(!this.menuLoaded){return;}
this.sortableGroup.destroy();if(this.extendedSortableGroup){this.extendedSortableGroup.destroy();}
if(this.recentSortableGroup){this.recentSortableGroup.destroy();}
this._renderApplicationMenu();this._initApplicationMenu.bind(this).defer();},_onsortableLinkJump:function(key){var order=this.sortableGroup.getOrder(),migrateKey=null;if(order.length>ApplicationDock.NUM_SHOWN){for(var i=order.length-1;i>=0;i--){if(order[i]!=key){migrateKey=order[i];break;}}
DOM.prependContent(this.extendedSortableRoot,$(this._getApplicationMenuItemId(migrateKey)));this.extendedSortableGroup.migrateLinkedSortable(migrateKey);}else if(order.length<ApplicationDock.NUM_SHOWN){order=this.extendedSortableGroup.getOrder();for(var i=0;i<order.length;i++){if(order[i]!=key){migrateKey=order[i];break;}}
DOM.appendContent(this.sortableRoot,$(this._getApplicationMenuItemId(migrateKey)));this.sortableGroup.migrateLinkedSortable(migrateKey);}
var order=this.recentSortableGroup.getOrder();if(order.length<this.sortedRecentApps.length){this.recentAppBookmarked=parseInt(key,10);}else if(this.recentAppBookmarked){delete this.recentAppBookmarked;}},_saveBookmarksOrder:function(source){this._processNewBookmark();var order=this._getOrder(source);new AsyncRequest().setURI('/ajax/edit_app_settings.php').setData({reorder_bookmarks:1,app_ids:order}).setHandler(this._saveBookmarksHandler.bind(this,order,source)).send();},_processNewBookmark:function(){if(this.recentAppBookmarked){var appID=this.recentAppBookmarked;this.sortedRecentApps.remove(appID);this._initEventHandlers(appID);this.bookmarks[appID]=this.recentApps[appID];delete this.recentApps[appID];delete this.recentAppBookmarked;if(!this.sortedRecentApps.length){(function(){animation($('application_menu_recent_apps_container')).to('height',0).to('opacity',0).duration(ApplicationDock.ANIM_DURATION).hide().go()}).defer(ApplicationDock.RECENT_APPS_ANIM_HIDE_DELAY);}}},_getOrder:function(source){if(source==ApplicationDock.SaveBookmarksSource.APPLICATION_MENU){order=this.sortableGroup.getOrder();}else{order=this.iconGardenSortableGroup.getOrder();if(source==ApplicationDock.SaveBookmarksSource.BOOKMARK_CURRENT_APP){order.push(this._getAppShaftedByBookmarkableApp());}}
if(this.extendedSortableGroup){order=order.concat(this.extendedSortableGroup.getOrder());}else if(!this.menuLoaded&&this.sortedBookmarks.length>ApplicationDock.NUM_SHOWN){order=order.concat(this.sortedBookmarks.slice(ApplicationDock.NUM_SHOWN));}
order=unique(order);return order;},_saveBookmarksHandler:function(appIDs,source){this._updateSortedList(appIDs);switch(source){case ApplicationDock.SaveBookmarksSource.APPLICATION_MENU:this._resetIconGarden();break;case ApplicationDock.SaveBookmarksSource.ICON_GARDEN:case ApplicationDock.SaveBookmarksSource.BOOKMARK_CURRENT_APP:this._resetApplicationMenu();if(this.lastBookmarkedApp){this._openTab();var menuItem=$(this._getApplicationMenuItemId(this.lastBookmarkedApp));var gardenItem=$(this._getApplicationIconGardenItemId(this.lastBookmarkedApp));animation(menuItem).from('backgroundColor','#FFF9B7').to('backgroundColor','#FFFFFF').ease(animation.ease.begin).duration(4000).ondone(CSS.setStyle.bind(this,menuItem,'backgroundColor','')).go();animation(gardenItem).from('backgroundColor','#FFF9B7').to('backgroundColor','#EAEAEA').ease(animation.ease.begin).duration(4000).ondone(CSS.setStyle.bind(this,gardenItem,'backgroundColor','')).go();}
break;}},_updateSortedList:function(appIDs){this.sortedBookmarks=[];for(var i=0;i<appIDs.length;i++){this.sortedBookmarks.push(parseInt(appIDs[i],10));}},_renderIconGarden:function(){DOM.setContent(this.iconGardenContainer,HTML(this._renderIconGardenContent()));},_renderIconGardenContent:function(){var markupArr=['<div id="application_icon_garden_root"',' class="icon_garden_root">'];for(var i=0,length=Math.min(ApplicationDock.NUM_SHOWN,this.sortedBookmarks.length);i<length;i++){var appID=this.sortedBookmarks[i];markupArr.push('<div id="',this._getApplicationIconGardenItemId(appID),'"',' class="icon_garden_elem">',this._renderApplicationIconGardenItem(appID),'</div>');}
markupArr.push('</div>');return markupArr.join('');},_renderApplicationIconGardenItem:function(appID){var appInfo=this._getAppInfo(appID);var isFacebookURI=URI(appInfo['href']||'').isFacebookURI();var markupArr=['<div class="icon_garden_inner">','<a id="',this._getApplicationIconGardenLinkId(appID),'"',' onmouseover="applicationDock.mouseOverIconGarden(',appID,');"',' onmouseout="applicationDock.MouseOutIconGarden(',appID,');"',isFacebookURI?'':' target="_blank"',' href="',appInfo['href'],'">',appInfo['new_icon_img'],'<div class="titletip">','<strong>',htmlize(appInfo['name']),'</strong>','</div>','</a>','</div>'];return markupArr.join('');},mouseOverIconGarden:function(appID){if(shown(this.menuWrapper)){return;}
if(!this.currentIconGardenDraggableKey||this.currentIconGardenDraggableKey!=appID){CSS.addClass(this._getApplicationIconGardenItemId(appID),'hover');}},MouseOutIconGarden:function(appID){CSS.removeClass(this._getApplicationIconGardenItemId(appID),'hover');},_grabCallback:function(appID){this.currentIconGardenDraggableKey=appID;},_dropCallback:function(appID){this.currentIconGardenDraggableKey=null;},_getApplicationIconGardenItemId:function(appID){return'application_icon_garden_'+appID;},_getApplicationIconGardenLinkId:function(appID){return'application_icon_garden_link_'+appID;},_getAppMenuRemoveItemId:function(appID){return'application_remove_item_'+appID;},_getAppMenuUndoRemoveItemId:function(appID){return'application_undo_remove_item_'+appID;},_getAppMenuUndoRemoveItemLinkId:function(appID){return'application_undo_remove_item_link_'+appID;},_initIconGardenSortables:function(){this.iconGardenSortableGroup=new SortableGroup();this.iconGardenSortableRoot=$('application_icon_garden_root');var source=ApplicationDock.SaveBookmarksSource.ICON_GARDEN;this.iconGardenSortableGroup.setOrderChangeHandler(this._saveBookmarksOrder.bind(this,source));for(var i=0,length=Math.min(this.sortedBookmarks.length,ApplicationDock.NUM_SHOWN);i<length;i++){this._addIconGardenSortable(this.sortedBookmarks[i]);}},_addIconGardenSortable:function(appID){var obj=$(this._getApplicationIconGardenItemId(appID));var handle=$(this._getApplicationIconGardenLinkId(appID));this.iconGardenSortableGroup.addSortable(appID,obj,handle).setGrabCallback(this._grabCallback.bind(this)).setDropCallback(this._dropCallback.bind(this));if(ApplicationDock.presenceWidthTest){handle.listen('click',function(){AsyncRequest.pingURI('/ajax/abtest_async.php',{action:'USED_APP_DOCK',test_name:'APP_DOCK_TEST'});});}
if(this.logBMClick||this.logTabOpen){var actions=['APPLICATIONS_GARDEN_CLICK'];var test_names=['PLATFORM_APPDOCK_APPBUTTON','PLATFORM_BOOKMARK_BUTTON_LOCATION','APPS_MENU_TEST'];handle.listen('click',AsyncRequest.pingURI.bind(AsyncRequest,'/ajax/abtest_multi_async.php',{'actions':actions,'test_names':test_names}));}},_resetIconGarden:function(){this.iconGardenSortableGroup.destroy();this._renderIconGarden();this._initIconGardenSortables.bind(this).defer();},_renderBookmarkableApp:function(){DOM.setContent(this.bookmarkableAppContainer,HTML(this._renderBookmarkableAppContent()));var link=DOM.find(this.bookmarkableAppContainer,'a');link.listen('click',this.bookmarkCurrentApp.bind(this,false));if(this.topBookmark&&ge('sidebar_ads')){this.bookmarkTopContainer=$N('div',{'className':'bookmark_top_container'});DOM.setContent(this.bookmarkTopContainer,HTML(this.topBookmark));var bookmarkTop=DOM.find(this.bookmarkTopContainer,'div.bookmark_dummy');DOM.insertBefore(this.bookmarkTopContainer,$('sidebar_ads'));DOM.replace(bookmarkTop,HTML(this._renderBookmarkableAppContent('top')));var link=DOM.find(this.bookmarkTopContainer,'a');link.listen('click',this.bookmarkCurrentApp.bind(this,true));}
CSS.removeClass(this.bookmarkableAppWrapper,'hidden_elem');},_hideBookmarkableApp:function(){CSS.addClass(this.bookmarkableAppWrapper,'hidden_elem');if(this.bookmarkTopContainer){hide(this.bookmarkTopContainer);}},_renderBookmarkableAppContent:function(){var appInfo=values(this.bookmarkableApp)[0];var markupArr=['<a',' onmouseover="applicationDock.mouseOverBookmarkableApp();return false;"',' onmouseout="applicationDock.mouseOutBookmarkableApp();return false;"',' href="#">','<span class="bookmark_app_plus"></span>',appInfo['new_icon_img'],'<span class="bookmark_text">',_tx("Bookmark"),' ',htmlize(appInfo['name']),'</span>','</a>'];return markupArr.join('');},mouseOverBookmarkableApp:function(){CSS.addClass(this.bookmarkableAppWrapper,'hover');},mouseOutBookmarkableApp:function(){CSS.removeClass(this.bookmarkableAppWrapper,'hover');},setBookmarkableApp:function(bookmarkableApp,noRender){this.bookmarkableApp=bookmarkableApp;if(!noRender){if(is_empty(this.bookmarkableApp)){this._hideBookmarkableApp();}else{this._renderBookmarkableApp();}}
return this;},setRecentApps:function(recentApps){this.recentApps=recentApps;return this;},setTopBookmarkWrap:function(topBookmarkWrap){this.topBookmark=topBookmarkWrap;return this;},setADLogging:function(logState){this.logTabOpen=logState;return this;},setBMLogging:function(logState){this.logBMClick=logState;return this;},_getAppShaftedByBookmarkableApp:function(){return this.sortedBookmarks[ApplicationDock.NUM_SHOWN-1];},bookmarkCurrentApp:function(fromTop){var appID=keys(this.bookmarkableApp)[0];var existingApp=this.bookmarks[appID];this.bookmarks[appID]=this.bookmarkableApp[appID];var div=$N('div',{id:this._getApplicationIconGardenItemId(appID),className:'icon_garden_elem'},HTML(this._renderApplicationIconGardenItem(appID)));if(this.sortedBookmarks.length>=ApplicationDock.NUM_SHOWN){this.iconGardenSortableRoot.replaceChild(div,this.iconGardenSortableRoot.lastChild);this.iconGardenSortableGroup.removeSortable(this._getAppShaftedByBookmarkableApp());}else{this.iconGardenSortableRoot.appendChild(div);}
this._addIconGardenSortable.bind(this,appID).defer();this._hideBookmarkableApp();this.lastBookmarkedApp=appID;if(this.logBMClick){var result={test_name:'PLATFORM_BOOKMARK_BUTTON_LOCATION'};result.action=fromTop?'PLATFORM_BOOKMARK_TOP':'PLATFORM_BOOKMARK_BOTTOM';AsyncRequest.pingURI('/ajax/abtest_async.php',result);}
this._saveBookmarksOrder.bind(this,ApplicationDock.SaveBookmarksSource.BOOKMARK_CURRENT_APP).defer();},_handleMsg:function(channel,obj){if(obj.type=='bookmarks'){var newSortedList=this._getSortedList(obj.bookmarks);if(!are_equal(this.sortedBookmarks,newSortedList)){this.bookmarks=obj.bookmarks;this.sortedBookmarks=newSortedList;if(!this.suppressReset){this._resetApplicationMenu();this._resetIconGarden();}
this.suppressReset=false;}
var message={sender:this,applications:this.sortedBookmarks};Arbiter.inform(ApplicationDock.BOOKMARKS_CHANGED,message);return true;}
return false;}}

function ScrollArea(scroll_div_id,content_div_id,down_arrow_id,up_arrow_id){if(this===window){Util.error('You\'re doing this wrong.  This is a class and should be '+'with new ScrollArea(...);');return;}
copy_properties(this,{scroll_div:$(scroll_div_id),content_div:$(content_div_id),down_arrow:$(down_arrow_id),up_arrow:$(up_arrow_id)});copy_properties(this,{auto_move_interval:null,allow_page_scroll:true,max_height:false});this.down_arrow.onmouseout=bind(this,'_endAutoMove',ScrollArea.DOWN);this.down_arrow.onmouseover=bind(this,'_startAutoMove',ScrollArea.HOVER_INTERVAL,ScrollArea.DOWN);this.up_arrow.onmouseout=bind(this,'_endAutoMove',ScrollArea.UP);this.up_arrow.onmouseover=bind(this,'_startAutoMove',ScrollArea.HOVER_INTERVAL,ScrollArea.UP);this.scroll_div.onmouseover=bind(this,'_disallowPageScroll');this.scroll_div.onmouseout=bind(this,'_allowPageScroll');ScrollWheel.addHandler(this._pageScrollResponse.bind(this));ScrollArea.instances.push(this);this.update();}
copy_properties(ScrollArea,{HOVER_INTERVAL:50,MOUSE_WHEEL_MULTIPLE:-8,UP:1,DOWN:2,instances:[],build:function(id,content,max_height){var content_id=id+'_content';var scroll_id=id+'_scroll';var down_id=id+'_down';var up_id=id+'_up';var content_node=$N('div',{'className':'scroll_area_content','id':content_id},content);var down_node=$N('a',{'className':'arrow down_arrow','id':down_id},HTML('<span>&nbsp;</span>'));down_node.listen('click',Event.kill);var up_node=$N('a',{'className':'arrow up_arrow','id':up_id},HTML('<span>&nbsp;</span>'));up_node.listen('click',Event.kill);var scroller_node=$N('div',{'className':'scroll_area_scroll','id':scroll_id});scroller_node.appendChild(content_node);scroller_node.appendChild(down_node);scroller_node.appendChild(up_node);var wrapper_node=$N('div',{'id':id},scroller_node);(function(scroll_id,content_id,down_id,up_id,max_height){new ScrollArea(scroll_id,content_id,down_id,up_id).setMaxHeight(max_height);}).bind(this,scroll_id,content_id,down_id,up_id,max_height).defer();return wrapper_node;},getInnerInstance:function(element){for(var i=0;i<ScrollArea.instances.length;i++){if(DOM.contains(element,ScrollArea.instances[i].scroll_div)){return ScrollArea.instances[i];}}
return false;}});copy_properties(ScrollArea.prototype,{_startAutoMove:function(interval_time,direction){if(direction==ScrollArea.UP){this.up_arrow.addClass('arrow_hover');this.up_arrow.addClass('up_arrow_hover');}else{this.down_arrow.addClass('arrow_hover');this.down_arrow.addClass('down_arrow_hover');}
var move_fn=bind(this,this.moveBy,(direction==ScrollArea.UP)?-11:11);this.auto_move_interval=setInterval(move_fn,interval_time);},_endAutoMove:function(direction){if(direction==ScrollArea.UP){this.up_arrow.removeClass('arrow_hover');this.up_arrow.removeClass('up_arrow_hover');}else{this.down_arrow.removeClass('arrow_hover');this.down_arrow.removeClass('down_arrow_hover')}
clearInterval(this.auto_move_interval);},_disallowPageScroll:function(){this.allow_page_scroll=false;},_allowPageScroll:function(){this.allow_page_scroll=true;},_pageScrollResponse:function(delta){if(!this.allow_page_scroll){var round_fn=delta>0?Math.ceil:Math.floor;this.moveBy(ScrollArea.MOUSE_WHEEL_MULTIPLE*round_fn(delta));}
return this.allow_page_scroll;},_scrollTop:function(){return(-1*parseInt(this.content_div.style.marginTop))||0;},_setScrollTop:function(new_top){new_top=this._enforceRange(new_top);this.content_div.style.marginTop=-new_top+'px';},_isAtTop:function(){return this._scrollTop()==0;},_isAtBottom:function(){var scrollTop=this._scrollTop();return scrollTop==this._enforceRange(scrollTop+1);},_enforceRange:function(test_val){var new_top;var hidden_content_height=Vector2.getElementDimensions(this.content_div).y-
Vector2.getElementDimensions(this.scroll_div).y;if(test_val<0){new_top=0;}else if(test_val>hidden_content_height){new_top=hidden_content_height;}else{new_top=test_val;}
return new_top;},setMaxHeight:function(new_max){this.max_height=new_max;return this;},moveBy:function(distance){var current_top=this._scrollTop();var new_top=current_top+distance;this._setScrollTop(new_top);this.update();return this;},moveTo:function(destination){this._setScrollTop(destination);this.update();return this;},update:function(){var content_size=Vector2.getElementDimensions(this.content_div);var scroll_size=Vector2.getElementDimensions(this.scroll_div);if(content_size.y){if(content_size.y>=this.max_height&&scroll_size.y!=this.max_height){this.scroll_div.style.height=this.max_height+'px';}else if(content_size.y<this.max_height&&scroll_size.y!=content_size.y){this.scroll_div.style.height=content_size.y+'px';}}
this._isAtTop()?CSS.addClass(this.scroll_div,'at_top'):CSS.removeClass(this.scroll_div,'at_top');this._isAtBottom()?CSS.addClass(this.scroll_div,'at_bottom'):CSS.removeClass(this.scroll_div,'at_bottom');return this;}});ScrollWheel=function(){var _listenerAttached=false;var _callbacks=[];var _handle=function(event){var delta=0;event=$E(event);if(event.wheelDelta){delta=event.wheelDelta/120;if(ua.opera()){delta=-delta;}}else if(event.detail){delta=-event.detail/3;}
if(delta){for(var i=0;i<_callbacks.length;i++){if(!_callbacks[i](delta)){Event.kill(event);return;}}}};return{addHandler:function(callback){if(!_listenerAttached){if(window.addEventListener){window.addEventListener('DOMMouseScroll',_handle,false);}
window.onmousewheel=document.onmousewheel=_handle;_listenerAttached=true;}
_callbacks.push(callback);}};}();

function StatusEditor(root,profile_id){this.rootElem=root;this.profile_id=profile_id;this.statusInput=DOM.find(root,'input.status_input');this.placeholder=this.getPlaceholder();this.emptyValue=this.statusInput.value;this.initialValue='';this.location_id=false;this.locationEnabled=false;this._attach();var ix=StatusEditor.instances.push(this)-1;onunloadRegister(function(){delete StatusEditor.instances[ix];});}
StatusEditor.instances=[];StatusEditor.update=function(payload,time,initiator){StatusEditor.instances.forEach(function(editor){if(editor!=initiator){editor._onUpdate(payload,time);}});}
StatusEditor.poll=function(){new AsyncRequest().setURI('/ajax/poll_status.php').setMethod('GET').setReadOnly(true).setOption('bundle',true).setHandler(function(r){var payload=r.getPayload();StatusEditor.update(payload,null);}).send();}
StatusEditor.prototype._onUpdate=bagofholding;StatusEditor.prototype.getPlaceholder=function(){var placeholder=DOM.find(this.rootElem,'input.status_placeholder_input');return placeholder;}
StatusEditor.prototype._attach=function(){this.statusInput.listen('keypress',this.onkeypress.bind(this));this.statusInput.listen('blur',this.onInputBlur.bind(this));this.placeholder.listen('focus',this._onFocused.bind(this));var loc_anchors=DOM.scry(this.rootElem,'a.location_add_button');for(var i=0;i<loc_anchors.length;i++){loc_anchors[i].listen('click',this._onAddLocation.bind(this));show(loc_anchors[i]);}
if(this.locationEnabled){DOM.find(this.rootElem,'a.location_remove_button').listen('click',this._onRemoveLocation.bind(this));}}
StatusEditor.prototype.onkeypress=function(event){switch(event_get_keypress_keycode(event)){case KEYS.ESC:this.statusInput.value=this.emptyValue;this.statusInput.blur();break;case KEYS.RETURN:this.post();return $E(event).kill();}}
StatusEditor.prototype.onInputBlur=function(){var trimmed=trim(this.statusInput.value);if(this.isNonedit(trimmed)){this.reset();}}
StatusEditor.prototype.clear=function(){new AsyncRequest().setURI('/updatestatus.php').setData({'profile_id':this.profile_id,'clear':1}).setHandler(function(){this._onCleared();StatusEditor.update({'markup':''},null,this);}.bind(this)).send();return false;}
StatusEditor.prototype._onCleared=bagofholding;StatusEditor.prototype._onFocused=bagofholding;StatusEditor.prototype._onAddLocation=bagofholding;StatusEditor.prototype._onRemoveLocation=bagofholding;StatusEditor.prototype.setLocationSelector=function(selector){var location_handler=function(loc){if(this.location_id!==false){this.location_id=loc.id;}}.bind(this);this._locationSelector=selector;selector.setLocationHandler(location_handler);this.locationEnabled=true;}
StatusEditor.prototype.startEdit=function(value){this.statusInput.value=value;this.initialValue=value;this.placeholder.focus();}
StatusEditor.prototype.reset=function(){CSS.removeClass(this.rootElem,'placeholder_off');this.placeholder.getControl().setFocused(false);}
StatusEditor.prototype.isNonedit=function(text){return!text||(text==trim(this.emptyValue))||(this.initialValue&&(text==this.initialValue));}
StatusEditor.prototype.post=function(abtest_data,extra_post_params){var text=trim(this.statusInput.value);if(this.isNonedit(text)){return;}
this.statusInput.disabled=true;CSS.addClass(this.rootElem,'disabled');this.statusInput.blur();var data={'profile_id':this.profile_id,'status':text};var page_uri=URI.getRequestURI();if(page_uri.getPath()=='/profile.php'){data['profile']=true;}else if(page_uri.getPath()=='/home.php'||page_uri.getPath()=='/widgets/livefeed.php'){if(window.HomeFeed){var homefeed=HomeFeed.getInstance();if(homefeed){data['home_tab_id']=homefeed.tabId;}}}
if(abtest_data!=undefined&&abtest_data['test_name']&&abtest_data['action']){copy_properties(data,abtest_data);}else{data['test_name']='INLINE_STATUS_EDITOR';data['action']='OTHER_UPDATE';}
if(this.publish_all){data['publish_all']=1;}
if(this.app_id){data['app_id']=this.app_id;}
if(this.location_id){data['location_id']=this.location_id;}
if(extra_post_params){copy_properties(data,extra_post_params);}
new AsyncRequest().setURI('/updatestatus.php').setData(data).setFinallyHandler(function(){this.statusInput.disabled=false;CSS.removeClass(this.rootElem,'disabled');}.bind(this)).setHandler(bind(this,handle_require_email_conf_response,function(r){this.reset();this.initialValue=this.statusInput.value;var payload=r.getPayload();this._onPosted(payload);StatusEditor.update(payload,null,this);}.bind(this),null,null)).send();}
StatusEditor.prototype._onPosted=bagofholding;function HomeStatusEditor(root,profile_id,is_friends){this.parent.construct(this,root,profile_id);if(this.showsStatusBody()){this.statusBody=DOM.find(root,'div.status_body');DOM.find(root,'a.status_clear_link').onclick=this.clear.bind(this);}
this.postButton=DOM.find(root,'input[type="submit"]');this.postButton.listen('click',this.post.shield(this));this.is_friends=is_friends;}
HomeStatusEditor.extend('StatusEditor');HomeStatusEditor.prototype.showsStatusBody=function(){return true;}
HomeStatusEditor.prototype.post=function(){this.statusMessage=this.statusInput.value;var action_message=this.is_friends?'FRIENDS_UPDATE':'HOME_UPDATE';this.parent.post({test_name:'INLINE_STATUS_EDITOR',action:action_message});}
HomeStatusEditor.prototype._onPosted=function(payload){this._onUpdate(payload);}
HomeStatusEditor.prototype._onUpdate=function(payload,time){var status=payload.markup;if(!status){this._onCleared();}
if(this.showsStatusBody()&&status){DOM.find(this.rootElem,'span.status_text').setContent(HTML(status));DOM.find(this.rootElem,'span.status_time').setContent(HTML(time||_tx("a moment ago&nbsp;")));var status_location=DOM.scry(this.rootElem,'span.status_location')[0];if(!payload.location_label){if(status_location){hide(status_location);}}else{if(!status_location){DOM.insertAfter(DOM.find(this.rootElem,'span.status_time'),$N('span',{className:'status_location'},[_tx("near {location}",{location:''}),$N('a',{href:payload.location_href,target:'_blank'},payload.location_label)]));}
show(status_location);}
if(CSS.hasClass(this.statusBody,'status_empty')){CSS.removeClass(this.statusBody,'status_empty');animation(this.statusBody).to('height','auto').from('0px').to('opacity',1).from(0).blind().show().duration(300).ease(animation.ease.end).go();}else{animation(this.statusBody).to('opacity',1).from(0).duration(300).go();}}
var homefeed=window.HomeFeed&&HomeFeed.getInstance();if(homefeed){if(payload.feed){var tabId=homefeed.tabId;if(tabId==payload.feed_tab){var container=document.createElement('div');CSS.setClass(container,'just_updated_status');container.style.display='none';DOM.setContent(container,HTML(payload.feed));var newsfeedWrapper=$('newsfeed_wrapper');var topStories=DOM.scry(newsfeedWrapper,'div.tab_top_stories')[0];newsfeedWrapper.prependContent(container);if(topStories&&topStories.firstChild&&CSS.hasClass(topStories.firstChild,'one_liner_cluster')){animation(topStories.firstChild).to('padding-top','0px').duration(300).go();}
animation(container).to('height','auto').from('0px').to('opacity',1).from(0).blind().show().duration(300).ease(animation.ease.end).go();}}
if(payload.top_status_stories&&homefeed.tabId==HomeFeed.TAB_TOP_STORIES){var newsfeedWrapper=$('newsfeed_wrapper');var topStories=DOM.scry(newsfeedWrapper,'div.tab_top_stories')[0];if(topStories&&topStories.firstChild&&CSS.hasClass(topStories.firstChild,'one_liner_cluster')){var old_status_stories=DOM.scry(topStories.firstChild,'div.status_story_wrapper');old_status_stories.forEach(function(story){story.remove();});DOM.prependContent(topStories.firstChild,HTML(payload.top_status_stories));}}}}
HomeStatusEditor.prototype._onCleared=function(){CSS.addClass(this.statusBody,'status_empty');animation(this.statusBody).to('height','0px').to('opacity',0).from(1).blind().hide().duration(300).ease(animation.ease.end).go();}
HomeStatusEditor.prototype._onAddLocation=function(target){CSS.addClass(this.rootElem,'location_composer_shown');var loc=this._locationSelector.getLocation();if(loc){this.location_id=loc.id;}
return false;}
HomeStatusEditor.prototype._onRemoveLocation=function(target){CSS.removeClass(this.rootElem,'location_composer_shown');this.location_id=null;return false;}
function LiveFeedWidgetStatusEditor(root,profile_id){this.parent.construct(this,root,profile_id);this.publish_line=ge('status_publish_all_line');this.publish_line_hover=false;if(this.publish_line){this.publish_line.listen('mouseover',function(){this.publish_line_hover=true;}.bind(this));this.publish_line.listen('mouseout',function(){this.publish_line_hover=false;}.bind(this));}}
LiveFeedWidgetStatusEditor.extend('HomeStatusEditor');LiveFeedWidgetStatusEditor.prototype.showsStatusBody=function(){return false;}
LiveFeedWidgetStatusEditor.prototype.setApplicationId=function(app_id){this.app_id=app_id;}
LiveFeedWidgetStatusEditor.prototype.setPublishAll=function(status){this.publish_all=status;}
LiveFeedWidgetStatusEditor.prototype._onFocused=function(value){this.parent._onFocused(value);if(this.publish_line){this.publish_line.addClass('show_publish_checkbox');}}
LiveFeedWidgetStatusEditor.prototype.reset=function(value){if(this.publish_line_hover){return;}
this.parent.reset();if(this.publish_line){this.publish_line.removeClass('show_publish_checkbox');}}
LiveFeedWidgetStatusEditor.prototype.post=function(abtest_data){if(ge('status_publish_all')){this.setPublishAll(ge('status_publish_all').checked);}
var homefeed=HomeFeed.getInstance();if(homefeed){homefeed.temporarilySuspendCdn(1);var tabId=homefeed.getTab();if(tabId==HomeFeed.TAB_LIVEWIDGET_EVERYONE&&!this.publish_all){this.showNotification();}}
this.parent.post();}
LiveFeedWidgetStatusEditor.prototype.showNotification=function(){var notificationLine=ge('status_notification_line');if(notificationLine){animation(notificationLine).to('opacity',1).from('opacity',0).show().duration(1000).checkpoint().duration(3000).checkpoint().to('opacity',0).from('opacity',1).duration(1000).hide().go();}}
LiveFeedWidgetStatusEditor.savePublishAllSetting=function(widgetAppId){if(ge('status_publish_all')){var publishAll=ge('status_publish_all').checked;new AsyncSignal('/ajax/live_feed_settings.php',{'publish_all':publishAll,'widget_app_id':widgetAppId}).send();}}
function ChatStatusEditor(root,profile_id,isEmpty){this.parent.construct(this,root,profile_id);this.statusBody=DOM.find(root,'div.chat_status_body');this.isEmpty=isEmpty;};ChatStatusEditor.prototype._attach=function(){this.parent._attach();DOM.find(this.rootElem,'a.status_clear_link').onclick=this.clear.bind(this);var edit_links=DOM.scry(this.rootElem,'a.status_edit_link');for(var i=0;i<edit_links.length;i++){edit_links[i].onclick=this.startEdit.bind(this,this.emptyValue);}}
ChatStatusEditor.prototype.reset=function(){this.parent.reset();CSS.removeClass(this.rootElem,'edit');if(this.isEmpty){CSS.addClass(this.statusBody,'status_empty');}else{CSS.removeClass(this.statusBody,'status_empty');}}
ChatStatusEditor.prototype.post=function(){this.statusMessage=this.statusInput.value;this.parent.post({test_name:'INLINE_STATUS_EDITOR',action:'CHAT_UPDATE'},{'chat':1});}
ChatStatusEditor.prototype._onUpdate=function(payload,time){var status=payload.markup;if(status){this.isEmpty=false;$('chat_su_text').setContent(HTML(status));$('chat_su_time').setContent(HTML(time||_tx("a moment ago&nbsp;")));}else{this.isEmpty=true;$('chat_su_text').setContent('');$('chat_su_time').setContent('');}
this.statusInput.value=this.emptyValue;this.reset();}
ChatStatusEditor.prototype._onCleared=function(){this._onUpdate({markup:''});}
ChatStatusEditor.prototype.startEdit=function(value){CSS.addClass(this.rootElem,'edit');this.parent.startEdit(value);}
ChatStatusEditor.prototype._onPosted=function(payload){this._onUpdate(payload);}
ChatStatusEditor.extend('StatusEditor');

function Tabset(id,selectedId){if(!Tabset.instances){Tabset.instances={};}
Tabset.instances[id]=this;onunloadRegister(function(){Tabset.instances={}});this.id=id;this.selectedId=selectedId;}
Tabset.getInstance=function(id){if(Tabset.instances&&Tabset.instances[id]){return Tabset.instances[id];}
return null;}
Tabset.prototype.getFullTabId=function(tabId){return this.id+'_'+tabId;}
Tabset.prototype.selectTab=function(tabId,func,beforeClickFunc){if(beforeClickFunc&&!beforeClickFunc()){return false;}
if(this.selectedId){this.lastSelected=this.selectedId;CSS.removeClass(ge(this.selectedId),'Tabset_selected');}
this.selectedId=tabId;CSS.addClass(ge(this.selectedId),'Tabset_selected');if(func){return func();}
return true;}
Tabset.prototype.unselect=function(){if(this.selectedId){CSS.removeClass($(this.selectedId),'Tabset_selected');}}
Tabset.prototype.hasTabElem=function(id){return ge(this.id+'_'+id);}
Tabset.prototype.getTabElem=function(id){return $(this.id+'_'+id);}

function UserHistory(userid){var current_time=(new Date()).getTime();new AsyncRequest().setMethod('GET').setReadOnly(true).setURI('/ajax/browse_history.php').setData({'u':userid}).setErrorHandler(function(){}).setTransportErrorHandler(function(){}).setHandler(function(response){var dt=(new Date()).getTime()-current_time;userhistory_log_response({'dt':dt});this.entries=response.getPayload().entries;}.bind(this)).send();}
function userhistory_log_response(data){data['evt']='uh';new AsyncSignal('/ajax/typeahead_log.php',data).send();}

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