/*    HTTP Host:  b.static.ak.fbcdn.net                                        */
/*    Generated:  February 9th 2010 1:55:08 PM PST                             */
/*      Machine:  10.16.139.108                                                */
/*       Source:  Global Cache                                                 */
/*     Location:  js/4bno4b8k998ggc8g.pkg.js r139055                           */
/*       Locale:  nu_ll                                                        */
/*         Path:  js/4bno4b8k998ggc8g.pkg.js                                   */

if (window.CavalryLogger) { CavalryLogger.start_js(["js\/4bno4b8k998ggc8g.pkg.js"]); }


function Barrier(ops_num,callback){if(ops_num===undefined||ops_num<0||callback===undefined){Util.error('You must provide a non-negative number of outstanding '
+'operations and a callback for Barrier constructor.');return null;}
if(ops_num==0){callback();return;}
this.ops_num=ops_num;this.callback=callback;}
copy_properties(Barrier.prototype,{notify:function(){if(this.ops_num<=0){Util.error('Barrier.notify is called more times than it is supposed to be.');return;}
this.ops_num--;if(this.ops_num==0){this.callback();}}});

function PageCache(max_page_num,max_ttl){if(this===window){return new PageCache(max_page_num,max_ttl);}
this._MAX_PAGE_NUM=typeof max_page_num=='undefined'?5:max_page_num;this._MAX_TTL=typeof max_ttl=='undefined'?600000:max_ttl;this._storage={}}
copy_properties(PageCache.prototype,{_normalizeURI:function(uri){return new URI(uri).getUnqualifiedURI().setFragment('').removeQueryData('ref').toString();},addPage:function(uri,properties){uri=this._normalizeURI(uri);if(!this._storage[uri]){this._storage[uri]={};}
var page=this._storage[uri];copy_properties(page,properties);page.accessTime=page.genTime=(new Date()).getTime();this._clearCache();},updatePage:function(uri,obj){uri=this._normalizeURI(uri);if(!this._storage[uri]){return;}
copy_properties(this._storage[uri],obj);},isPageInCache:function(uri){return!!this._storage[this._normalizeURI(uri)];},invalidatePage:function(uri){uri=this._normalizeURI(uri);delete this._storage[uri];},getPage:function(uri){this._clearCache();uri=this._normalizeURI(uri);var page=this._storage[uri];if(!page){return null;}
page.accessTime=(new Date()).getTime();return page;},_clearCache:function(){var cur_time=(new Date()).getTime();var oldest=null
var page_num=0;for(var uri in this._storage){var page=this._storage[uri];var ttl=page.ttl||this._MAX_TTL;if(page.genTime<cur_time-ttl){delete this._storage[uri];continue;}
if(!oldest||this._storage[oldest].accessTime>page.accessTime){oldest=uri;}
page_num++;}
if(page_num>this._MAX_PAGE_NUM&&oldest){delete this._storage[oldest];}}});

