;(function($){$.ga=function(gaCode,settings){var docReady=false;var tracker;var ready=false;var pageTrackPreReadyQue=[];var eventTrackPreReadyQue=[];jQuery(function(){docReady=true;});settings=$.extend({selectorMap:{}},settings);$.galog={pageView:function(path){if(ready){tracker._trackPageview(path);}else{pageTrackPreReadyQue.push(path);}},event:function(category,action,optional_label,optional_integer_value){if(ready){tracker._trackEvent(category,action,optional_label,optional_integer_value);}else{var d={};d.category=category;d.action=action;d.label=optional_label;d.value=optional_integer_value;eventTrackPreReadyQue.push(d);}}};function checkPageTrackPreReadyQue(){var path;while(pageTrackPreReadyQue.length>0){path=pageTrackPreReadyQue.pop();tracker._trackPageview(path);}};function checkEventTrackPreReadyQue(){var d;while(eventTrackPreReadyQue.length>0){d=eventTrackPreReadyQue.pop();tracker._trackEvent(d.category,d.action,d.label,d.value);}};function setupTracking(){tracker=_gat._getTracker(gaCode);if(docReady){tracker._trackPageview();}else{jQuery(function(){tracker._trackPageview();});}
if(typeof(tracker)!='undefined'){ready=true;checkPageTrackPreReadyQue();checkEventTrackPreReadyQue();$('a.ga-page').each(function(){var u=$(this).attr('href');if(typeof(u)!='undefined'){$(this).click(function(){tracker._trackPageview(u);});}});var selectorMap=settings.selectorMap;$.each(selectorMap,function(k,v){$(k).click(function(){tracker._trackPageview(v);});});}};function loadGaScript(){try{var host=(("https:"==document.location.protocol)?"https://ssl.":"http://www.");var url=host+"google-analytics.com/ga.js";$.getScript(url,function(){if($.browser.safari){var tID=setTimeout(setupTracking,500);}else{setupTracking();}});}catch(e){}}
loadGaScript();};})(jQuery);;(function($){$.fn.ajaxSubmit=function(options){if(!this.length){log('ajaxSubmit: skipping submit process - no element selected');return this;}
if(typeof options=='function')
options={success:options};var url=$.trim(this.attr('action'));if(url){url=(url.match(/^([^#]+)/)||[])[1];}
url=url||window.location.href||'';options=$.extend({url:url,type:this.attr('method')||'GET'},options||{});var veto={};this.trigger('form-pre-serialize',[this,options,veto]);if(veto.veto){log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');return this;}
if(options.beforeSerialize&&options.beforeSerialize(this,options)===false){log('ajaxSubmit: submit aborted via beforeSerialize callback');return this;}
var a=this.formToArray(options.semantic);if(options.data){options.extraData=options.data;for(var n in options.data){if(options.data[n]instanceof Array){for(var k in options.data[n])
a.push({name:n,value:options.data[n][k]});}
else
a.push({name:n,value:options.data[n]});}}
if(options.beforeSubmit&&options.beforeSubmit(a,this,options)===false){log('ajaxSubmit: submit aborted via beforeSubmit callback');return this;}
this.trigger('form-submit-validate',[a,this,options,veto]);if(veto.veto){log('ajaxSubmit: submit vetoed via form-submit-validate trigger');return this;}
var q=$.param(a);if(options.type.toUpperCase()=='GET'){options.url+=(options.url.indexOf('?')>=0?'&':'?')+q;options.data=null;}
else
options.data=q;var $form=this,callbacks=[];if(options.resetForm)callbacks.push(function(){$form.resetForm();});if(options.clearForm)callbacks.push(function(){$form.clearForm();});if(!options.dataType&&options.target){var oldSuccess=options.success||function(){};callbacks.push(function(data){$(options.target).html(data).each(oldSuccess,arguments);});}
else if(options.success)
callbacks.push(options.success);options.success=function(data,status){for(var i=0,max=callbacks.length;i<max;i++)
callbacks[i].apply(options,[data,status,$form]);};var files=$('input:file',this).fieldValue();var found=false;for(var j=0;j<files.length;j++)
if(files[j])
found=true;var multipart=false;if(options.iframe||found||multipart){if(options.closeKeepAlive)
$.get(options.closeKeepAlive,fileUpload);else
fileUpload();}
else
$.ajax(options);this.trigger('form-submit-notify',[this,options]);return this;function fileUpload(){var form=$form[0];if($(':input[name=submit]',form).length){alert('Error: Form elements must not be named "submit".');return;}
var opts=$.extend({},$.ajaxSettings,options);var s=$.extend(true,{},$.extend(true,{},$.ajaxSettings),opts);var id='jqFormIO'+(new Date().getTime());var $io=$('<iframe id="'+id+'" name="'+id+'" src="about:blank" />');var io=$io[0];$io.css({position:'absolute',top:'-1000px',left:'-1000px'});var xhr={aborted:0,responseText:null,responseXML:null,status:0,statusText:'n/a',getAllResponseHeaders:function(){},getResponseHeader:function(){},setRequestHeader:function(){},abort:function(){this.aborted=1;$io.attr('src','about:blank');}};var g=opts.global;if(g&&!$.active++)$.event.trigger("ajaxStart");if(g)$.event.trigger("ajaxSend",[xhr,opts]);if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&$.active--;return;}
if(xhr.aborted)
return;var cbInvoked=0;var timedOut=0;var sub=form.clk;if(sub){var n=sub.name;if(n&&!sub.disabled){options.extraData=options.extraData||{};options.extraData[n]=sub.value;if(sub.type=="image"){options.extraData[name+'.x']=form.clk_x;options.extraData[name+'.y']=form.clk_y;}}}
setTimeout(function(){var t=$form.attr('target'),a=$form.attr('action');form.setAttribute('target',id);if(form.getAttribute('method')!='POST')
form.setAttribute('method','POST');if(form.getAttribute('action')!=opts.url)
form.setAttribute('action',opts.url);if(!options.skipEncodingOverride){$form.attr({encoding:'multipart/form-data',enctype:'multipart/form-data'});}
if(opts.timeout)
setTimeout(function(){timedOut=true;cb();},opts.timeout);var extraInputs=[];try{if(options.extraData)
for(var n in options.extraData)
extraInputs.push($('<input type="hidden" name="'+n+'" value="'+options.extraData[n]+'" />').appendTo(form)[0]);$io.appendTo('body');io.attachEvent?io.attachEvent('onload',cb):io.addEventListener('load',cb,false);form.submit();}
finally{form.setAttribute('action',a);t?form.setAttribute('target',t):$form.removeAttr('target');$(extraInputs).remove();}},10);var domCheckCount=50;function cb(){if(cbInvoked++)return;io.detachEvent?io.detachEvent('onload',cb):io.removeEventListener('load',cb,false);var ok=true;try{if(timedOut)throw'timeout';var data,doc;doc=io.contentWindow?io.contentWindow.document:io.contentDocument?io.contentDocument:io.document;var isXml=opts.dataType=='xml'||doc.XMLDocument||$.isXMLDoc(doc);log('isXml='+isXml);if(!isXml&&(doc.body==null||doc.body.innerHTML=='')){if(--domCheckCount){cbInvoked=0;setTimeout(cb,100);return;}
log('Could not access iframe DOM after 50 tries.');return;}
xhr.responseText=doc.body?doc.body.innerHTML:null;xhr.responseXML=doc.XMLDocument?doc.XMLDocument:doc;xhr.getResponseHeader=function(header){var headers={'content-type':opts.dataType};return headers[header];};if(opts.dataType=='json'||opts.dataType=='script'){var ta=doc.getElementsByTagName('textarea')[0];if(ta)
xhr.responseText=ta.value;else{var pre=doc.getElementsByTagName('pre')[0];if(pre)
xhr.responseText=pre.innerHTML;}}
else if(opts.dataType=='xml'&&!xhr.responseXML&&xhr.responseText!=null){xhr.responseXML=toXml(xhr.responseText);}
data=$.httpData(xhr,opts.dataType);}
catch(e){ok=false;$.handleError(opts,xhr,'error',e);}
if(ok){opts.success(data,'success');if(g)$.event.trigger("ajaxSuccess",[xhr,opts]);}
if(g)$.event.trigger("ajaxComplete",[xhr,opts]);if(g&&!--$.active)$.event.trigger("ajaxStop");if(opts.complete)opts.complete(xhr,ok?'success':'error');setTimeout(function(){$io.remove();xhr.responseXML=null;},100);};function toXml(s,doc){if(window.ActiveXObject){doc=new ActiveXObject('Microsoft.XMLDOM');doc.async='false';doc.loadXML(s);}
else
doc=(new DOMParser()).parseFromString(s,'text/xml');return(doc&&doc.documentElement&&doc.documentElement.tagName!='parsererror')?doc:null;};};};$.fn.ajaxForm=function(options){return this.ajaxFormUnbind().bind('submit.form-plugin',function(){$(this).ajaxSubmit(options);return false;}).bind('click.form-plugin',function(e){var $el=$(e.target);if(!($el.is(":submit,input:image"))){return;}
var form=this;form.clk=e.target;if(e.target.type=='image'){if(e.offsetX!=undefined){form.clk_x=e.offsetX;form.clk_y=e.offsetY;}else if(typeof $.fn.offset=='function'){var offset=$el.offset();form.clk_x=e.pageX-offset.left;form.clk_y=e.pageY-offset.top;}else{form.clk_x=e.pageX-e.target.offsetLeft;form.clk_y=e.pageY-e.target.offsetTop;}}
setTimeout(function(){form.clk=form.clk_x=form.clk_y=null;},10);});};$.fn.ajaxFormUnbind=function(){return this.unbind('submit.form-plugin click.form-plugin');};$.fn.formToArray=function(semantic){var a=[];if(this.length==0)return a;var form=this[0];var els=semantic?form.getElementsByTagName('*'):form.elements;if(!els)return a;for(var i=0,max=els.length;i<max;i++){var el=els[i];var n=el.name;if(!n)continue;if(semantic&&form.clk&&el.type=="image"){if(!el.disabled&&form.clk==el){a.push({name:n,value:$(el).val()});a.push({name:n+'.x',value:form.clk_x},{name:n+'.y',value:form.clk_y});}
continue;}
var v=$.fieldValue(el,true);if(v&&v.constructor==Array){for(var j=0,jmax=v.length;j<jmax;j++)
a.push({name:n,value:v[j]});}
else if(v!==null&&typeof v!='undefined')
a.push({name:n,value:v});}
if(!semantic&&form.clk){var $input=$(form.clk),input=$input[0],n=input.name;if(n&&!input.disabled&&input.type=='image'){a.push({name:n,value:$input.val()});a.push({name:n+'.x',value:form.clk_x},{name:n+'.y',value:form.clk_y});}}
return a;};$.fn.formSerialize=function(semantic){return $.param(this.formToArray(semantic));};$.fn.fieldSerialize=function(successful){var a=[];this.each(function(){var n=this.name;if(!n)return;var v=$.fieldValue(this,successful);if(v&&v.constructor==Array){for(var i=0,max=v.length;i<max;i++)
a.push({name:n,value:v[i]});}
else if(v!==null&&typeof v!='undefined')
a.push({name:this.name,value:v});});return $.param(a);};$.fn.fieldValue=function(successful){for(var val=[],i=0,max=this.length;i<max;i++){var el=this[i];var v=$.fieldValue(el,successful);if(v===null||typeof v=='undefined'||(v.constructor==Array&&!v.length))
continue;v.constructor==Array?$.merge(val,v):val.push(v);}
return val;};$.fieldValue=function(el,successful){var n=el.name,t=el.type,tag=el.tagName.toLowerCase();if(typeof successful=='undefined')successful=true;if(successful&&(!n||el.disabled||t=='reset'||t=='button'||(t=='checkbox'||t=='radio')&&!el.checked||(t=='submit'||t=='image')&&el.form&&el.form.clk!=el||tag=='select'&&el.selectedIndex==-1))
return null;if(tag=='select'){var index=el.selectedIndex;if(index<0)return null;var a=[],ops=el.options;var one=(t=='select-one');var max=(one?index+1:ops.length);for(var i=(one?index:0);i<max;i++){var op=ops[i];if(op.selected){var v=op.value;if(!v)
v=(op.attributes&&op.attributes['value']&&!(op.attributes['value'].specified))?op.text:op.value;if(one)return v;a.push(v);}}
return a;}
return el.value;};$.fn.clearForm=function(){return this.each(function(){$('input,select,textarea',this).clearFields();});};$.fn.clearFields=$.fn.clearInputs=function(){return this.each(function(){var t=this.type,tag=this.tagName.toLowerCase();if(t=='text'||t=='password'||tag=='textarea')
this.value='';else if(t=='checkbox'||t=='radio')
this.checked=false;else if(tag=='select')
this.selectedIndex=-1;});};$.fn.resetForm=function(){return this.each(function(){if(typeof this.reset=='function'||(typeof this.reset=='object'&&!this.reset.nodeType))
this.reset();});};$.fn.enable=function(b){if(b==undefined)b=true;return this.each(function(){this.disabled=!b;});};$.fn.selected=function(select){if(select==undefined)select=true;return this.each(function(){var t=this.type;if(t=='checkbox'||t=='radio')
this.checked=select;else if(this.tagName.toLowerCase()=='option'){var $sel=$(this).parent('select');if(select&&$sel[0]&&$sel[0].type=='select-one'){$sel.find('option').selected(false);}
this.selected=select;}});};function log(){if($.fn.ajaxSubmit.debug&&window.console&&window.console.log)
window.console.log('[jquery.form] '+Array.prototype.join.call(arguments,''));};})(jQuery);var most_recent_tweet=[];$(document).ready(function(){load_champions();if($('#city').length>0){get_new_city_tweets();get_new_happo_tweets();}
$.ga("UA-10208886-6");});function get_new_city_tweets(){get_new_tweets('#city_query');}
function get_new_happo_tweets(){get_new_tweets('#happo_query');}
function get_new_tweets(feed_id){$.get(get_query_url(feed_id),{},function(data){var stream_id=feed_id+'_tweets';if('results'in data){if(data.results.length>0){most_recent_tweet[feed_id]=data.results[0].id;$(stream_id+'>.loading_message, '+stream_id+'>.no_tweets_message, '+stream_id+'>.error_message').fadeOut('fast',function(){$(this).remove();});for(i in data.results){$(stream_id).append("<li><a href='http://twitter.com/"+data.results[i].from_user+"'><img src='"+data.results[i].profile_image_url+"' alt='twitter user image' /></a><a href='http://twitter.com/"+data.results[i].from_user+"'>"+data.results[i].from_user+"</a> "+twitterize(data.results[i].text)+"<br /><span class='timestamp'>"+relative_time(data.results[i].created_at)+"</span></li>");}}else{if($(stream_id+'>.loading_message').length>0){$(stream_id+'>.loading_message, '+stream_id+'>.error_message').fadeOut('slow',function(){$(this).remove();});$(stream_id).append('<li class="no_tweets_message"><img src="/assets/img/message.png" alt="HAPPO message" />Sorry. We couldn\'t find any tweets in this category.</li>');}}}else{$(stream_id).append('<li class="error_message"><img src="/assets/img/message.png" alt="HAPPO message" />Sorry. We encountered an error while retrieving tweets from Twitter. We\'ll try again in a few seconds.</li>');}},"json");}
function get_query_url(feed_id){var query_url=$(feed_id).attr('href').replace('atom','json');if(feed_id in most_recent_tweet){query_url=query_url+'&since_id='+most_recent_tweet[feed_id];}
return query_url+'&callback=?';}
function twitterize(tweet){var link=/((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi;var atmentions=/[\@]+([A-Za-z0-9-_]+)/gi;var hashtags=/ [\#]+([A-Za-z0-9-_]+)/gi;tweet=tweet.replace(link,"<a href=\"$1\">$1</a>");tweet=tweet.replace(atmentions,"@<a href=\"http://twitter.com/$1\">$1</a>");tweet=tweet.replace(hashtags,' <a href="http://search.twitter.com/search?q=%23$1">#$1</a>');return tweet;}
function load_champions(){$('#champions>li').each(function(){insert_profile($(this).attr('id'));});}
function insert_profile(champion){var champion_id='#'+champion
$.get('http://api.twitter.com/1/users/show/'+champion+'.json?callback=?',{},function(data){if('id'in data){$('#champs').append('<h3><a href="http://twitter.com/'+data.screen_name+'">'+data.name+'</a></h3><img src="'+data.profile_image_url+'" alt="image of '+data.screen_name+'" /><p class="champ_info"><a href="http://twitter.com/'+data.screen_name+'">@'+data.screen_name+'</a></p><p class="champ_info"><a href="'+data.url+'">Website</a></p><p>'+data.description+'</p>');$(champion_id).fadeOut('slow').fadeIn('slow');}else{}},"json");}
function relative_time(time_value){var parsed_date=Date.parse(time_value);var relative_to=(arguments.length>1)?arguments[1]:new Date();var delta=parseInt((relative_to.getTime()-parsed_date)/1000);if(delta<60){return'less than a minute ago';}else if(delta<120){return'about a minute ago';}else if(delta<(45*60)){return(parseInt(delta/60)).toString()+' minutes ago';}else if(delta<(90*60)){return'about an hour ago';}else if(delta<(24*60*60)){return'about '+(parseInt(delta/3600)).toString()+' hours ago';}else if(delta<(48*60*60)){return'1 day ago';}else{return(parseInt(delta/86400)).toString()+' days ago';}}
