<!DOCTYPE html>
<html >
<head>
<title>Twitter</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta charset="utf-8" />
<script type="text/javascript" charset="utf-8">
document.domain = 'twitter.com';
// this will be copied to twttr.appStartTime once our JS has started up
document.startTime = new Date().getTime();
var twttr = {};
twttr.versionName = 'phoenix';
if (!window.console) {
(function() {
var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
"group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
window.console = {};
for (var i = 0; i < names.length; ++i) {
window.console[names[i]] = function() {};
}
}());
}
</script>
<script type="text/javascript">(function(){window.setTimeout=window.setTimeout;window.setInterval=window.setInterval;window.WATCH=function(label,block){if(typeof block==="undefined"){block=label;label=undefined}if(typeof label==="string"){WATCH._didExecute[label]=true}WATCH._attempt(this,block)};WATCH._didExecute={};WATCH._reportCount=0;WATCH._reportLimit=25;WATCH._reportInterval=60*1000;WATCH._active=false;WATCH.activate=function(setting){if(typeof setting==="undefined"){setting=true}WATCH._active=setting;extend(WATCH,WATCH._active?WATCH.actives:WATCH.inactives)};WATCH.actives={};WATCH.inactives={};var extend=function(destination,source){for(var key in source){destination[key]=source[key]}};var noop=function(){};WATCH._attempt=function(that,block){if(arguments.length<2){block=that;that=window}if(WATCH._active){try{block.apply(that)}catch(error){WATCH._triggerError(error)}}else{block.apply(that)}};WATCH.inactives.end=noop;WATCH.actives.end=function(label){if(typeof label==="undefined"){throw new Error("WATCH.end() requires a label")}if(WATCH._didExecute[label]){WATCH._didExecute[label]=false}else{if(WATCH._active){WATCH._triggerError(new Error('WATCH.end("'+label+'") called without successful call to WATCH("'+label+'", fn(){...}) - a SyntaxError probably just happened'))}}WATCH._didExecute[label]=false};WATCH.inactives.callback=function(that,callback){return typeof callback==="undefined"?that:callback};WATCH.actives.callback=function(that,callback){if(arguments.length===1){callback=that;that=this}if(typeof callback==="string"){callback=(function(stringVersion){return function(){eval(stringVersion)}}(callback))}var watchedCallback=function(){var that=this,args=arguments,result;WATCH._attempt(function(){result=callback.apply(that,args)});return result};watchedCallback.isWatched=true;return watchedCallback};WATCH._onErrorCallbacks={};WATCH.inactives._addOnError=noop;WATCH.actives._addOnError=function(callback){var unique=WATCH._unique();WATCH._onErrorCallbacks[unique]=callback;return unique};WATCH.inactives._removeOnError=noop;WATCH.actives._removeOnError=function(id){delete WATCH._onErrorCallbacks[id]};WATCH._lastUnique=-1;WATCH._unique=function(){return ++WATCH._lastUnique};WATCH.inactives.jQuery=noop;WATCH.actives.jQuery=function(){WATCH._originalJQueryEventAdd=WATCH._originalJQueryEventAdd||jQuery.event.add;jQuery.event.add=function(){var newArgs=Array.prototype.slice.call(arguments);if(typeof newArgs[2]==="function"){newArgs[2]=WATCH.callback(newArgs[2])}else{if(newArgs&&typeof newArgs[2]==="object"&&newArgs[2].handler){newArgs[2].handler=WATCH.callback(newArgs[2].handler)}}return WATCH._originalJQueryEventAdd.apply(this,newArgs)};WATCH._originalJQueryAjax=WATCH._originalJQueryAjax||jQuery.ajax;jQuery.ajax=function(options){jQuery.each(["complete","error","success"],function(which,key){if(!options[key]){return }options[key]=WATCH.callback(options[key])});return WATCH._originalJQueryAjax.apply(this,arguments)}};WATCH.inactives.undoJQuery=noop;WATCH.actives.undoJQuery=function(){jQuery.event.add=WATCH._originalJQueryEventAdd;jQuery.ajax=WATCH._originalJQueryAjax};WATCH._previousErrors={};var escapeDoubleQuotes=function(string){return string.toString().replace('"','\\"')};var stringifyLite=function(object){var result="{",hasProperty=false;for(var key in object){if(typeof object[key]==="undefined"||object[key]===null){continue}result+=(hasProperty?',"':'"')+escapeDoubleQuotes(key)+'":"'+escapeDoubleQuotes(object[key])+'"';hasProperty=true}return result+"}"};WATCH._scribeError=function(report){if(WATCH._previousErrors[report.error]&&(new Date())-WATCH._previousErrors[report.error]<WATCH._reportInterval){return false}if(WATCH.reportLimit<=WATCH.reportCount){return }WATCH.reportCount++;if(!document.location.hostname.match(/(^(www|api)\.)?twitter\.com$/)){return }WATCH._previousErrors[report.error]=new Date();report.product_name="webclient";report.type="js_error";report.url=window.location.href;report.event_name="test";var isProduction=document.location.hostname.match(/(^(www|api|staging\d+.local)\.)twitter\.com$/)!=null;var scribeHost=isProduction?"scribe.twitter.com":window.location.host;var scribeUrl=(window.location.protocol.match(/s\:$/)?"https":"http")+"://"+scribeHost;scribeUrl+=isProduction?"/":"/scribe";scribeUrl+="?category=client_watch_error&log="+encodeURIComponent(stringifyLite(report))+"&ts="+(new Date()).getTime();(new Image()).src=scribeUrl};WATCH._triggerError=function(error){var reraise=true;var report={error:error};for(var key in WATCH._onErrorCallbacks){try{if(WATCH._onErrorCallbacks[key](report)===false){reraise=false}}catch(callbackError){report.callbackFailure=true}}WATCH._scribeError(report);if(reraise){throw error}};WATCH.inactives.natives=noop;WATCH.actives.natives=function(){window.setInterval=WATCH._watchedSetInterval;window.setTimeout=WATCH._watchedSetTimeout};WATCH.inactives.undoNatives=noop;WATCH.actives.undoNatives=function(){window.setInterval=WATCH._originalSetInterval;window.setTimeout=WATCH._originalSetTimeout};WATCH._originalSetInterval=window.setInterval;WATCH._originalSetTimeout=window.setTimeout;WATCH._watchedSetInterval=function(callback,timeout){var setInterval=WATCH._originalSetInterval;return setInterval(WATCH.callback(callback),timeout)};WATCH._watchedSetTimeout=function(callback,timeout){var setTimeout=WATCH._originalSetTimeout;return setTimeout(WATCH.callback(callback),timeout)};WATCH.activate(false)}());</script>
<script type="text/javascript">
</script>
<script>
function bust () {
document.write = "";
window.top.location = window.self.location;
setTimeout(function() {
document.body.innerHTML = '';
}, 0);
window.self.onload = function(evt) {
document.body.innerHTML = '';
};
}
if (window.top !== window.self) { // are you trying to put self in an iframe?
try {
if (window.top.location.host) { // this is illegal to access unless you share a non-spoofable document domain
// fun times
} else {
bust(); // chrome executes this
}
} catch (ex) {
bust(); // everyone executes this
}
}
</script>
<link href="/phoenix/favicon.ico" rel="shortcut icon" type="image/x-icon" />
<link rel="stylesheet" href="http://a2.twimg.com/a/1307573369/phoenix/css/phoenix.bundle.css" type="text/css" media="screen" />
<noscript>
<meta http-equiv=refresh content="0; URL=/?_twitter_noscript=1" />
</noscript>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-30775-6']);
_gaq.push(
['_trackPageview'],
['_setDomainName', 'twitter.com']
);
(function() {
var ga = document.createElement('script');
ga.type = 'text/javascript';
ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
}());
twttr.trackPageView = function(pathName) {
var event = ['_trackPageview'];
if (pathName) {
event.push(pathName);
}
_gaq.push(event);
};
</script>
</head>
<body class="user-style-twttr loading-body logged-out narrow">
<div id="doc">
<div id="top-stuff">
<div id="banners" style="clear:both;"></div>
<div id="top-bar-outer">
<div id="top-bar-bg"></div>
<div id="top-bar">
<div class="top-bar-inside">
<div class="static-links">
<div id="logo">
<a href="/">Twitter</a>
</div>
<form id="search-form" action="/search" method="GET">
<span class="glass"><i></i></span>
<input value="" data-i18n-label="Search" placeholder="" name="q" id="search-query" type="text" />
</form>
<div id="global-nav">
<ul>
</ul>
</div>
<div id="sections"></div>
</div>
<div class="active-links">
<div id="session">
<a id="signin-link" href="/login">
<em>Have an account?</em>
<strong>Sign in</strong><i></i>
</a>
<a id="signup-link" href="https://twitter.com/signup?context=login">
<em>New to Twitter?</em>
<strong>Join Today »</strong>
</a>
<div id="signin-dropdown" class="dropdown dark">
<form action="https://twitter.com/sessions?phx=1" class="signin" method="post">
<fieldset class="textbox">
<label class="username">
<span>Username or email</span>
<input type="text" value="" name="session[username_or_email]" autocomplete="on" />
</label>
<label class="password">
<span>Password</span>
<input type="password" value="" name="session[password]" />
</label>
</fieldset>
<fieldset class="subchck">
<label class="remember">
<input type="checkbox" value="1" name="remember_me" />
<span>Remember me</span>
</label>
<button type="submit" class="submit button">Sign in</button>
</fieldset>
<input type="hidden" name="redirect_after_login" value="" />
<p>
<a class="forgot" href="/account/resend_password">Forgot password?</a><br />
<a class="mobile" href="/account/complete">Already using Twitter on your phone?</a>
</p>
</form>
</div>
</div>
</div>
</div>
</div>
<div id="message-drawer"></div>
</div>
</div>
<div id="page-outer">
<div id="front-container">
<div class="leftside ">
<h1><span>Twitter</span></h1>
<h2><a href="/#!/toptweets" tabindex="-1">Follow your interests</a></h2>
<p>Instant updates from your friends, industry experts, favorite celebrities, and what’s happening around the world.</p>
</div>
<div class="rightside">
<div class="gradient"></div>
<div class="front-signin">
<form action="https://twitter.com/sessions?phx=1" class="signin" method="post">
<fieldset class="textbox">
<div class="holding username">
<input type="text" id="username" value="" name="session[username_or_email]" title="Username or email" autocomplete="on" />
<span class="holder">Username</span>
</div>
<div class="holding password">
<input type="password" id="password" value="" name="session[password]" title="Password" />
<span class="holder">Password</span>
</div>
</fieldset>
<fieldset class="subchck">
<label class="remember">
<input type="checkbox" value="1" name="remember_me" />
<span>Remember me</span>
</label>
<button type="submit" class="submit button">Sign in</button>
</fieldset>
<input type="hidden" name="redirect_after_login" value="" />
<p>
<a class="forgot" href="/account/resend_password">Forgot it?</a>
</p>
</form>
</div>
<div class="front-signup ">
<h3>New to Twitter? <em>Join today!</em></h3>
<form action="https://twitter.com/signup" class="signup" method="post">
<div class="holding name">
<input type="text" autocomplete="off" value="" name="user[name]" maxlength="20" aria-required="true"/>
<span class="holder">Full name</span>
</div>
<div class="holding email">
<input type="text" autocomplete="off" value="" name="user[email]" aria-required="true"/>
<span class="holder">Email</span>
</div>
<div class="holding password">
<input type="password" value="" name="user[user_password]" aria-required="true"/>
<span class="holder">Password</span>
</div>
<input type="hidden" value="front" name="context" />
<input type="submit" class="promotional submit button" value="Sign up" />
</form>
</div>
<script type="text/javascript">
twttr.BANNED_PASSWORDS = ["000000","111111","11111111","112233","121212","123123","123456","1234567","12345678","123456789","131313","232323","654321","666666","696969","777777","7777777","8675309","987654","aaaaaa","abc123","abc123","abcdef","abgrtyu","access","access14","action","albert","alberto","alexis","alejandra","alejandro","amanda","amateur","america","andrea","andrew","angela","angels","animal","anthony","apollo","apples","arsenal","arthur","asdfgh","asdfgh","ashley","asshole","august","austin","badboy","bailey","banana","barney","baseball","batman","beatriz","beaver","beavis","bigcock","bigdaddy","bigdick","bigdog","bigtits","birdie","bitches","biteme","blazer","blonde","blondes","blowjob","blowme","bond007","bonita","bonnie","booboo","booger","boomer","boston","brandon","brandy","braves","brazil","bronco","broncos","bulldog","buster","butter","butthead","calvin","camaro","cameron","canada","captain","carlos","carter","casper","charles","charlie","cheese","chelsea","chester","chicago","chicken","cocacola","coffee","college","compaq","computer","consumer","cookie","cooper","corvette","cowboy","cowboys","crystal","cumming","cumshot","dakota","dallas","daniel","danielle","debbie","dennis","diablo","diamond","doctor","doggie","dolphin","dolphins","donald","dragon","dreams","driver","eagle1","eagles","edward","einstein","erotic","estrella","extreme","falcon","fender","ferrari","firebird","fishing","florida","flower","flyers","football","forever","freddy","freedom","fucked","fucker","fucking","fuckme","fuckyou","gandalf","gateway","gators","gemini","george","giants","ginger","gizmodo","golden","golfer","gordon","gregory","guitar","gunner","hammer","hannah","hardcore","harley","heather","helpme","hentai","hockey","hooters","horney","hotdog","hunter","hunting","iceman","iloveyou","internet","iwantu","jackie","jackson","jaguar","jasmine","jasper","jennifer","jeremy","jessica","johnny","johnson","jordan","joseph","joshua","junior","justin","killer","knight","ladies","lakers","lauren","leather","legend","letmein","letmein","little","london","lovers","maddog","madison","maggie","magnum","marine","mariposa","marlboro","martin","marvin","master","matrix","matthew","maverick","maxwell","melissa","member","mercedes","merlin","michael","michelle","mickey","midnight","miller","mistress","monica","monkey","monkey","monster","morgan","mother","mountain","muffin","murphy","mustang","naked","nascar","nathan","naughty","ncc1701","newyork","nicholas","nicole","nipple","nipples","oliver","orange","packers","panther","panties","parker","password","password","password1","password12","password123","patrick","peaches","peanut","pepper","phantom","phoenix","player","please","pookie","porsche","prince","princess","private","purple","pussies","qazwsx","qwerty","qwertyui","rabbit","rachel","racing","raiders","rainbow","ranger","rangers","rebecca","redskins","redsox","redwings","richard","robert","roberto","rocket","rosebud","runner","rush2112","russia","samantha","sammy","samson","sandra","saturn","scooby","scooter","scorpio","scorpion","sebastian","secret","sexsex","shadow","shannon","shaved","sierra","silver","skippy","slayer","smokey","snoopy","soccer","sophie","spanky","sparky","spider","squirt","srinivas","startrek","starwars","steelers","steven","sticky","stupid","success","suckit","summer","sunshine","superman","surfer","swimming","sydney","tequiero","taylor","tennis","teresa","tester","testing","theman","thomas","thunder","thx1138","tiffany","tigers","tigger","tomcat","topgun","toyota","travis","trouble","trustno1","tucker","turtle","twitter","united","vagina","victor","victoria","viking","voodoo","voyager","walter","warrior","welcome","whatever","william","willie","wilson","winner","winston","winter","wizard","xavier","xxxxxx","xxxxxxxx","yamaha","yankee","yankees","yellow","zxcvbn","zxcvbnm","zzzzzz"];
</script>
<div id="front-signup-inline">
<h3>You’re almost there…</h3>
<a class="dismiss" href="#">×</a>
<div class="step2-content">
<form method="POST" action="https://twitter.com/account/create" class="signup">
<input type="hidden" value="" name="authenticity_token" />
<input type="hidden" name="user[discoverable_by_email]" value="1" />
<input type="hidden" name="user[send_email_newsletter]" value="1" />
<p class="wepicked">
<em>We’ve picked a username for you.</em><br/>You can change it now, or anytime later.
</p>
<div class="holding username">
<input type="text" autocomplete="off" value="" name="user[screen_name]" maxlength="15" aria-required="true" />
<span class="holder">Username</span>
<div class="suggestions">Other suggestions: <ul></ul></div>
</div>
<div class="tos">
<div class="scroller">
<p class="header">By clicking the button, you agree to the terms below:</p>
<div class="import"> </div>
</div>
<p class="more-tos"><a href="/tos" target="_blank">Read in new window</a></p>
</div>
<div class="captcha-container">
<div class="holding captcha"></div>
<div class="embed"></div>
</div>
<input type="submit" class="promotional submit button" value="Create my account" />
</form>
</div>
<p class="privacy">Others will be able to find you by name, username or email. Your email will not be shown publicly. You can change your privacy settings at any time.</p>
</div>
<div id="front-signup-inline-overlay" class="twttr-dialog-container-modal"></div>
</div>
<div class="search ">
<form action="/#!/search" method="GET">
<div class="holding">
<input value="" name="q" type="text" autocomplete="off" />
<span class="holder">Search Twitter</span>
</div>
<div class="glass button submit"><i></i></div>
</form>
</div>
<div class="radial">
<div class="shadow"></div>
<ul><li data-item-offset=""><a data-user-id="15368404" href="/#!/AIDSgov" title="AIDS.gov"><img src="http://a3.twimg.com/profile_images/1191344243/AIDSgovLogo_2010_normal.jpg" alt="AIDS.gov" height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="14070799" href="/#!/Eklund" title="Hockey Buzz Eklund"><img src="http://a3.twimg.com/profile_images/1183096449/f5376cb9-1906-486c-92a3-386765ea0998_normal.png" alt="Hockey Buzz Eklund" height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="24907662" href="/#!/SomalyMam" title="Somaly Mam"><img src="http://a2.twimg.com/profile_images/100678623/photo_somaly_normal.jpg" alt="Somaly Mam" height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="28521141" href="/#!/grantimahara" title="Grant Imahara"><img src="http://a1.twimg.com/profile_images/1255544947/photo_normal.JPG" alt="Grant Imahara" height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="36072985" href="/#!/BrooklynDDecker" title="Brooklyn Decker"><img src="http://a0.twimg.com/profile_images/1217878217/v6kyy_normal.jpg" alt="Brooklyn Decker" height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="14677919" href="/#!/NewYorker" title="The New Yorker"><img src="http://a1.twimg.com/profile_images/553327850/Eustacewbutterfly_normal.png" alt="The New Yorker" height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="7614292" href="/#!/brooklynmuseum" title="brooklynmuseum"><img src="http://a2.twimg.com/profile_images/31784232/twitter_normal.png" alt="brooklynmuseum" height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="17623957" href="/#!/DesignObserver" title="DesignObserver"><img src="http://a2.twimg.com/profile_images/340155402/twitter_profile_bigger_normal.gif" alt="DesignObserver" height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="27901418" href="/#!/crowleyCNN" title="Candy Crowley"><img src="http://a0.twimg.com/profile_images/744792291/crowley_twitter_head_shot_normal.jpg" alt="Candy Crowley" height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="816653" href="/#!/TechCrunch" title="TechCrunch"><img src="http://a1.twimg.com/profile_images/115466107/techcrunch_bigger_normal.png" alt="TechCrunch" height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="1769551" href="/#!/nytimeshealth" title="NYTimes Health"><img src="http://a3.twimg.com/profile_images/307387871/Health_normal.bmp" alt="NYTimes Health" height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="14321959" href="/#!/umairh" title="umair haque"><img src="http://a0.twimg.com/profile_images/129730596/2630509441_944a6ee3e2_m_normal.jpg" alt="umair haque" height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="14293310" href="/#!/TIME" title="TIME.com"><img src="http://a0.twimg.com/profile_images/57598544/time-75x75_normal.gif" alt="TIME.com" height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="62290422" href="/#!/RedHourBen" title="Ben Stiller"><img src="http://a2.twimg.com/profile_images/1237591832/IMG_0016_normal.JPG" alt="Ben Stiller" height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="15165502" href="/#!/MarsRovers" title="Spirit and Oppy "><img src="http://a0.twimg.com/profile_images/670252813/136489main_PIA04413-feature-browse_normal.jpg" alt="Spirit and Oppy " height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="18665800" href="/#!/LIFE" title="LIFE.com"><img src="http://a0.twimg.com/profile_images/210227369/twitter-life_normal.gif" alt="LIFE.com" height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="26792275" href="/#!/FP_Magazine" title="Foreign Policy"><img src="http://a3.twimg.com/profile_images/1138198034/fp-logo_normal.jpg" alt="Foreign Policy" height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="23575322" href="/#!/NatureChemistry" title="Nature Chemistry"><img src="http://a0.twimg.com/profile_images/1062453419/twitter_nchem_logo_normal.jpg" alt="Nature Chemistry" height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="14348594" href="/#!/hodgman" title="hodgman"><img src="http://a2.twimg.com/profile_images/1362208843/for_twitter_5-20-11_normal.jpg" alt="hodgman" height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="4970411" href="/#!/AJEnglish" title="Al Jazeera English"><img src="http://a3.twimg.com/profile_images/1113753453/AJE-orange-logo-fb_normal.jpg" alt="Al Jazeera English" height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="11856422" href="/#!/msnbc_health" title="msnbc.com - Health"><img src="http://a3.twimg.com/profile_images/119018147/Twitter_msnbc-com-Health_normal.jpg" alt="msnbc.com - Health" height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="22799750" href="/#!/ChrisCuomo" title="Chris Cuomo"><img src="http://a3.twimg.com/profile_images/1147995211/again_normal.jpg" alt="Chris Cuomo" height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="15649433" href="/#!/TravelGov" title="Travel - State Dept"><img src="http://a2.twimg.com/profile_images/933275449/TravelGov_logo_normal.gif" alt="Travel - State Dept" height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="73050109" href="/#!/firesideint" title="Fireside Int."><img src="http://a1.twimg.com/profile_images/965884739/CIMT_avatar_normal.jpg" alt="Fireside Int." height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="40252336" href="/#!/The_Millions" title="The Millions "><img src="http://a3.twimg.com/profile_images/497483711/MMlogo_normal.gif" alt="The Millions " height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="18170896" href="/#!/sanjayguptaCNN" title="Dr. Sanjay Gupta"><img src="http://a3.twimg.com/profile_images/192122918/profile_pic_normal.jpg" alt="Dr. Sanjay Gupta" height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="7905122" href="/#!/guardiantech" title="Guardian Tech"><img src="http://a3.twimg.com/profile_images/77733135/guardiantechlogo_normal.jpg" alt="Guardian Tech" height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="19074134" href="/#!/marieclaire" title="Marie Claire"><img src="http://a3.twimg.com/profile_images/1359633417/JuneCoverTw_normal.jpg" alt="Marie Claire" height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="10810102" href="/#!/JohnCleese" title="John Cleese"><img src="http://a0.twimg.com/profile_images/38726922/streep_crop_sm_normal.jpg" alt="John Cleese" height="48" width="48" /></a></li><li data-item-offset=""><a data-user-id="16818600" href="/#!/peteyorn" title="Pete Yorn"><img src="http://a1.twimg.com/profile_images/1373418252/peteyorn_normal.jpg" alt="Pete Yorn" height="48" width="48" /></a></li></ul>
</div>
<div class="bottompart ">
<div class="language inline-list">
<form action="" method="POST">
<input type="hidden" name="lang" value="" />
<strong>Languages</strong>
</form>
</div>
<div class="footer inline-list">
<ul>
<li><a href="/about">About</a><span class="dot"> ·</span></li>
<li><a href="http://support.twitter.com">Help</a><span class="dot"> ·</span></li>
<li><a href="http://blog.twitter.com/OK">Blog</a><span class="dot"> ·</span></li>
<li><a href="http://status.twitter.com">Status</a><span class="dot"> ·</span></li>
<li><a href="">Jobs</a><span class="dot"> ·</span></li>
<li><a href="/tos">Terms</a><span class="dot"> ·</span></li>
<li><a href="/privacy">Privacy</a><span class="dot"> ·</span></li>
<li><a href="//business.twitter.com/advertise/start">Advertisers</a><span class="dot"> ·</span></li>
<li><a href="//business.twitter.com/">Businesses</a><span class="dot"> ·</span></li>
<li><a href="http://media.twitter.com">Media</a><span class="dot"> ·</span></li>
<li><a href="//dev.twitter.com">Developers</a><span class="dot"> ·</span></li>
<li><a href="/about/resources">Resources</a><span class="dot"> ·</span></li>
<li><span class="copyright">© 2011 Twitter</span><li>
<ul>
</div>
</div>
</div>
<div id="page-container" class="">
<div>
</div>
</div>
</div>
<div id="message-notifications"></div>
</div>
<div id="flash-message-storage" style="display:none"></div>
<script type="text/javascript">
</script>
<script type="text/javascript">WATCH('loadrunner', function() {
(function(p,D){var Z=p.attachEvent&&!p.opera,K=D.getElementsByTagName("script"),I=0,g,n=D.createElement("script"),P={},V={},C,U,G={},R=p.using,E=p.provide,J=p.define,e=p.loadrunner;for(var o=0,k;k=K[o];o++){if(k.src.match(/loadrunner\.js(\?|#|$)/)){g=k;break}}function X(s){for(var r=1,t;t=arguments[r];r++){for(var q in t){s[q]=t[q]}}return s}function M(i){return Array.prototype.slice.call(i)}var W=Array.isArray||function(i){return i.constructor==Array};function Q(q,r){for(var s=0,t;t=q[s];s++){if(r==t){return s}}return -1}function l(){var s=M(arguments),t=[];for(var r=0,q=s.length;r<q;r++){if(s[r].length>0){t.push(s[r].replace(/\/$/,""))}}return t.join("/")}function j(s,r,i){var q=r.split("/"),t=s;while(q.length>1){t=t[q.shift()]={}}t[q[0]]=i}function f(){}f.prototype.then=function(i){var r=this,q;if(!this.started){this.started=true;if(this.id&&(q=b(this.id))){A(q,function(){r.start()})}else{this.start()}}if(this.completed){i.apply(p,this.results)}else{this.callbacks=this.callbacks||[];this.callbacks.push(i)}return this};f.prototype.start=function(){};f.prototype.complete=function(){if(!this.completed){this.results=M(arguments);this.completed=true;if(this.callbacks){for(var r=0,q;q=this.callbacks[r];r++){q.apply(p,this.results)}}}};function c(q,i){this.id=this.path=q;this.force=!!i}c.loaded=[];c.prototype=new f;c.prototype.start=function(){var i=this,q;if(q=P[this.id]){q.then(function(){i.loaded()})}else{if(!this.force&&Q(c.loaded,this.id)>-1){this.loaded()}else{this.load()}}return this};c.prototype.load=function(){var q=this;P[this.id]=q;var i=n.cloneNode(false);this.scriptId=i.id="LR"+ ++I;i.type="text/javascript";i.async=true;i.onerror=function(){throw new Error(q.path+" not loaded")};i.onreadystatechange=i.onload=function(r){r=p.event||r;if(r.type=="load"||Q(["loaded","complete"],this.readyState)>-1){this.onreadystatechange=null;q.loaded()}};i.src=this.path;U=this;K[0].parentNode.insertBefore(i,K[0]);U=null;G[i.id]=this};c.prototype.loaded=function(){this.complete()};c.prototype.complete=function(){if(Q(c.loaded,this.id)==-1){c.loaded.push(this.id)}delete P[this.id];f.prototype.complete.apply(this,arguments)};function a(q,i){this.id=q;this.body=i;if(typeof i=="undefined"){this.path=this.resolvePath(q)}}a.exports={};a.prototype=new c;a.prototype.resolvePath=function(i){return l(A.path,i+".js")};a.prototype.start=function(){var i,q,r=this,s;if(this.body){this.execute()}else{if(i=a.exports[this.id]){this.exp(i)}else{if(q=V[this.id]){q.then(function(t){r.exp(t)})}else{V[this.id]=this;this.load()}}}};a.prototype.loaded=function(){var q,i,r=this;if(!Z){q=C;C=null;q.id=q.id||this.id;q.then(function(s){r.exp(s)})}else{if(i=a.exports[this.id]){this.exp(i)}else{if(q=V[this.id]){q.then(function(s){r.exp(s)})}}}};a.prototype.complete=function(){delete V[this.id];c.prototype.complete.apply(this,arguments)};a.prototype.execute=function(){var i=this;if(typeof this.body=="object"){this.exp(this.body)}else{if(typeof this.body=="function"){this.body(function(q){i.exp(q)})}}};a.prototype.exp=function(i){this.complete(this.exports=a.exports[this.id]=i)};function B(q,i){this.deps=q;this.collectResults=i;if(this.deps.length==0){this.complete()}}B.prototype=new f;B.prototype.start=function(){var s=this;function q(){var v=[];if(s.collectResults){v[0]={}}for(var u=0,w;w=s.deps[u];u++){if(!w.completed){return }if(w.results.length>0){if(s.collectResults){if(w instanceof S){X(v[0],w.results[0])}else{j(v[0],w.id,w.results[0])}}else{v=v.concat(w.results)}}}s.complete.apply(s,v)}for(var r=0,t;t=this.deps[r];r++){t.then(q)}return this};function S(q,i){this.deps=q;this.collectResults=i}S.prototype=new f;S.prototype.start=function(){var s=this,q=0,i=[];if(s.collectResults){i[0]={}}(function r(){var t=s.deps[q++];if(t){t.then(function(u){if(t.results.length>0){if(s.collectResults){if(t instanceof S){X(i[0],t.results[0])}else{j(i[0],t.id,t.results[0])}}else{i.push(t.results[0])}}r()})}else{s.complete.apply(s,i)}}());return this};function T(){for(var q in K){if(K[q].readyState=="interactive"){return G[K[q].id]}}}function L(q,i){var r;if(!q&&Z){r=U||T()}if(r){delete G[r.scriptId];r.body=i;r.execute()}else{C=r=new a(q,i);V[r.id]=r}return r}function N(){var r=M(arguments),q,i;if(typeof r[0]=="string"){q=r.shift()}i=r.shift();return L(q,i)}function h(t,q){var s=q.id||"";var r=s.split("/");r.pop();var i=r.join("/");return t.replace(/^\./,i)}function Y(t,v){var r=[];function s(i){return a.exports[h(i,v)]}for(var u=0,q=t.length;u<q;u++){if(t[u]=="require"){r.push(s);continue}if(t[u]=="exports"){v.exports=v.exports||{};r.push(v.exports);continue}r.push(s(t[u]))}return r}function O(){var q=M(arguments),r=[],s,i;if(typeof q[0]=="string"){s=q.shift()}if(W(q[0])){r=q.shift()}i=q.shift();return L(s,function(u){var y=this,x=[];function w(){var AA=Y(M(r),y),AB;if(typeof i=="function"){AB=i.apply(y,AA)}else{AB=i}if(typeof AB=="undefined"){AB=y.exports}u(AB)}for(var v=0,t=r.length;v<t;v++){var z=r[v];if(Q(["require","exports"],z)==-1){x.push(h(z,y))}}if(x.length>0){A.apply(this,x.concat(w))}else{w()}})}O.amd={};function A(){var r=M(arguments),s,q;if(typeof r[r.length-1]=="boolean"){q=r.pop()}if(typeof r[r.length-1]=="function"){s=r.pop()}var i=new B(F(r,q),q);if(s){i.then(s)}return i}function F(u,r){var q=[];for(var s=0,t;t=u[s];s++){if(typeof t=="string"){t=m(t)}if(W(t)){t=new S(F(t,r),r)}q.push(t)}return q}function m(w){var q,v;for(var s=0,u;u=A.matchers[s];s++){var t=u[0],r=u[1];if(q=w.match(t)){return r(w)}}throw new Error(w+" was not recognised by loader")}var d=function(i){return i(A,N,d,define)};function H(){p.using=R;p.provide=E;p.define=J;p.loadrunner=e;return d}d.Script=c;d.Module=a;d.Collection=B;d.Sequence=S;d.Dependency=f;d.noConflict=H;p.loadrunner=d;p.using=A;p.provide=N;p.define=O;A.path="";A.matchers=[];A.matchers.add=function(q,i){this.unshift([q,i])};A.matchers.add(/(^script!|\.js$)/,function(q){var i=new c(q.replace(/^\$/,A.path.replace(/\/$/,"")+"/").replace(/^script!/,""),false);i.id=q;return i});A.matchers.add(/^[a-zA-Z0-9_\-\/]+$/,function(i){return new a(i)});A.bundles=[];function b(r){for(var q=0;q<A.bundles.length;q++){for(var i in A.bundles[q]){if(Q(A.bundles[q][i],r)>-1){return i}}}}if(g){A.path=g.getAttribute("data-path")||g.src.split(/loadrunner\.js/)[0]||"";if(main=g.getAttribute("data-main")){A.apply(p,main.split(/\s*,\s*/)).then(function(){})}}}(this,document));
loadrunner(function(D,C,B,E){function A(F){this.id=this.path=F}A.inProgress=[];A.done=[];A.prototype=new B.Dependency;A.prototype.start=function(){var F=this,G;if(G=A.done[this.id]){this.complete(G.result)}else{if(G=A.inProgress[this.id]){G.then(function(){F.complete(G.result)})}else{A.inProgress[this.id]=this;this.load()}}};A.prototype.load=function(){var H,F=this;if(window.XMLHttpRequest){H=new window.XMLHttpRequest()}else{try{H=new window.ActiveXObject("Microsoft.XMLHTTP")}catch(G){return new Error("XHR not found.")}}H.onreadystatechange=function(){if(H.readyState==4){F.result=H.responseText;A.done[F.id]=F;delete A.inProgress[F.id];F.complete(F.result)}};H.open("GET",this.path,true);H.send(null)};D.matchers.add(/^json!/,function(F){return new A(F.substring(5))})});
loadrunner(function(F,E,A,G){function B(H,I){for(var J=0,K;K=H[J];J++){if(I==K){return J}}return -1}function D(I){var H;if(I.charAt(0)==">"){I=I.substring(1)}if(H=C.inProgress[I]){H.complete();delete C.inProgress[I]}C.done.push(I)}var C=function(H){this.id=H};C.inProgress=[];C.done=[];C.prototype=new A.Dependency;C.prototype.start=function(){var I,H=this;if(B(C.done,this.id)!=-1){this.complete()}else{if(I=C.inProgress[this.id]){I.then(function(){H.complete()})}else{C.inProgress[this.id]=this}}};F.matchers.add(/^>/,function(H){return new C(H.substring(1))});window.signal=D});
using.path = 'phoenix/js';
});</script><script>WATCH.end('loadrunner');</script>
<script type="text/javascript">WATCH('javascript_logged_out', function() {
(function(){
function yascrib(eName, more) {
var log = '{', more = more || {}; more.event_name = eName; for (var k in more){ log += '"'+k+'":"'+more[k]+'"'; };
(new Image()).src = 'http://scribe.twitter.com/scribe?category=client_event&log='+encodeURIComponent(log+'}')+'&ts='+(new Date()).getTime();
}
function el(i,t) { var d = i.tagName ? i : document.getElementById(i); return t ? d.getElementsByTagName(t) : d; }
function byCls(a,c,f) { for (var i = a.length - 1; i >= 0; i--){ var k = a[i].className, m = k && k.match(c); if(m) { f.call(a[i], m[0]) } }; }
function rmCls(d,c) { return d.className = d.className.replace(' '+c,''); }
function addCls(d,c) { return d.className = rmCls(d,c)+' '+c; }
if(!location.href.match(/#!\/./)) {
var b = document.body;
rmCls(b, 'user-style-twttr loading-body');
addCls(b, 'front-page');
}
var divs = el('front-container', 'div'), c = 'hasome';
byCls(divs, 'holding', function() {
var div = this, inp = el(div, 'input')[0], spn = el(div,'span')[0];
if(inp && spn) {
spn.onclick = function() { inp.focus(); };
inp.onblur = function() { if(!inp.value.length) rmCls(div,c); }
inp.onkeydown = function(e) {
setTimeout(function() { ((e&&e.keyCode==8) || inp.value.length) ? addCls(div,c) : rmCls(div,c); },0);
};
}
});
window.setInterval(function() {
byCls(divs, 'holding', function() { var f=el(this, 'input')[0]; if(f && f.value.length) addCls(this,c); });
}, 1111);
var eventMap={signin:'web:front:login_callout:form:login_click',
signup:'web:front:signup_callout:form:signup_click',
search:'web:front:main:search_field:search',
language:'web:front:footer:language_selector:select'};
byCls(divs, 'signin|signup|search|language', function(k) {
var f = el(this, 'form'), evt = eventMap[k];
if(f && f[0]) {
f[0].onsubmit = function() {
if(!el('doc').className.match('route-front')){ yascrib(evt); }
}
}
});
}());
});</script>
<script type="text/javascript">WATCH.end('javascript_logged_out');</script>
<script type="text/javascript">WATCH('javascript_includes', function() {
twttr.session = twttr.session || {};
twttr.loggedIn = false;
twttr.appStartTime = document.startTime;
twttr.session.impressionId = twttr.appStartTime + Math.random();
twttr.geo = twttr.geo || {};
twttr.bundles = {"phoenix":"http:\/\/a2.twimg.com\/a\/1307573369\/javascripts\/phoenix.bundle.js","phoenix_plugins":"http:\/\/a3.twimg.com\/a\/1307573369\/javascripts\/phoenix_plugins.bundle.js","api":"http:\/\/a1.twimg.com\/a\/1307573369\/javascripts\/api.bundle.js","phxie6":"http:\/\/a3.twimg.com\/a\/1307573369\/javascripts\/phxie6.bundle.js","turkey":"http:\/\/a3.twimg.com\/a\/1307573369\/javascripts\/turkey.bundle.js","admin":"http:\/\/a0.twimg.com\/a\/1307573369\/javascripts\/admin.bundle.js","base":"http:\/\/a3.twimg.com\/sticky\/base.21.bundle.js"};
provide('boot/bootstrap_data', function(exports) {
var deps = [];
// Note: we include window.location.search here so any query string parameters given to load the page are passed
// along to /account/bootstrap_data.js. In particular, we want things like ?lang=ja to propagate through to the
// request for bootstrap data.
deps.push('json!/account/bootstrap_data' + window.location.search + (window.location.search ? '&' : '?') + 'r=' + Math.random());
// JSON calls require JSON.parse, which we're supplying in base bundle
if (typeof JSON === 'undefined') {
deps.push('>base_bundle_evaled');
}
using(deps, function(data) {
var bootstrap_data = JSON.parse(data);
exports(bootstrap_data);
});
});
using(
'>allCurrentUserDataLoaded',
'>request_cache_seeded',
'>base_bundle_evaled',
'>phoenix_plugins_bundle_evaled',
'>phoenix_bundle_evaled',
'>languageData',
function () {
jQuery.ready();
twttr.setup();
signal('>setupComplete');
}
);
twttr.placeDataPrefix = "http://geo.l3.twitter.com/places/autocomplete_places-";
function initAPI() {
twttr.anywhere.api.initialize();
twttr.API = {};
twttr.aug(twttr.API, twttr.anywhere.api.models);
twttr.aug(twttr.API, {
globalEvents: twttr.anywhere.api.globalEvents
});
twttr.API.setConfig = twttr.anywhere.api.updateConfig;
twttr.API.getConfig = function () {
return twttr.anywhere.api.config;
};
if (!twttr.API.util) {
twttr.API.util = {};
}
twttr.aug(twttr.API.util, twttr.anywhere.api.util);
if (!twttr.API._requestCache) {
twttr.API._requestCache = twttr.anywhere.api.cache;
}
twttr.API.setConfig({
cacheObjects: true,
includeEntities: true
});
twttr.extendAPI();
}
function initCurrentUser() {
if (twttr.loggedIn) {
using('boot/bootstrap_data', '>request_cache_seeded', function (bootstrapData) {
twttr.API.User.current({
error: function() {
// Not logged in anymore; refresh the page
window.location.reload(true);
},
success: function(currentUser) {
twttr.currentUser = currentUser;
for (var propName in bootstrapData.userProperties) {
twttr.currentUser.sync(propName, bootstrapData.userProperties[propName] || false);
}
signal('>allCurrentUserDataLoaded');
}
});
});
} else {
signal('>allCurrentUserDataLoaded');
}
};
twttr.proto = window.location.protocol.match(/s\:$/) ? 'https' : 'http';
twttr.isSSL = function () {
return twttr.proto === 'https';
};
twttr.domains = {
local: 'twitter.com',
remote: 'api.twitter.com',
upload: 'upload.twitter.com'
};
var match = window.location.hostname.match(/^(staging\d+\.[a-zA-Z0-9_]*?)\.twitter\.com$/i);
if (match) {
twttr.domains.local = match[1] + '.twitter.com';
twttr.domains.remote = 'api-' + match[1] + '.twitter.com';
twttr.domains.upload = twttr.domains.remote;
}
if (document.location.hostname === "localhost.twitter.com") {
twttr.domains.local = 'localhost.twitter.com:3000';
twttr.domains.remote = 'api.localhost.twitter.com:3000';
twttr.domains.upload = twttr.domains.remote;
}
twttr.hosts = {
local: twttr.proto + "://" + twttr.domains.local,
remote: twttr.proto + "://" + twttr.domains.remote,
upload: twttr.proto + "://" + twttr.domains.upload
};
var pReceiverURL = twttr.hosts.remote + '/receiver.html';
twttr.jsonpSandboxURL = 'http://a3.twimg.com/a/1307573369/jsonp_sandbox.html#scripts=http://a3.twimg.com/sticky/base.21.bundle.js';
twttr.detailsPaneContentSandboxURL = 'http://a3.twimg.com/a/1307573369/details_pane_content_sandbox.html#scripts=http://a3.twimg.com/sticky/base.21.bundle.js';
function createIFrame(complete) {
var frag = document.createElement('div');
frag.innerHTML = '<iframe tabindex="-1" role="presentation" style="position:absolute;top:-9999px;" src="' + pReceiverURL + '"></iframe>';
var iframe = frag.firstChild;
var fnComplete = function() {
complete.apply(iframe, arguments);
};
iframe.addEventListener ? iframe.addEventListener('load', fnComplete, false) : iframe.attachEvent('onload', fnComplete);
// Avoid "operation aborted" error in IE that can be caused by
// appending a new element to the body via body.appendChild
// by a script that is not a direct descendant of the <body>.
document.body.insertBefore(iframe, document.body.firstChild);
return iframe;
}
(function() {
var bundleFetchStartTime = new Date();
using(twttr.bundles.base, function() {
signal('>base_bundle_evaled');
});
using(
'>base_bundle_evaled',
twttr.bundles.api,
twttr.bundles.phoenix_plugins,
twttr.bundles.phoenix,
function() {
var bundleFetchEndTime = new Date();
signal('>allCodeLoaded');
using('boot/bootstrap_data', '>phoenix_bundle_evaled', function() {
twttr.util.Profiler.logPreviousEvent('twttr.bundles fetched', bundleFetchStartTime, bundleFetchEndTime);
});
}
);
})();
using('>base_bundle_evaled', '>api_bundle_evaled', function() {
twttr.anywhere.remote = {};
initAPI();
signal('>api_ready');
using('>request_cache_seeded', function() {
initCurrentUser();
});
});
using('boot/bootstrap_data', function(data) {
twttr.payload = data.payload;
signal('>payload');
twttr.remoteIP = data.remoteIP;
twttr.requestFullCity = data.requestFullCity;
twttr.recentPlaces = data.recentPlaces;
twttr.cdnBase = data.cdnBase;
if (data.globalConfig) {
twttr.globalConfig = data.globalConfig;
}
if(data.currentUser) {
twttr.currentUserScreenName = data.currentUserScreenName;
}
if (data.frontSuggestedUsers) {
twttr.frontSuggestedUsers = data.frontSuggestedUsers;
}
if (data.isAdmin) {
twttr.rights = data.adminRights
twttr.isAdmin = true;
}
if (data.isPreflight) {
twttr.isPreflight = data.isPreflight;
}
using('>base_bundle_evaled', function() {
$(function() {
twttr.isNarrow = data.isNarrow;
if(twttr.isNarrow) {
$(document.body).addClass('narrow');
} else {
$(document.body).removeClass('narrow');
}
});
});
if(data.pageLocale) {
twttr.pageLocale = data.pageLocale;
}
var i18nDeferDependencies = ['>base_bundle_evaled', '>phoenix_bundle_evaled', '>languageData'];
if(data.pageLocaleJS) {
i18nDeferDependencies.push('>setupComplete');
// Need to load language data
using(data.pageLocaleJS, function() {
signal('>languageData');
});
} else {
signal('>languageData');
}
if(data.pageLocaleClass) {
using('>base_bundle_evaled', function() {
$(function() {
$(document.body).addClass(data.pageLocaleClass);
});
});
}
if(data.languages) {
twttr.languages = data.languages;
}
using(i18nDeferDependencies, function() {
var _ = window._;
if(twttr.pageLocale === 'en') {
_ = function(str) {
return str;
}
}
// Update any elements with the i18n-deferred class, internationalizing the string from their
// data-i18n-label attribute.
var i18nLabelAttr = 'data-i18n-label';
$('.i18n-deferred').each(function(i, elem) {
var $elem = $(elem);
$elem.html(_($elem.attr(i18nLabelAttr)));
$elem.removeAttr(i18nLabelAttr);
$elem.removeClass('i18n-deferred');
});
// Un-hide the navigation bar at the top, now that it has labels
$('#global-nav').css('visibility', 'visible');
// Set the placeholder text for the search field
var $searchQueryField = $('#search-query');
$searchQueryField.attr('placeholder', _($searchQueryField.attr(i18nLabelAttr)));
$searchQueryField.removeAttr(i18nLabelAttr);
$('#top-stuff').css('visibility', 'visible');
});
using('>defaultViews', function() {
if (data.flashNotice) {
$('#flash-message-storage').html(data.flashNotice).show();
}
});
using('>decider', function() {
twttr.decider._updateFeatures(data.deciderFeatures);
});
using('>ab_decider', function() {
twttr.abdecider._updateExperiments(data.abBuckets);
});
using('>api_ready', function() {
twttr.API.setConfig({ postAuthenticityToken: data.postAuthenticityToken });
$('input.authenticity_token').val(data.postAuthenticityToken);
var seedData = data.requestCacheSeedData;
for (var i = 0, len = seedData.length; i < len; ++i) {
var seedItem = seedData[i];
twttr.API._requestCache.inject(seedItem.api_request_name, seedItem.options, seedItem.json, 1);
}
signal('>request_cache_seeded');
if(data.homeTimelineFetchSize) {
twttr.API.homeTimelineFetchSize = data.homeTimelineFetchSize;
}
});
});
createIFrame(function() {
var that = this;
using('>base_bundle_evaled', '>api_bundle_evaled', function() {
twttr.anywhere.remote.server = that;
twttr.anywhere.api.util.RemoteRequest.flush();
});
});
});</script>
<script type="text/javascript">
twttr.enableTurkeyDisplay = function() {
twttr.mediaType('Twimg', {
icon: "photo",
favicon: "//photobucket.com/favicon.ico",
domain: "//twitter.com",
matchers: {
twimg: /^#{optional_protocol}?p\.twimg\.com\/[a-zA-Z0-9]+.jpg$/i,
media: /^#{optional_protocol}?pic\.twitter\.com\/[a-zA-Z0-9]+$/i,
permalink: /^#{optional_protocol}?twitter\.com\/(?:#!?\/)?\w{1,20}\/status\/(\d+)\/photo\/\d*$/i
},
attributionTemplate: "\
<div class='media-attribution'>\
<span>powered by</span>\
<span class='turkey-icon'></span>\
<a target='_blank' data-media-type='' class='media-attribution-link' href='http://photobucket.com/twitter'>Photobucket</a>\
</div>",
getImageURL: function(size, cb) {
var that = this;
this.process(function() {
that.metadata(function(data) {
if (data && data.image) {
cb(data.image);
} else {
cb(null);
}
});
});
},
metadata: function(cb) {
cb({
image: this.data.src,
name: this.data.name,
expandedUrl: this.data.url
});
},
process: function(finished) {
var matchers = twttr.media.types.Twimg.matchers;
if (this.url.match(matchers.twimg)) {
this.data["src"] = this.url;
this.data["url"] = this.url;
this.data["name"] = this.constructor._name;
} else {
var that = this, imgPath, matched;
if (!this.tweet.entities.media) {
return;
}
var displayUrls = $.map(this.tweet.entities.media, function(entity) {
return entity.display_url;
});
// Guards against a tweet containing a link to pic.twitter.com
// and an actual pic from twitter
if ($.inArray(this.url, displayUrls) < 0) {
return;
}
// this really should use the expanded_url
$.each(this.tweet.entities.media, function() {
if (this.display_url == that.url) {
matched = this;
return false;
}
});
if (!twttr.isSSL()) {
imgPath = matched.media_url;
} else {
imgPath = matched.media_url_https;
}
this.data["src"] = imgPath;
this.data["url"] = matched.expanded_url;
this.data["name"] = this.constructor._name;
}
finished();
},
render: function(dom) {
// This string has some funky mustache escaping so that
// the mustache string can exist in a mustache string. YO DAWG!
var t = '<div class="twimg">\
<a class="inline-media-image" data-inline-type="%7B%7Bname%7D%7D" href="%7B%7Burl%7D%7D" target="_blank">\
<img src="%7B%7Bsrc%7D%7D"/>\
</a>\
</div>';
$(dom).append(Mustache.to_html(decodeURIComponent(t), this.data));
}
});
}
</script>
<script>WATCH.end('javascript_includes');</script>
<!--[if lte IE 6]>
<script src="http://a3.twimg.com/a/1307573369/javascripts/phxie6.bundle.js"></script>
<![endif]-->
</body>
</html>