var Quickling={isActive:function(){return Quickling._is_active||false;},init:function(version,page_cache_enabled){if(Quickling._is_initialized){return;}
copy_properties(Quickling,{_is_initialized:true,_is_active:true,_is_page_cache_enabled:page_cache_enabled,_is_in_transition:false,_cur_quickling_uri:null,_transition_uri_map:{},_version:version});Quickling._instrumentTimeoutFunc('setInterval');Quickling._instrumentTimeoutFunc('setTimeout');PageTransitions.registerHandler(Quickling._transitionHandler);if(page_cache_enabled){Quickling._cache=new PageCache();Arbiter.subscribe('AsyncRequest.writeOperation',Quickling._onPageWrites);Arbiter.subscribe(Arbiter.PAGE_TRANSITION,Quickling._onPageTransitions);}},_onPageWrites:function(type,request){if(Quickling._is_in_transition){return;}
var cur_uri=PageTransitions.getMostRecentURI();if(Quickling._cache.isPageInCache(cur_uri)){Util.log('Page cache entry for "'+cur_uri+'" invalidated '
+'due to a write operation to '+request.getURI());Quickling._cache.invalidatePage(cur_uri);}},_onPageTransitions:function(type,message){if(!Quickling._cur_quickling_uri||Quickling._cur_quickling_uri==message.uri){return;}
var key=message.uri.getUnqualifiedURI().toString(),value=Quickling._cur_quickling_uri.getUnqualifiedURI().toString();Quickling._transition_uri_map[key]=value;},_startQuicklingTransition:function(){Quickling._is_in_transition=true;window.channelManager&&window.channelManager.setActionRequest(true);},_stopQuicklingTransition:function(){(function(){Quickling._is_in_transition=false;}).defer();},goHashOrGoHere:function(where){var uri=URI.getRequestURI();var hash=uri.getFragment();if(hash.startsWith('/')){var dest_url=hash;}else{var dest_url=where;}
PageTransitions.go(dest_url,true);},_isPageActive:function(uri){if(uri=='#'){return false;}
var uri=new URI(uri);if(uri.getDomain()&&uri.getDomain()!=URI().getDomain()){return false;}
var regex=Quickling._isPageActive.regex;if(!regex){regex=Quickling._isPageActive.regex=new RegExp(env_get('quickling_inactive_page_regex'));}
var testURIString=uri.getPath();var queryData=uri.getQueryData();if(queryData){testURIString+='?'+URI.implodeQuery(queryData);}
if(regex.test(testURIString)){return false;}
return true;},_transitionHandler:function(uri){if(Quickling._isTimeToRefresh()){return false;}
if(!Quickling._isPageActive(uri)){return false;}
removeHook('onafterloadhooks');removeHook('onloadhooks');_runHooks('onleavehooks');Quickling._startQuicklingTransition();Quickling._cur_quickling_uri=uri;var page,q_uri=null,key=uri.getUnqualifiedURI().toString();if(Quickling._is_page_cache_enabled&&((page=Quickling._cache.getPage(uri))||(q_uri=Quickling._transition_uri_map[key])&&(page=Quickling._cache.getPage(q_uri)))){Quickling._preBootloadHandler();var quickling_update_response=null;var barrier=new Barrier(2,function(){if(quickling_update_response){var payload=quickling_update_response.getPayload();for(var div_id in payload.content){var div=ge(div_id);if(div){DOM.setContent(div,HTML(payload.content[div_id]));}else{Util.warn('Unkown content div id:'+div_id
+' in Quickling updates');}}
if(!is_empty(payload.update_params)){copy_properties(page.update_params,payload.update_params);}}
$('content').style.visibility="visible";Quickling._stopQuicklingTransition();if(q_uri){PageTransitions.go(uri,true);}});function on_bootload_done(){document.title=page.title||'Facebook';var body_class=page.body_class||'';CSS.setClass(document.body,body_class
+(CSS.hasClass(document.body,'chat_body')?' chat_body':''));var content_div=$('content');content_div.style.visibility="hidden";DOM.setContent(content_div,HTML(page.html).setDeferred(true));if(content_div&&content_div.style.height=='1234px'){content_div.style.height='';}
PageTransitions.transitionComplete();var _invoke_callbacks=function(hooks){if(hooks){for(var ii=0;ii<hooks.length;ii++){try{eval('(function() {'+hooks[ii]+'})();');}catch(exception){Util.error('Error %x in executing cached hooks: %s',exception,hooks[ii].toString());}}}}
_invoke_callbacks(page.onload);_invoke_callbacks(page.onafterload);barrier.notify();}
Bootloader.loadResources(page.bootload,on_bootload_done,true);var quickling_param={version:Quickling._version,update:page.update_params};uri=new URI(uri).addQueryData({quickling:quickling_param});new AsyncRequest().setURI(uri.getPath()).setData(uri.getQueryData()).setInitialHandler(Quickling._onInitialResponse).setHandler(function(response){quickling_update_response=response;barrier.notify();}).setMethod('GET').setReadOnly(true).setOption('useIframeTransport',true).send();if(q_uri){Quickling._cur_quickling_uri=URI(q_uri);}}else{var quickling_param={version:Quickling._version};uri=new URI(uri).addQueryData({quickling:quickling_param});new AsyncRequest().setURI(uri.getPath()).setData(uri.getQueryData()).setPreBootloadHandler(Quickling._preBootloadHandler).setInitialHandler(Quickling._onInitialResponse).setHandler(Quickling._onresponse).setFinallyHandler(PageTransitions.transitionComplete).setMethod('GET').setReadOnly(true).setOption('useIframeTransport',true).send();}
return true;},_preBootloadHandler:function(response){var content_div=ge('content');if(content_div){content_div.style.height='1234px';content_div.innerHTML='';}
DOMScroll.scrollTo(new Vector2(0,0,'document'),false);return response&&!response.getPayload().redirect;},_onInitialResponse:function(response){var payload=response.getPayload();if(payload.redirect){if(!Quickling._isPageActive(payload.redirect)){go_or_replace(window.location,URI(payload.redirect).removeQueryData('quickling'),true);}else{PageTransitions.go(payload.redirect,true);}
return false;}
if(payload.version!=Quickling._version){go_or_replace(window.location,URI(payload.uri).removeQueryData('quickling'),true);return false;}
return true;},_onresponse:function(response){var payload=response.getPayload();document.title=payload.title||'Facebook';var body_class=payload.body_class||'';CSS.setClass(document.body,body_class
+(CSS.hasClass(document.body,'chat_body')?' chat_body':''));for(var div_id in payload.content){var div=ge(div_id);var content=payload.content[div_id];if(div){if(content===undefined||content===null){Util.warn('Content for div id: '+div_id+' is null');}else{var html_content=HTML(content).setDeferred(true);DOM.setContent(div,html_content);}}else{Util.warn('Unknown content div id: '+div_id);}}
if(Quickling._is_page_cache_enabled&&payload.page_cache_ttl){Quickling._cache.addPage(PageTransitions.getNextURI(),{title:payload.title,body_class:payload.body_class,html:payload.content['content'],onload:response.onload,onafterload:response.onafterload,bootload:response.bootload,update_params:payload.update_params,ttl:payload.page_cache_ttl});}
var content_div=ge('content');if(content_div&&content_div.style.height=='1234px'){content_div.style.height='';}
Quickling._stopQuicklingTransition();},_isTimeToRefresh:function(){Quickling._load_count=(Quickling._load_count||0)+1;return Quickling._load_count>=10;},_instrumentTimeoutFunc:function(original_name){window[original_name+'_native']=(function(orig){var _native=function _native(func,delay){return orig(func,delay);};return _native;})(window[original_name]);window[original_name]=function _setTimeout(func,delay,clear_on_quickling_event){var timeout_id=window[original_name+'_native'](func,delay);if(delay>0){onunloadRegister(function(){clearInterval(timeout_id);},clear_on_quickling_event);}
return timeout_id;};}};

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