Skip to content

Instantly share code, notes, and snippets.

@tsnow
Forked from matasar/gist:388805
Created May 4, 2010 01:14
Show Gist options
  • Save tsnow/388823 to your computer and use it in GitHub Desktop.
Save tsnow/388823 to your computer and use it in GitHub Desktop.
/*
HTTP Host: static.ak.fbcdn.net
Generated: April 26th 2010 3:53:31 PM PDT
Machine: 10.16.139.107
Locale: nu_ll
Path: js/19khsprwvtvokwow.pkg.js
*/
if (window.CavalryLogger) {
CavalryLogger.start_js(["js\/19khsprwvtvokwow.pkg.js"]);
}
if(navigator&&navigator.userAgent&&document.domain.toLowerCase().match(/(^|\.)facebook\..*/)&&!(parseInt((/Gecko\/([0-9]+)/.exec(navigator.userAgent)||[]).pop(),
10)<=20060508))document.domain=window.location.hostname.replace(/^.*(facebook\..*)$/i,
'$1');
var onloadRegister=window.onloadRegister||function(a){
onloadhooks.push(a);
}
;
var onloadhooks=window.onloadhooks||[];
var onafterloadRegister=window.onafterloadRegister||function(a){
onafterloadhooks.push(a);
}
;
var onafterloadhooks=window.onafterloadhooks||[];
function run_if_loaded(a,
b){
if(window.loaded)return b.call(a);
}
function run_with(b,
a,
c){
Bootloader.loadComponents(a,
bind(b,
c));
return false;
}
function wait_for_load(c,
b,
e){
e=bind(c,
e,
b);
if(window.loaded)return e();
switch((b||event).type){
case 'load':case 'focus':onafterloadRegister(e);
return;
case 'click':
var d=c.style,
a=document.body.style;
d.cursor=a.cursor='progress';
onafterloadRegister(function(){
d.cursor=a.cursor='';
if(c.tagName.toLowerCase()=='a'){
if(false!==e()&&c.href)window.location.href=c.href;
}
else if(c.click)c.click();
}
);
break;
}
return false;
}
function bind(d,
c){
var a=Array.prototype.slice.call(arguments,
2);
var b=function(){
var f=d||(this==window?false:this),
e=a.concat(Array.prototype.slice.call(arguments));
if(typeof(c)=="string"){
if(f[c])return f[c].apply(f,
e);
}
else return c.apply(f,
e);
}
;
if(typeof c=='string'){
b.name=c;
}
else if(c&&c.name)b.name=c.name;
b.toString=function(){
return bind._toString(d,
a,
c);
}
;
return b;
}
var curry=bind(null,
bind,
null);
bind._toString=bind._toString||function(c,a,b){
return (typeof b=='string')?('late bind<'+b+'>'):('bound<'+b.toString()+'>');
};
window.loadFirebugConsole&&loadFirebugConsole();
function env_get(a){
return typeof(window['Env'])!='undefined'&&Env[a];
}
!function(){
var a=document,
b=a.documentElement,
c=null,
d=function(e,f){
while(e&&e.nodeName!=f)e=e.parentNode;
return e;
}
;
b.onclick=function(e){
e=e||window.event;
c=e.target||e.srcElement;
var f=d(c,
'A')||b,
g=f.getAttribute('ajaxify')||f.href;
if(g)user_action(f,
'a',
e);
switch(f.rel){
case 'dialog':case 'dialog-post':Bootloader.loadComponents('dialog',
function(){
Dialog.bootstrap(g,
null,
f.rel=='dialog');
}
);
break;
case 'async':case 'async-post':Bootloader.loadComponents('async',
function(){
AsyncRequest.bootstrap(g,
f);
}
);
break;
default:return;
}
return false;
};
b.onsubmit=function(e){
e=e||window.event;
var f=e.target||e.srcElement;
if(!f||f.nodeName!='FORM'||!f.getAttribute('ajaxify'))return;
user_action(f,
'f',
e);
Bootloader.loadComponents('dom-form',
function(){
bootstrap_form(f,
c);
}
);
return false;
}
;
b.className=b.className.replace('no_js',
'');
}();
function eval_global(b){
if('string'!=typeof(b)){
throw new Error('JS sent to eval_global is not a string. Only strings '+'are permitted.');
}
else if(''==b)return;
var c=document.createElement('script');
c.type='text/javascript';
try{
c.appendChild(document.createTextNode(b));
}
catch(e){
c.text=b;
}
var a=(document.getElementsByTagName("head")[0]||document.documentElement);
a.appendChild(c);
a.removeChild(c);
}
function hasArrayNature(a){
if(!a||(typeof a!='object')||(!('length' in a)))return false;
if(a instanceof Array||('callee' in a)||('push' in a&&'pop' in a))return true;
return false;
}
function copy_properties(b,
c){
b=b||{};
c=c||{};
for(var a in c)b[a]=c[a];
if(c.hasOwnProperty&&c.hasOwnProperty('toString')&&(typeof c.toString!='undefined')&&(b.toString!==c.toString))b.toString=c.toString;
return b;
}
function arrayize(a){
if(!hasArrayNature(a))return [a];
return a;
}
function is_empty(b){
if(b instanceof Array){
return b.length==0;
}
else if(b instanceof Object){
for(var a in b)return false;
return true;
}
else return !b;
}
if(!window.async_callback)window.async_callback=function(a){
return a;
}
;
if(!window.user_action)window.user_action=function(){};
function Arbiter(){
copy_properties(this,
{
_listeners:[],
_events:{
}
,
_callbacks:{
}
,
_last_id:1,
_listen:{
}
}
);
copy_properties(this,
Arbiter);
}
copy_properties(Arbiter,
{
SUBSCRIBE_NEW:'new',
SUBSCRIBE_ALL:'all',
BEHAVIOR_EVENT:'event',
BEHAVIOR_PERSISTENT:'persistent',
BEHAVIOR_STATE:'state',
LIVEMESSAGE:'livemessage',
BOOTLOAD:'bootload',
FUNCTION_EXTENSION:'function_ext',
PAGE_TRANSITION:'pagetransitions/transition',
CONTEXT_CHANGE:'ui/context-change',
PAGECACHE_INVALIDATE:'pagecache/invalidate',
NEW_NOTIFICATIONS:'chat/new_notifications',
LIST_EDITOR_LISTS_CHANGED:'listeditor/friend_lists_changed',
subscribe:function(i,b,g){
if(!i)return null;
var a=Arbiter._getInstance(this);
a._listeners.push({
callback:b,
types:i}
);
g=g||Arbiter.SUBSCRIBE_ALL;
if(g==Arbiter.SUBSCRIBE_ALL){
if(!(i instanceof Array))i=[i];
var c,
h,
f;
for(var d=0;
d<i.length;
d++){
h=i[d];
if(typeof h!="string")throw new TypeError("Event types must be strings.");
if(h in a._events)for(var e=0;
e<a._events[h].length;
e++){
c=a._events[h][e];
f=b.apply(null,
[h,
c]);
if(f===false){
a._events[h].splice(e,
1);
e--;
}
}
}
}
else if(g!=Arbiter.SUBSCRIBE_NEW)throw new TypeError("Bad subscription policy.");
return {
arbiterID:a._listeners.length-1}
;
}
,
unsubscribe:function(a){
if(!('arbiterID' in a))throw new TypeError("Not an arbiter token.");
delete Arbiter._getInstance(this)._listeners[a.arbiterID];
}
,
inform:function(h,c,b){
var i=arrayize(h);
var a=Arbiter._getInstance(this);
b=b||Arbiter.BEHAVIOR_EVENT;
for(var e=0;
e<i.length;
e++){
var h=i[e],
d=null;
if(b==Arbiter.BEHAVIOR_PERSISTENT){
d=a._events.length;
if(!(h in a._events))a._events[h]=[];
a._events[h].push(c);
a._events[h]._stateful=false;
}
else if(b==Arbiter.BEHAVIOR_STATE){
d=0;
a._events[h]=[c];
a._events[h]._stateful=true;
}
else if(h in a._events)a._events[h]._stateful=false;
window.ArbiterMonitor&&ArbiterMonitor.getInstance(a).log('event',
h,
c);
var g;
for(var f=0;
f<a._listeners.length;
f++)if(a._listeners[f])if(Arbiter._checkType(h,
a._listeners[f].types)){
g=a._listeners[f].callback.apply(null,
[h,
c]);
if(g===false){
if(d!==null)a._events[h].splice(d,
1);
break;
}
}
a._updateCallbacks(h,
c);
window.ArbiterMonitor&&ArbiterMonitor.getInstance(a).log('done',
h,
c);
}
}
,
query:function(b){
var a=Arbiter._getInstance(this);
if(!(b in a._events))return null;
if(!a._events[b]._stateful)throw new Error("Querying state of an unstateful event.");
if(a._events[b].length)return a._events[b][0];
return null;
}
,
_instance:null,
_getInstance:function(a){
if(a instanceof Arbiter)return a;
if(!Arbiter._instance)Arbiter._instance=new Arbiter();
return Arbiter._instance;
}
,
_checkType:function(b,a){
if(b===a)return true;
if(a.length)for(var c=0;
c<a.length;
c++)if(a[c]===b)return true;
return false;
}
,
registerCallback:function(b,d){
var g,
c=0,
a=Arbiter._getInstance(this),
f=false;
if(typeof b=='function'){
g=a._last_id;
a._last_id++;
f=true;
}
else{
if(!a._callbacks[b])return null;
g=b;
}
if(hasArrayNature(d)){
var h={};
for(var e=0;
e<d.length;
e++)h[d[e]]=1;
d=h;
}
for(var i in d){
try{
if(a.query(i))continue;
}
catch(ex){
}
c+=d[i];
if(a._listen[i]===undefined)a._listen[i]={};
a._listen[i][g]=(a._listen[i][g]||0)+d[i];
}
if(c==0&&f){
b();
return null;
}
if(!f){
a._callbacks[g].depnum+=c;
}
else a._callbacks[g]={
callback:async_callback(b),
depnum:c}
;
return g;
}
,
_updateCallbacks:function(d,c){
if(c===null||!this._listen[d])return;
for(var b in this._listen[d]){
this._listen[d][b]--;
if(this._listen[d][b]<=0)delete this._listen[d][b];
this._callbacks[b].depnum--;
if(this._callbacks[b].depnum<=0){
var a=this._callbacks[b].callback;
delete this._callbacks[b];
a();
}
}
}
}
);
Function.prototype.deferUntil=function(a,g,b,h){
if(typeof this!='function'||g&&typeof g!='number')throw new TypeError();
if(a()){
this();
return;
}
var e=this,
d=null,
f=(new Date()).getTime();
var c=function(){
if(!a())if(g&&(new Date().getTime()-f)>=g){
h&&h();
}
else return;
d&&clearInterval(d);
e();
}
;
d=setInterval(c,
20,
b);
return d;
}
;
var Bootloader=window.Bootloader=(window.Bootloader&&window.Bootloader.realBootloader) ?
window.Bootloader :
(function(a){
return {
realBootloader:true,
configurePage:function(b){
var i={};
var h=this.resolveResources(b);
for(var c=0;
c<h.length;
c++)i[h[c].src]=h[c];
var e=document.getElementsByTagName('link');
for(var c=0;
c<e.length;
++c){
if(e[c].rel!='stylesheet')continue;
for(var d in i)if(e[c].href.indexOf(d)!==-1){
var f=i[d].name,
g=i[d].permanent;
this._cssLinkMap[f]=e[c];
if(g)this._permanent[f]=true;
delete i[d];
break;
}
this._cssLinks.push(e[c]);
}
}
,
loadComponents:function(d,b){
d=arrayize(d);
var g=[];
for(var e=0;
e<d.length;
++e){
if(!d[e])continue;
var c=this._componentMap[d[e]];
if(!!c)for(var f=0;
f<c.length;
++f)g.push(c[f]);
}
return this.loadResources(g,
b);
}
,
loadResources:function(h,b,g,k){
h=Bootloader.resolveResources(arrayize(h));
if(g){
var e={};
if(!window.ResourceBundler){
for(var c=0;
c<h.length;
++c)e[h[c].name]=true;
}
else ResourceBundler.dropLocalResources(this._earlyResources);
for(var d in this._requested)if(!(d in this._permanent)&&!(d in e)&&!(d in this._earlyResources))this._unloadResource(d);
this._earlyResources={};
}
var l=[];
var f=[];
for(var c=0;
c<h.length;
++c){
var i=h[c];
if(i.permanent)this._permanent[i.name]=true;
var j=Arbiter.BOOTLOAD+'/'+i.name;
if(Arbiter.query(j)!==null)continue;
f.push(j);
if(!this._requested[i.name]){
this.requested(i.name);
if(i.hash){
if(!window.ResourceBundler){
window.Util&&false;
}
else ResourceBundler.fetchComboRsrc(i);
}
else l.push(i);
window.CavalryLogger&&CavalryLogger.getInstance().measureResources(i,
k);
}
}
if(b)b=Arbiter.registerCallback(b,
f);
for(var c=0;
c<l.length;
++c)this.requestResource(l[c].type,
l[c].src,
l[c].name);
return b;
}
,
_fetchWithIframe:function(d){
var c=null,
b=null;
var e=Arbiter.BOOTLOAD+':iframe';
if(!this._iframe){
c=this._iframe=document.createElement('iframe');
copy_properties(c.style,
{
width:'0',
height:'0',
frameborder:'0',
left:'0',
top:'0',
position:'absolute'}
);
c.onload=bind(null,
Arbiter.inform,
e,
true,
Arbiter.BEHAVIOR_STATE);
c.src="about:blank";
c.id='bootloader_iframe';
this.getHardpoint().appendChild(c);
}
Arbiter.registerCallback(bind(this,
this._addResourceToIframe,
d),
[e]);
}
,
_addResourceToIframe:function(e){
var c=document.getElementById('bootloader_iframe');
var b=(c.contentDocument?c.contentDocument:(c.contentWindow?c.contentWindow.document:window.frames.bootloader_iframe.document));
var d=b.createElement("script");
if(e.charAt(0)=='/')e=location.protocol+'/'+'/'+location.host+e;
d.src=e;
d.type='text/javascript';
d.async=true;
b.getElementsByTagName('head')[0].appendChild(d);
}
,
requestResource:function(h,g,e){
var b=this.getHardpoint();
switch(h){
case 'js':if(/\/rsrc.php\/(v[^\/]+\/)?(z[^\/]+\/)?p\//.test(g)){
this._fetchWithIframe(g);
}
else{
var f=document.createElement('script');
f.src=g;
f.type='text/javascript';
f.async=true;
b.appendChild(f);
}
break;
case 'css':var d=null;
for(var c=0;
c<this._cssLinks.length;
++c)if(this._cssLinks[c]._unused){
d=this._cssLinks[c];
if(e)this._cssLinkMap[e]=d;
break;
}
if(!d){
var d=document.createElement('link');
d.rel="stylesheet";
d.type="text/css";
d.media="all";
d.href=g;
this._cssLinkMap[e]=d;
this._cssLinks.push(d);
b.appendChild(d);
}
else d.href=g;
d._unused=false;
this._startCSSPoll(e);
break;
default:throw new TypeError("Bad resource type `"+h+"'.");
}
}
,
_startCSSPoll:function(d){
var c='bootloader_'+d.replace(/[^a-z0-9]/ig,
'_');
function b(e,
h,
f,
g){
g.deferUntil(e,
h,
false,
function(){
window.Util;
}
);
}
b(function(){
return document.body;
}
,
5000,
"Still no DOM",
function(){
var e=document.createElement('div');
e.id=c;
document.body.appendChild(e);
b(function(){
var g='42';
var f;
return e.offsetHeight==g||e.currentStyle&&e.currentStyle.height==g+'px'||window.getComputedStyle&&(f=document.defaultView.getComputedStyle(e,
null))&&f.getPropertyValue('height')==g+'px';
}
,
Bootloader._CSS_POLL_EXPIRATION,
"CSS timeout",
function(){
Bootloader.done([d],
true);
e.parentNode.removeChild(e);
}
);
}
);
}
,
done:function(f,c){
f=Bootloader.resolveResources(f,
'name');
var g=(a&&a._preloaded)||[];
(a||{
}
)._preloaded=[];
f=f.concat(g);
this.requested(f);
if(!c){
var e={
sender:this}
;
Arbiter.inform(Arbiter.BOOTLOAD,
e,
Arbiter.BEHAVIOR_EVENT);
}
for(var b=0;
b<f.length;
++b){
var d=f[b];
Arbiter.inform(Arbiter.BOOTLOAD+'/'+d,
true,
Arbiter.BEHAVIOR_STATE);
}
}
,
requested:function(c){
c=arrayize(c);
for(var b=0;
b<c.length;
++b)this._requested[c[b]]=true;
}
,
enableBootload:function(b){
for(var c in b)if(!this._componentMap[c])this._componentMap[c]=b[c];
}
,
_unloadResource:function(c){
if(this._cssLinks&&(c in this._cssLinkMap)){
var b=this._cssLinkMap[c];
if(b){
b.href=Bootloader._UNUSED_CSS_URL;
b._unused=true;
}
delete this._cssLinkMap[c];
delete this._requested[c];
Arbiter.inform(Arbiter.BOOTLOAD+'/'+c,
null,
Arbiter.BEHAVIOR_STATE);
}
}
,
getHardpoint:function(){
if(!this._hardpoint){
var c,
b=document.getElementsByTagName('head');
if(b.length){
c=b[0];
}
else c=document.body;
this._hardpoint=c;
}
return this._hardpoint;
}
,
setResourceMap:function(c){
if(!c)return;
for(var b in c)this._resources[b]=c[b];
}
,
resolveResources:function(e,b){
if(!e)return;
var d=new Array(e.length);
for(var c=0;
c<e.length;
++c)if(!e[c].type&&e[c] in this._resources){
d[c]=this._resources[e[c]];
if(b&&(b in d[c]))d[c]=d[c][b];
}
else d[c]=e[c];
return d;
}
,
loadEarlyResources:function(c){
this.loadResources(c);
for(var b=0;
b<c.length;
++b)if(!c[b].permanent)this._earlyResources[c[b].name]=c[b];
}
,
_requested:{
}
,
_permanent:{
}
,
_componentMap:{
}
,
_cssLinkMap:{
}
,
_cssLinks:[],
_hardpoint:null,
_resources:{
}
,
_earlyResources:{
}
,
_CSS_POLL_EXPIRATION:5000,
_UNUSED_CSS_URL:'javascript:void(0)'}
;
}
)(window.Bootloader);
Function.prototype.extend=function(a){
if(typeof a!='string')throw new TypeError('You must extend() with the name of a class,
not the function object. '+'This generally means you need to replace "Dog.extend(Animal);
" with '+'"Dog.extend(\'Animal\');
".');
if(!Metaprototype._arbiterHandle)Metaprototype._arbiterHandle=Arbiter.subscribe(Arbiter.BOOTLOAD,
Metaprototype._onbootload.bind(Metaprototype));
Metaprototype._queue(this,
a);
}
;
function Metaprototype(){
}
copy_properties(
Metaprototype,
{
_pending:{
}
,
_queue:function(b,c){
b.__class_extending=true;
var a=Arbiter.registerCallback(bind(Metaprototype,
Metaprototype._apply,
b,
c),
[Arbiter.FUNCTION_EXTENSION+'/'+c,
Arbiter.BOOTLOAD]);
if(a!==null)this._pending[c]=true;
}
,
_onbootload:function(b,a){
this._update();
}
,
_update:function(){
for(var a in this._pending)if(!!window[a]){
delete this._pending[a];
if(!window[a].__class_extending){
Arbiter.inform(Arbiter.FUNCTION_EXTENSION+'/'+a,
true,
Arbiter.BEHAVIOR_STATE);
}
else window[a].__class_name=a;
}
}
,
_apply:function(a,c){
delete a.__class_extending;
var d=__metaprototype(window[c],
0);
var b=__metaprototype(a,
d.prototype.__level+1);
b.parent=d;
if(!!a.__class_name)Arbiter.inform(Arbiter.FUNCTION_EXTENSION+'/'+a.__class_name,
true,
Arbiter.BEHAVIOR_STATE);
}
}
);
function __metaprototype(c,
a){
if(c.__metaprototype)return c.__metaprototype;
var b=new Function();
b.construct=__metaprototype_construct;
b.prototype.construct=__metaprototype_wrap(c,
a,
true);
b.prototype.__level=a;
b.base=c;
c.prototype.parent=b;
c.__metaprototype=b;
return b;
}
function __metaprototype_construct(a){
__metaprototype_init(a.parent);
var c=[];
var b=a;
while(b.parent){
c.push(new_obj=new b.parent());
new_obj.__instance=a;
b=b.parent;
}
a.parent=c[1];
c.reverse();
c.pop();
a.__parents=c;
a.__instance=a;
return a.parent.construct.apply(a.parent,
arguments);
}
function __metaprototype_init(d){
if(d.initialized)return;
var a=d.base.prototype;
if(d.parent){
__metaprototype_init(d.parent);
var e=d.parent.prototype;
for(var b in e)if(b!='__level'&&b!='construct'&&a[b]===undefined)a[b]=d.prototype[b]=e[b];
}
d.initialized=true;
var c=d.prototype.__level;
for(var b in a)if(b!='parent')a[b]=d.prototype[b]=__metaprototype_wrap(a[b],
c);
}
function __metaprototype_wrap(c,
b,
d){
if(typeof c!='function'||c.__prototyped)return c;
var a=function(){
var g=this.__instance;
if(g){
var h=g.parent;
g.parent=b?g.__parents[b-1]:null;
if(d){
var e=[];
for(var f=1;
f<arguments.length;
f++)e.push(arguments[f]);
var i=c.apply(g,
e);
}
else var i=c.apply(g,
arguments);
g.parent=h;
return i;
}
else return c.apply(this,
arguments);
}
;
a.__prototyped=true;
return a;
}
Function.prototype.mixin=function(){
var a=[this.prototype].concat(Array.prototype.slice.call(arguments));
Function.mixin.apply(null,
a);
}
;
Function.mixin=function(){
for(var b=1,
a=arguments.length;
b<a;
++b)copy_properties(arguments[0],
Mixins[arguments[b]]||arguments[b]);
}
;
Function.prototype.bind=function(b){
var a=[b,
this].concat(Array.prototype.slice.call(arguments,
1));
return bind.apply(null,
a);
};
Function.prototype.curry=Function.prototype.bind.bind(null,null);
Function.prototype.shield=function(b){
if(typeof this!='function')throw new TypeException();
var a=this.bind.apply(this,
to_array(arguments));
return function(){
return a();
}
;
}
;
Function.prototype.defer=function(b,a){
if(typeof this!='function')throw new TypeError();
b=b||0;
return setTimeout(this,
b,
a);
}
;
Function.prototype.recur=function(b,a){
if(typeof this!='function')throw new TypeError();
return setInterval(this,
b,
a);
}
;
Function.prototype.occur=function(){
if(typeof this!='function')throw new TypeError();
return this.apply(this,
arguments);
}
;
Function.prototype.memoize=function(){
if(typeof this!='function')throw new TypeError();
var a={
}
,
b=this;
return function(){
var c=JSON.encode(arguments);
if(!(c in a))a[c]=b.apply(this,
arguments);
return a[c];
}
;
}
;
Function.prototype.toString=(function(a){
return function(b){
var e=a.call(this);
if(b)return e;
var c=e.split('\n'),
d=5;
if(c.length>d)c.splice(3,
c.length-d,
' ...');
return c.join('\n');
};
})(Function.prototype.toString);
function bagofholding(){
}
function bagof(a){
return function(){
return a;
};
}
function abstractMethod(){
throw new Error('You must implement this function in your base class.');
}
function identity(a){
return a;
}
function fireonce(b){
var a=false;
return function(){
if(!a){
a=true;
return b();
}
}
;
}
var Mixins={
Arbiter:{
_getArbiterInstance:function(){
return this._arbiter||(this._arbiter=new Arbiter());
}
,
inform:function(c,b,a){
this._getArbiterInstance().inform(c,
b,
a);
}
,
subscribe:function(c,a,b){
return this._getArbiterInstance().subscribe(c,
a,
b);
}
,
unsubscribe:function(a){
this._getArbiterInstance().unsubscribe(a);
}
}
}
;
var ua={
ie:function(){
return ua._populate()||this._ie;
}
,
firefox:function(){
return ua._populate()||this._firefox;
}
,
opera:function(){
return ua._populate()||this._opera;
}
,
safari:function(){
return ua._populate()||this._safari;
}
,
safariPreWebkit:function(){
return ua._populate()||this._safari<500;
}
,
chrome:function(){
return ua._populate()||this._chrome;
}
,
windows:function(){
return ua._populate()||this._windows;
}
,
osx:function(){
return ua._populate()||this._osx;
}
,
linux:function(){
return ua._populate()||this._linux;
}
,
iphone:function(){
return ua._populate()||this._iphone;
}
,
_populated:false,
_populate:function(){
if(ua._populated)return;
ua._populated=true;
var a=/(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:Opera(?:.+Version.|.)(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))/.exec(navigator.userAgent);
var c=/(Mac OS X)|(Windows)|(Linux)/.exec(navigator.userAgent);
var b=/\b(iPhone|iP[ao]d)/.exec(navigator.userAgent);
if(a){
ua._ie=a[1]?parseFloat(a[1]):NaN;
if(ua._ie>=8&&!window.HTMLCollection)ua._ie=7;
ua._firefox=a[2]?parseFloat(a[2]):NaN;
ua._opera=a[3]?parseFloat(a[3]):NaN;
ua._safari=a[4]?parseFloat(a[4]):NaN;
if(ua._safari){
a=/(?:Chrome\/(\d+\.\d+))/.exec(navigator.userAgent);
ua._chrome=a&&a[1]?parseFloat(a[1]):NaN;
}
else ua._chrome=NaN;
}
else ua._ie=ua._firefox=ua._opera=ua._chrome=ua._safari=NaN;
if(c){
ua._osx=!!c[1];
ua._windows=!!c[2];
ua._linux=!!c[3];
}
else ua._osx=ua._windows=ua._linux=false;
ua._iphone=b;
}
};
OnloadEvent = {
ONLOAD:'onload/onload',
ONLOAD_CALLBACK:'onload/onload_callback',
ONLOAD_DOMCONTENT:'onload/dom_content_ready',
ONLOAD_DOMCONTENT_CALLBACK:'onload/domcontent_callback',
ONBEFOREUNLOAD:'onload/beforeunload',
ONUNLOAD:'onload/unload'};
function _include_quickling_events_default(){
return !window.loading_page_chrome;
}
function onbeforeunloadRegister(a,
b){
if(b===undefined)b=_include_quickling_events_default();
b?_addHook('onbeforeleavehooks',
a):_addHook('onbeforeunloadhooks',
a);
}
function onunloadRegister(a,
b){
if(b===undefined)b=_include_quickling_events_default();
b?_addHook('onleavehooks',
a):_addHook('onunloadhooks',
a);
}
function _addHook(b,
a){
window[b]=(window[b]||[]).concat(a);
}
function removeHook(a){
window[a]=[];
}
function _domcontentready(){
Arbiter.inform(OnloadEvent.ONLOAD_DOMCONTENT,
true,
Arbiter.BEHAVIOR_STATE);
}
function _bootstrapEventHandlers(){
var a=document,
d=window;
if(a.addEventListener){
if(ua.safari()<525){
var c=setInterval(function(){
if(/loaded|complete/.test(a.readyState)){
_domcontentready();
clearInterval(c);
}
}
,
10);
}
else a.addEventListener("DOMContentLoaded",
_domcontentready,
true);
}
else{
var b='javascript:void(0)';
if(d.location.protocol=='https:')b='//:';
a.write('<script onreadystatechange="if (this.readyState==\'complete\') {
'+'this.parentNode.removeChild(this);
_domcontentready();
}
" '+'defer="defer" src="'+b+'"><\/script\>');
}
d.onload=function(){
d.CavalryLogger&&CavalryLogger.getInstance().setTimeStamp('t_layout');
var e=a&&a.body&&a.body.offsetWidth;
Arbiter.inform(OnloadEvent.ONLOAD,
true,
Arbiter.BEHAVIOR_STATE);
}
;
d.onbeforeunload=function(){
var e={};
Arbiter.inform(OnloadEvent.ONBEFOREUNLOAD,
e,
Arbiter.BEHAVIOR_STATE);
return e.warn;
}
;
d.onunload=function(){
Arbiter.inform(OnloadEvent.ONUNLOAD,
true,
Arbiter.BEHAVIOR_STATE);
}
;
}
onload_callback=Arbiter.registerCallback(function(){
window.CavalryLogger&&CavalryLogger.getInstance().setTimeStamp('t_onload');
Arbiter.inform(OnloadEvent.ONLOAD_CALLBACK,
true,
Arbiter.BEHAVIOR_STATE);
},[OnloadEvent.ONLOAD]);
domcontent_callback=Arbiter.registerCallback(function(){
window.CavalryLogger&&CavalryLogger.getInstance().setTimeStamp('t_domcontent');
Arbiter.inform(OnloadEvent.ONLOAD_DOMCONTENT_CALLBACK,
true,
Arbiter.BEHAVIOR_STATE);
},[OnloadEvent.ONLOAD_DOMCONTENT]);
if(!window._eventHandlersBootstrapped){
_eventHandlersBootstrapped=true;
_bootstrapEventHandlers();
}
function tx(b,
a){
if(typeof _string_table=='undefined')return;
b=_string_table[b];
return _tx(b,
a);
}
function intl_ends_in_punct(a){
if(typeof a!='string')return false;
return a.match(new RegExp(intl_ends_in_punct.punct_char_class+'['+')"'+"'"+'\u00BB'+'\u0F3B'+'\u0F3D'+'\u2019'+'\u201D'+'\u203A'+'\u3009'+'\u300B'+'\u300D'+'\u300F'+'\u3011'+'\u3015'+'\u3017'+'\u3019'+'\u301B'+'\u301E'+'\u301F'+'\uFD3F'+'\uFF07'+'\uFF09'+'\uFF3D'+'\s'+']*$'));
}
intl_ends_in_punct.punct_char_class='['+'.!?'+'\u3002'+'\uFF01'+'\uFF1F'+'\u0964'+'\u2026'+'\u0EAF'+'\u1801'+'\u0E2F'+'\uFF0E'+']';
function intl_render_list_separator(){
return _tx("{
previous-items}
,
{
next-items}
",
{
'previous-items':'',
'next-items':''}
);
}
function intl_phonological_rules(k){
var g,
c=k,
j=window.intl_locale_rewrites;
try{
if(j){
var f=[],
i=[];
for(var d in j.patterns){
var e=d,
h=j.patterns[d];
for(var b in j.meta){
g=new RegExp(b.slice(1,
-1),
'g');
e=e.replace(g,
j.meta[b]);
h=h.replace(g,
j.meta[b]);
}
f[f.length]=e;
i[i.length]=h;
}
for(var a=0;
a<f.length;
a++){
g=new RegExp(f[a].slice(1,
-1),
'g');
if(i[a]=='javascript'){
if(b=new String(k.match(g)))k=k.replace(g,
b.slice(1).toLowerCase());
}
else k=k.replace(g,
i[a]);
}
}
}
catch(e){
k=c;
}
g=new RegExp('\x01',
'g');
k=k.replace(g,
'');
return k;
}
function _tx(e,
a){
if(a)if(!(typeof a!='object')){
var d;
for(var c in a){
if(intl_ends_in_punct(a[c])){
d=new RegExp('\{
'+c+'\}
'+intl_ends_in_punct.punct_char_class+'*',
'g');
}
else d=new RegExp('\{
'+c+'\}
',
'g');
var b='';
if(a[c][0]!='~')b='\x01';
e=e.replace(d,
b+a[c]+b);
}
e=intl_phonological_rules(e);
}
return e;
}
InitialJSLoader={
INITIAL_JS_READY:'BOOTLOAD/JSREADY',
load:function(a){
InitialJSLoader.callback=Bootloader.loadResources(a,
InitialJSLoader.callback);
},
callback:Arbiter.registerCallback(function(){
Arbiter.inform(InitialJSLoader.INITIAL_JS_READY,
true,
Arbiter.BEHAVIOR_STATE);
},[OnloadEvent.ONLOAD_DOMCONTENT_CALLBACK])
};
function goURI(b,
a){
b=b.toString();
if(!a&&window.PageTransitions&&PageTransitions.isInitialized()){
PageTransitions.go(b);
}
else if(window.location.href==b){
window.location.reload();
}
else window.location.href=b;
}
function loadExternalJavascript(f,
b,
a){
if(f instanceof Array){
var e=f.shift(0);
if(e){
loadExternalJavascript(e,
function(){
if(f.length){
loadExternalJavascript(f,
b,
a);
}
else b&&b();
}
,
a);
}
else if(b)b();
}
else{
var c=a?document.body:document.getElementsByTagName('head')[0];
var d=document.createElement('script');
d.type='text/javascript';
d.src=f;
if(b){
d.onerror=d.onload=b;
d.onreadystatechange=function(){
if(this.readyState=="complete"||this.readyState=="loaded")b();
}
;
}
c.appendChild(d);
return d;
}
}
var rsrcProvideAndRequire=function(){
var c={
}
,
d={};
function b(i,
f,
e){
if(i in d){
e=e||{};
for(var g in d[i].requires)if(!(g in e)){
for(var h in d[i].provides)e[h]=1;
if((g in f)||b(g,
f,
e))return true;
}
}
return false;
}
function a(){
do{
var e=false;
for(var f in d){
var h=d[f];
for(var g in h.requires)if(!c[g]&&!b(g,
h.provides)){
h=null;
break;
}
if(h){
for(g in h.provides){
delete d[g];
c[g]=1;
}
h.fn.call();
e=true;
}
}
}
while(e);
}
return function(h,i,f){
var e={
provides:h,
requires:i,
fn:f}
;
for(var g in h)d[g]=e;
a();
}
;
}
();
function invoke_callbacks(a,
c){
if(a)for(var b=0;
b<a.length;
b++)try{
(new Function(a[b])).apply(c);
}
catch(exception){
}
}
var ge=window.ge||function(b,c){
var a;
if('string'!=typeof(b)){
a=b;
}
else a=document.getElementById(b);
!c&&window.NodeAugment&&NodeAugment.extend(a);
return a;
}
;
var $=window.$||ge;
window.CSS=window.CSS||{
hasClass:function(b,a){
return (' '+$(b,
true).className+' ').indexOf(' '+a+' ')>-1;
}
,
addClass:function(b,a){
b=$(b,
true);
if(a&&!CSS.hasClass(b,
a))b.className=b.className?(b.className+' '+a):a;
return b;
}
,
removeClass:function(b,a){
b=$(b,
true);
b.className=b.className.replace(new RegExp('(^|\\s)'+a+'(?=\\s|$)',
'g'),
' ');
return b;
}
,
toggleClass:function(b,a){
return (CSS.hasClass(b,
a)?CSS.removeClass:CSS.addClass)(b,
a);
}
}
;
var KEYS={BACKSPACE:8,
TAB:9,
RETURN:13,
ESC:27,
SPACE:32,
PAGE_UP:33,
PAGE_DOWN:34,
LEFT:37,
UP:38,
RIGHT:39,
DOWN:40,
DELETE:46};
var NodeAugment=(function(){
var a={},
e=!!window.HTMLElement,
d=e?HTMLElement.prototype:{},
b=function(g,h){
for(var f in h)g[f]=h[f];
}, c=function(f){
return function(){
if(window.Util&&false)if(!this.__extended)throw new Error('You must extend nodes (through $ or '+'NodeAugment.extend) to access augmented '+'methods in all browsers.');
return f.apply(null,
[this].concat([].slice.call(arguments)));
}
;
};
return {
add:function(g,i){
var h=d;
if(i){
i=i.toUpperCase();
h=a[i]||(a[i]={
}
);
}
for(var f in g)if(typeof g[f]=='function')h[f]=c(g[f]);
},
extend:function(f){
if(!f||f==window||f.nodeType!=1||f.nodeName in {
OBJECT:1,
EMBED:1,
APPLET:1}
)return f;
if(window.Util&&false)f.__extended=[1];
!e&&b(f,
d);
b(f,
a[f.nodeName]||{
}
);
return f;
}
};
})();
function BigPipe(a,f,b,i,e,c,g,d,h){
copy_properties(this,
{
_arbiter:a||Arbiter,
_phaseDoneCallbacks:[],
_numPhases:f,
_currentPhase:0,
_timeout:20,
_cavalry:b||(window.CavalryLogger?CavalryLogger.getInstance():null),
_roadrunner_enabled:i,
_is_quickling:e,
_domcontent_callback:c||domcontent_callback,
_onload_callback:g||onload_callback,
_domcontent_evt:d||OnloadEvent.ONLOAD_DOMCONTENT_CALLBACK,
_onload_evt:h||OnloadEvent.ONLOAD_CALLBACK}
);
this._inst=this._cavalry&&window._pagelet_profile;
this._init();
BigPipe._current_instance=this;
}
copy_properties(BigPipe.prototype,
{
_ct:function(a){
return ('length' in a&&a.length===0) ?
{} :
a;
},
_displayPagelet:function(d){
for(var c in d.content){
var b=document.getElementById(c);
var a=d.content[c];
if(b){
if(a)if(d.append||ua.ie()<8){
if(!d.append)while(b.firstChild)b.removeChild(b.firstChild);
this._appendNodes(b,
a);
}
else b.innerHTML=a;
if(this._inst)this._cavalry.setTimeStamp('t_pagelet_display_'+d.id,
true);
}
else window.Util&&false;
}
this._arbiter.inform(d.id+'_displayed',
true,
Arbiter.BEHAVIOR_STATE);
}
,
_appendNodes:function(a,d){
var e=document.createElement('div');
var c=ua.ie()<7;
if(c)a.appendChild(e);
e.innerHTML=d;
var b=document.createDocumentFragment();
while(e.firstChild)b.appendChild(e.firstChild);
a.appendChild(b);
if(c)a.removeChild(e);
}
,
_downloadJsForPagelet:function(a){
Bootloader.loadResources(a.css.concat(a.js),
bind(this,
function(){
if(this._inst)this._cavalry.setTimeStamp('t_pagelet_jsdone_'+a.id);
(!this._is_quickling)&&a.requires.push(InitialJSLoader.INITIAL_JS_READY);
if(a.phase>=1)a.requires.push('uipage_onload');
var c=bind(this,
function(){
if(this!=BigPipe._current_instance)return;
invoke_callbacks(a.onload);
if(this._inst)this._cavalry.setTimeStamp('t_pagelet_done_'+a.id);
this._arbiter.inform('pagelet_onload',
true,
Arbiter.BEHAVIOR_EVENT);
a.provides&&this._arbiter.inform(a.provides,
true,
Arbiter.BEHAVIOR_STATE);
if(a.page_cache){
if(!a.id)a.html=$("content").innerHTML;
Quickling.cacheAndExecResponse(a,
true);
}
}
);
var b=bind(this,
function(){
(this==BigPipe._current_instance)&&invoke_callbacks(a.onafterload);
}
);
this._arbiter.registerCallback(c,
a.requires);
this._arbiter.registerCallback(b,
[this._onload_evt]);
}
),
false,
a.id);
}
,
_downloadCssAndDisplayPagelet:function(a){
this._inst&&this._cavalry.setTimeStamp('t_pagelet_start_'+a.id);
Bootloader.loadResources(a.css,
this._displayPagelet.bind(this,
a),
false,
a.id);
}
,
onPageletArrive:function(a){
if(this._inst)this._cavalry.setTimeStamp('t_pagelet_arrive_'+a.id);
if(!this._is_quickling){
Bootloader.setResourceMap(a.resource_map);
Bootloader.enableBootload(this._ct(a.bootloadable));
}
a.id&&this._arbiter.registerCallback(this._downloadCssAndDisplayPagelet.bind(this,
a),
['phase_begin_'+a.phase]);
this._arbiter.registerCallback(this._downloadJsForPagelet.bind(this,
a),
[this._domcontent_evt]);
this._onload_callback=this._arbiter.registerCallback(this._onload_callback,
['pagelet_onload']);
a.id&&this._arbiter.registerCallback(this._phaseDoneCallbacks[a.phase],
[a.id+'_displayed']);
a.is_last&&this._arbiter.inform('phase_complete_'+a.phase,
true,
Arbiter.BEHAVIOR_STATE);
}
,
_onPhaseDone:function(){
if(this._currentPhase===1&&this._roadrunner_enabled){
this._arbiter.inform('tti_bigpipe',
true,
Arbiter.BEHAVIOR_EVENT);
this._cavalry&&this._cavalry.measurePageLoad(true);
}
var a=this._currentPhase+1;
setTimeout(this._arbiter.inform.bind(this._arbiter,
'phase_begin_'+a,
true,
Arbiter.BEHAVIOR_STATE),
this._timeout);
if(a==this._numPhases)this._arbiter.inform('pagelet_displayed_all',
true,
Arbiter.BEHAVIOR_STATE);
this._currentPhase++;
}
,
_init:function(){
for(var a=0;
a<this._numPhases;
a++){
this._phaseDoneCallbacks[a]=this._arbiter.registerCallback(this._onPhaseDone.bind(this),
['phase_complete_'+a]);
if(this._inst)this._arbiter.registerCallback(bind(this,
function(b){
this._cavalry.setTimeStamp('t_phase_begin_'+b);
}
,
a+1),
['phase_begin_'+(a+1)]);
}
this._arbiter.registerCallback(this._domcontent_callback,
['pagelet_displayed_all']);
if(this._inst)this._cavalry.setTimeStamp('t_phase_begin_0');
this._arbiter.inform('phase_begin_0',
true,
Arbiter.BEHAVIOR_STATE);
if(!this._is_quickling)this._arbiter.inform('phase_complete_0',
true,
Arbiter.BEHAVIOR_STATE);
}
}
);
function incorporate_fragment(a,b){
if(b&&a.pathname=='/')return;
var d=/^(?:(?:[^:\/?#]+):)?(?:\/\/(?:[^\/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?/;
var c='';
a.href.replace(d,
function(e,l,n,h){
var g,p;
g=p=l+(n?'?'+n:'');
if(h){
h=h.replace(/^(!|%21)/,
'');
if(h.charAt(0)=='/'){
g=h.replace(/^\/+/,
'/').replace(/_fb_qsub=([^&]+)&?/,
function(r,s){
if(s.substring(s.length-13)=='.facebook.com')c='http://'+s;
return '';
}
);
}
else if(/&|=/.test(h)){
var m={};
var k=h.match(/([^#]*)(#.*)?/);
var f=(n||'').split('&').concat((k[1]||'').split('&'));
for(var i=0,
j=f.length;
i<j;
i++){
var q=f[i].split('=');
if(q.length&&q[0]!='')m[q[0]]=q[1];
}
var o=[];
for(var i in m)o.push(i+(m[i]?'='+m[i]:''));
g=l+'?'+o.join('&')+(k[2]||'');
}
}
g=b+g;
if(g!=p)window.location.replace(c+g);
}
);
}
if(window._is_quickling_index!==undefined)
incorporate_fragment(window.location,
window._is_quickling_index);
!function(){
var b=document.documentElement,
c='DOMControl_placeholder';
var a=function(d){
var d=d||window.event,
e=d.target||d.srcElement,
g,
f=e.getAttribute('placeholder');
if(f){
if('focus'==d.type||'focusin'==d.type){
if(e.value==f){
e.value='';
CSS.removeClass(e,
c);
}
}
else if(e.value==''){
CSS.addClass(e,
c);
e.value=f;
}
if(e.value==''||e.value==f){
g=e.parentNode;
CSS.addClass(g,
'xyz');
CSS.removeClass(g,
'xyz');
}
}
};
b.onfocusin=b.onfocusout=a;
if(b.addEventListener){
b.addEventListener('focus',
a,
true);
b.addEventListener('blur',
a,
true);
}
}();
function fc_expand(a,
b){
user_action(a,
'ufi');
var c=a.form;
CSS.removeClass(c,
'collapsed_comments');
CSS.removeClass(c,
'hidden_add_comment');
if(b!==false)c.add_comment_text.focus();
return false;
}
if (window.Bootloader) {
Bootloader.done(["js\/19khsprwvtvokwow.pkg.js"]);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment