Date.prototype.setISO8601=function(b){var c="([0-9]{4})(-([0-9]{2})(-([0-9]{2})(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(.([0-9]+))?)?(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";var f=b.match(new RegExp(c));var e=0;var a=new Date(f[1],0,1);if(f[3]){a.setMonth(f[3]-1)}if(f[5]){a.setDate(f[5])}if(f[7]){a.setHours(f[7])}if(f[8]){a.setMinutes(f[8])}if(f[10]){a.setSeconds(f[10])}if(f[12]){a.setMilliseconds(Number("0."+f[12])*1000)}if(f[14]){e=(Number(f[16])*60)+Number(f[17]);e*=((f[15]=="-")?1:-1)}e-=a.getTimezoneOffset();time=(Number(a)+(e*60*1000));this.setTime(Number(time))};var dateFormat=function(){var a=/d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,b=/\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,d=/[^-+\dA-Z]/g,c=function(f,e){f=String(f);e=e||2;while(f.length<e){f="0"+f}return f};return function(i,v,q){var g=dateFormat;if(arguments.length==1&&(typeof i=="string"||i instanceof String)&&!/\d/.test(i)){v=i;i=undefined}i=i?new Date(i):new Date();if(isNaN(i)){throw new SyntaxError("invalid date")}v=String(g.masks[v]||v||g.masks["default"]);if(v.slice(0,4)=="UTC:"){v=v.slice(4);q=true}var t=q?"getUTC":"get",l=i[t+"Date"](),e=i[t+"Day"](),j=i[t+"Month"](),p=i[t+"FullYear"](),r=i[t+"Hours"](),k=i[t+"Minutes"](),u=i[t+"Seconds"](),n=i[t+"Milliseconds"](),f=q?0:i.getTimezoneOffset(),h={d:l,dd:c(l),ddd:g.i18n.dayNames[e],dddd:g.i18n.dayNames[e+7],m:j+1,mm:c(j+1),mmm:g.i18n.monthNames[j],mmmm:g.i18n.monthNames[j+12],yy:String(p).slice(2),yyyy:p,h:r%12||12,hh:c(r%12||12),H:r,HH:c(r),M:k,MM:c(k),s:u,ss:c(u),l:c(n,3),L:c(n>99?Math.round(n/10):n),t:r<12?"a":"p",tt:r<12?"am":"pm",T:r<12?"A":"P",TT:r<12?"AM":"PM",Z:q?"UTC":(String(i).match(b)||[""]).pop().replace(d,""),o:(f>0?"-":"+")+c(Math.floor(Math.abs(f)/60)*100+Math.abs(f)%60,4),S:["th","st","nd","rd"][l%10>3?0:(l%100-l%10!=10)*l%10]};return v.replace(a,function(m){return m in h?h[m]:m.slice(1,m.length-1)})}}();dateFormat.masks={"default":"ddd mmm dd yyyy HH:MM:ss",shortDate:"m/d/yy",mediumDate:"mmm d, yyyy",longDate:"mmmm d, yyyy",fullDate:"dddd, mmmm d, yyyy",shortTime:"h:MM TT",mediumTime:"h:MM:ss TT",longTime:"h:MM:ss TT Z",isoDate:"yyyy-mm-dd",isoTime:"HH:MM:ss",isoDateTime:"yyyy-mm-dd'T'HH:MM:ss",isoUtcDateTime:"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"};dateFormat.i18n={dayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","January","February","March","April","May","June","July","August","September","October","November","December"]};Date.prototype.format=function(a,b){return dateFormat(this,a,b)};function readCookie(b){var e=b+"=";var a=document.cookie.split(";");for(var d=0;d<a.length;d++){var f=a[d];while(f.charAt(0)==" "){f=f.substring(1,f.length)}if(f.indexOf(e)==0){return f.substring(e.length,f.length)}}return null}function writeCookie(c,d,e){if(e){var b=new Date();b.setTime(b.getTime()+(e*24*60*60*1000));var a="; expires="+b.toGMTString()}else{var a=""}document.cookie=c+"="+d+a+"; path=/"}function serialize(e){if(typeof e.toSource!=="undefined"&&typeof e.callee==="undefined"){return e.toSource()}switch(typeof e){case"number":case"boolean":case"function":return e;break;case"string":return"'"+e+"'";break;case"object":var d;if(e.constructor===Array||typeof e.callee!=="undefined"){d="[";var c,a=e.length;for(c=0;c<a-1;c++){d+=serialize(e[c])+","}d+=serialize(e[c])+"]"}else{d="{";var b;for(b in e){d+=b+":"+serialize(e[b])+","}d=d.replace(/\,$/,"")+"}"}return d;break;default:return"UNKNOWN";break}}$(function(){window.ajaxManager={ready:true,twitterRemainingHits:100,checkTwitterAPI:function(){$.getJSON("http://twitter.com/account/rate_limit_status.json?callback=?",function(data){ajaxManager.twitterRemainingHits=parseInt(data.remaining_hits)})}};window.peopleManager={twitterers:{},lookupQueue:[],lookupTimer:false,collectCookie:function(){var cookieContents=readCookie("tremors.twitterers");if(cookieContents){peopleManager.twitterers=eval(cookieContents)}},processLookups:function(){if(ajaxManager.twitterRemainingHits>=50){peopleManager.lookupTimer=setInterval("window.peopleManager.sendLookup()",100)}else{}},sendLookup:function(){if(!ajaxManager.ready){return}ajaxManager.ready=false;if(peopleManager.lookupQueue.length>0){var userName=peopleManager.lookupQueue.shift();$.getJSON("http://www.twitter.com/users/show.json?screen_name="+userName+"&callback=?",function(data){peopleManager.twitterers[userName]={picture:data.profile_image_url,name:data.name};ajaxManager.ready=true;$("#resultsDisplay li."+userName).each(function(){$(this).find("span.imagePlaceHolder").replaceWith('<img class="mugshot" src="'+data.profile_image_url+'"/>').end().find("span.namePlaceHolder").parent().html(data.name)})})}else{clearInterval(peopleManager.lookupTimer)}}};window.statsManager={updateTimer:false,getStats:function(){$.getJSON("/tremorsrestserver?method=processed",function(data){$("#totalTweets").find("span.totalProcessed").html(data.total)})}};window.resultsManager={latestID:0,latestTime:new Date(),placeIndex:[],places:{},updateTimer:false,searchLocation:6,searchLocationName:"London, UK",searchString:"",showTweets:function(id){$("#searchErrors").hide();ajaxManager.ready=false;$("#resultsDisplay").empty();resultsManager.latestID=0;resultsManager.places={};resultsManager.placeIndex=[];clearInterval(resultsManager.updateTimer);resultsManager.updateTimer=false;$.getJSON("/tremorsrestserver?method=show&id="+id,function(data){if(data.tweets.length==0){$("#searchErrors").html("No tweets found. Showing all recent for "+resultsManager.searchLocationName);$("#searchErrors").show();resultsManager.searchString="";$("#tremorList").trigger("update")}else{$.each(data.tweets,function(i,item){groupTremorItem(item);resultsManager.latestID=item.tweet.id})}ajaxManager.ready=true;renderResultsList();resultsManager.refreshEvents();peopleManager.processLookups();$("#resultTitle").find("span.placeName").html(resultsManager.searchLocationName)})},refreshEvents:function(){$("#resultsDisplay .placeName").unbind("click.rumdisplay",function(){});$("#resultsDisplay .placeName").bind("click.rumdisplay",function(){$.getJSON("/tremorsrestserver?method=rummbledata&rummble_id="+this.id,function(data){$("#detailsPanel").find("#detailName").text(data.name).end().find("#detailPhone").text(data.phone).end().find("#detailURL").text(data.url).end().find("#detailAddress").text(data.address+", "+data.country).end().find("#detailTags").text(data.name).end().find("#detailImage").attr("src",data.photo).end().bind("click.close",function(){$(this).fadeOut("fast")}).fadeIn("fast")})})},refreshEvents2:function(){$("#topTen li").unbind("click.tweetdisplay",function(){});$("#topTen li").bind("click.tweetdisplay",function(){resultsManager.searchString="";resultsManager.showTweets(this.id)})}};var groupTremorItem=function(itemData){var itemID=itemData.name.replace(/[^\w]/g,"").toLowerCase();var placeItem={name:itemData.name,address:itemData.address,source:itemData.source,source_key:itemData.source_key,tweets:[]};if(resultsManager.places[itemID]){}else{resultsManager.places[itemID]=placeItem;resultsManager.placeIndex.unshift(itemID)}resultsManager.places[itemID].tweets.unshift(itemData.tweet);var timeStamp=new Date();timeStamp.setISO8601(itemData.tweet.time.replace(" ","T"));if(timeStamp>resultsManager.latestTime){resultsManager.latestTime=timeStamp;for(var i=0;i<resultsManager.placeIndex.length;i++){if(resultsManager.placeIndex[i]==itemID){resultsManager.placeIndex.splice(i,1);resultsManager.placeIndex.unshift(itemID)}}}};var renderResultsList=function(){var resultsList=document.createDocumentFragment();for(var p=0;p<resultsManager.placeIndex.length;p++){var place=resultsManager.places[resultsManager.placeIndex[p]];var tremorItem=document.createElement("li");if(resultsManager.searchString){var searchTerm=place.name.toLowerCase();if(searchTerm.indexOf(resultsManager.searchString.toLowerCase())>-1){tremorItem.className="tremor match"}else{tremorItem.className="tremor noMatch"}}else{tremorItem.className="tremor"}var nameElement=document.createElement("h4");nameElement.innerHTML='<span class="placeName" id="'+place.source+":"+place.source_key+'">'+place.name+'</span>, <span class="address">'+place.address+"</span>";var tweetList=document.createElement("ol");tweetList.className="tweets";var tweetCount=0;for(tweet in place.tweets){tweetList.appendChild(renderTweetItem(place.tweets[tweet]));tweetCount++}var countElement=document.createElement("h5");countElement.className="tweetCount";countElement.innerHTML=tweetCount>1?tweetCount+"<span> tweets</span>":tweetCount+"<span> tweet</span>";tremorItem.appendChild(nameElement);tremorItem.appendChild(countElement);tremorItem.appendChild(tweetList);resultsList.appendChild(tremorItem)}$("#resultsDisplay").empty().append(resultsList)};var renderTweetItem=function(tweetObject){var imageElement,displayName;if(tweetObject.photo){displayName=tweetObject.username;imageElement=document.createElement("img");imageElement.setAttribute("src",tweetObject.photo);imageElement.className="mugshot"}else{peopleManager.lookupQueue.push(tweetObject.username.toLowerCase());displayName='<span class="namePlaceholder">'+tweetObject.username+"</span>";imageElement=document.createElement("span");imageElement.className="imagePlaceHolder mugshot"}var authorElement=document.createElement("h5");authorElement.innerHTML='<a class="twitterer" href="http://www.twitter.com/'+tweetObject.username+'" title="'+tweetObject.username+'&apos;s profile on Twitter">'+displayName+"</a>";var timeStamp=new Date();timeStamp.setISO8601(tweetObject.time.replace(" ","T"));var time=timeStamp.format("HH:MM:ss dd/mm/yyyy");var messageElement=document.createElement("p");messageElement.innerHTML=' says <span class="tweetBody">'+createTwitterLinks(tweetObject.message)+'</span> <span class="tweetTime">['+time+"]</span>";var scoreElement=moodRating(parseInt(tweetObject.rating));var tweetItem=document.createElement("li");tweetItem.className=tweetObject.username.toLowerCase();tweetItem.appendChild(authorElement);tweetItem.appendChild(messageElement);tweetItem.appendChild(imageElement);tweetItem.appendChild(scoreElement);return tweetItem};function moodRating(score){var moodChip=document.createElement("span");var classStr,title;switch(true){case (score>85):classStr="rating fantastic";title="Fantastic!";break;case (score>75):classStr="rating veryGood";title="Very good";break;case (score>50):classStr="rating good";title="Pretty good";break;case (score==50):classStr="rating neutral";title="Tremors couldn't figure out the mood of this tweet";break;case (score>25):classStr="rating bad";title="Bad. Just bad.";break;default:title="Resoundingly awful";classStr="rating awful";break}moodChip.className=classStr;moodChip.setAttribute("title",title);moodChip.innerHTML=score;return moodChip}var createTwitterLinks=function(text){var filteredText=text.replace(/((http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?)/g,'<a href="$1" title="Follow this link wherever it might go...">$1</a>');filteredText=filteredText.replace(/@([\w\d_]+)/g,'<a href="http://www.twitter.com/$1" title="$1\'s profile on Twitter">@$1</a>');return filteredText};$("#tremorList").bind("update",function(e){ajaxManager.ready=false;var listTitle=$("#resultTitle");var titleStash=listTitle.html();listTitle.html("Checking seismograph");$.getJSON("/tremorsrestserver",{method:"activity",feed:resultsManager.searchLocation,last_id:resultsManager.latestID},function(data){$.each(data.tweets,function(i,item){groupTremorItem(item);resultsManager.latestID=item.tweet.id});ajaxManager.ready=true;renderResultsList();resultsManager.refreshEvents();peopleManager.processLookups();listTitle.html(titleStash).find("span.placeName").html(resultsManager.searchLocationName)})}).trigger("update");$("#topTen").bind("update",function(e){ajaxManager.ready=false;$.getJSON("/tremorsrestserver",{method:"popular",feed:resultsManager.searchLocation,hours:24},function(data){var newList=document.createDocumentFragment();var listParent=document.createElement("ol");$.each(data.tweets,function(i,item){var listItem=document.createElement("li");listItem.id=item.source+":"+item.source_key;listItem.innerHTML='<span class="placeName">'+item.name+'</span> <span class="address">'+item.address+'</span> <span class="tweetCount">'+item.tweets+"</span>";if(i%2!=0){listItem.className="odd"}listParent.appendChild(listItem)});newList.appendChild(listParent);$("#topTen ol").replaceWith(newList);resultsManager.refreshEvents2();ajaxManager.ready=true})}).trigger("update");$("#filter").submit(function(){var location=$("#filterLocation option:selected");$("#searchErrors").hide();resultsManager.searchString=$("#filterTerm").val();resultsManager.searchLocation=location.val();resultsManager.searchLocationName=location.text();if(resultsManager.searchString&&!resultsManager.searchLocation){$("#searchErrors").html("Please choose a city");$("#searchErrors").show();return false}$("#resultsDisplay").empty();resultsManager.latestID=0;resultsManager.places={};resultsManager.placeIndex=[];if(resultsManager.searchString){$("#searchTicker").show();$.getJSON("/tremorsrestserver",{method:"search",query:resultsManager.searchString,feed:resultsManager.searchLocation},function(data){rummbleLocationResults(data,resultsManager.searchString)})}else{if(!resultsManager.updateTimer){resultsManager.updateTimer=setInterval('$("#tremorList").trigger("update")',30000)}$("#tremorList").trigger("update");$("#topTen").trigger("update")}return false});ajaxManager.checkTwitterAPI();peopleManager.collectCookie();resultsManager.updateTimer=setInterval('$("#tremorList").trigger("update")',30000);statsManager.getStats();statsManager.updateTimer=setInterval("statsManager.getStats()",120000);$("#searchErrors").hide();$(".closeWidget").click(function(){$(this).parents(".popUp").fadeOut("fast");grayOut(false);return false});$("#searchTicker, #locationRefine").hide();$("#locationRefine").submit(function(){$("#searchTicker, #locationRefine").hide();resultsManager.showTweets(locationRefineSubmit);$("#topTen").trigger("update");return false});$.tablesorter.addParser({id:"distance",is:function(s){return false},format:function(s){if(s.toLowerCase().match(/km/)){return(parseFloat(s)*1000)}else{return parseFloat(s)}},type:"numeric"});var rummbleLocationResults=function(dataResult,location){var data=dataResult;searchLocation=location;$("span.locationKeyword").html(searchLocation);lastSearchResultsCount=data.results.length;if(data.results.length==0){$("#searchTicker").hide();$("#searchErrors").html("We can't find that place. Showing recent tweets for "+resultsManager.searchLocationName);$("#searchErrors").show();resultsManager.searchString="";$("#tremorList").trigger("update");$("#topTen").trigger("update")}else{if(data.results.length==1){$("#searchTicker, #locationRefine").hide();resultsManager.showTweets(data.results[0].id);$("#topTen").trigger("update")}else{$("button[type=submit]","#locationRefine").attr("disabled","disabled").addClass("disabled").blur();$("#locations").hide().children("tbody").empty();lastSearchSuccessful=true;$.each(data.results,function(i,result){var friendlyPlaceName;var friendlyPlaceHTML;var rowClass;switch(true){case result.placeName.length>0:friendlyPlaceName=result.streetAddress?result.placeName+", "+result.streetAddress+", "+result.city:result.placeName;friendlyPlaceHTML=result.streetAddress?'<span title="This is the exact location of a business.">'+result.placeName+'</span>, <span class="address">'+result.streetAddress+", "+result.city+"</span>":result.placeName;rowClass="specific";break;case result.streetAddress.length>0:friendlyPlaceName=result.city?result.streetAddress+", "+result.city:result.streetAddress;break;case result.city.length>0:friendlyPlaceName=result.region.length>0?result.city+", "+result.region:result.city;break;case result.region.length>0:friendlyPlaceName=result.region;break;default:friendlyPlaceName=result.name;break}if(!friendlyPlaceHTML){friendlyPlaceHTML=friendlyPlaceName}$('<tr class="'+rowClass+'">').append('<td class="checkBoxColumn"><input id="location_'+i+'" type="radio" value="'+result.id+'" name="location" title="'+result.name+'"/></td>').append('<td class="locationName"><label for="location_'+i+'" >'+(friendlyPlaceName.toLowerCase()==searchLocation.toLowerCase()?'<span class="highlight" title="Exact match to your search keyword">'+friendlyPlaceHTML+"</span>":friendlyPlaceHTML)+"</label></td>").append('<td class="locationCountry"><label for="location_'+i+'" >'+result.country+"</label></td>").appendTo("#locations tbody")});assignEventsClickableTable();$("#searchTicker").hide();$("#locations").show();$("#locationRefine").show();$("#locations input:first").focus().parents("tr:not([class*=selected])").removeClass("selected").addClass("hover");centerDiv("locationRefine",{horizontal:false})}}};var assignEventsClickableTable=function(){$("table.clickable tr").hover(function(){$(this).addClass("hover")},function(){$(this).removeClass("hover")});$("table.clickable tbody input").click(function(ev){if(ev.detail==1||$.browser.msie){$(this).parents("tr:not([class*=selected])").addClass("selected").siblings("tr").removeClass("selected");if($(this).attr("checked")){$('button[type="submit"]',$(this).parents("form")).removeAttr("disabled").removeClass("disabled").focus()}}else{if(ev.detail==2){$(this).parents("tr:not([class*=selected])").addClass("selected").siblings("tr").removeClass("selected");$("#locationRefine").submit()}}locationRefineSubmit=$(this).attr("value")}).focus(function(){$(this).parents("tr:not([class*=selected])").addClass("selected").siblings("tr").removeClass("selected")});$("#locationsPrevPage, #locationsNextPage").unbind("click");$("table.sortable").tablesorter({headers:{0:{sorter:false},3:{sorter:"distance"}},widgets:["zebra"]}).tablesorterPager({container:$(".sortableControls")[0],positionFixed:false,size:8}).mousewheel(function(event,delta){if(delta>0){$("#locationsPrevPage").click()}else{if(delta<0){$("#locationsNextPage").click()}}return false})};window.seismograph={element:$("#seismograph"),left:-10,top:0,timer:false,reset:0,scroll:function(){if(seismograph.left>seismograph.reset){seismograph.left=0}seismograph.left+=2;seismograph.element.css("background-position",seismograph.left+"px "+seismograph.top+"px")},initialise:function(){seismograph.timer=setInterval("seismograph.scroll()",80);seismograph.reset=seismograph.element.width()*20}};seismograph.initialise()});