
var ScrollableFeed={verticals:[],queue:[],data:[],sinceIds:{},rendered:false,paused:false,control_play:$('control_play'),control_pause:$('control_pause'),options:{host:"tweetsentiments.com",requestURL:"http://#{host}/#{vertical}/public.json?callback=ScrollableFeed.append&since_id=#{sinceId}",numEvents:10,sweepCounter:0,interval:3},init:function(verticals){this.container=$('feed');this.highlighter=new Element('div',{id:'feed-highlighter'}).update("&nbsp;").setStyle({width:(this.container.getWidth()-2)+'px'});this.verticals=verticals;this.sinceIds={};if(this.timeout){clearTimeout(this.timeout);this.timeout=null;}
this.control_play.onclick=function(){this.play();}.bind(this);this.control_pause.onclick=function(){this.pause();}.bind(this);this.fetch();},play:function(){if(!this.paused)return;this.control_play.style.display='none';this.control_pause.style.display='inline';this.paused=false;if(this.timeout)clearTimeout(this.timeout);this.timeout=setTimeout(this.next.bind(this),(this.options.interval*1000));},pause:function(){if(this.paused)return;this.control_pause.style.display='none';this.control_play.style.display='inline';this.paused=true;if(this.timeout)clearTimeout(this.timeout);},toggle:function(){if(this.paused){this.play();}
else{this.pause();}},fetch:function(){this.queue=[];this.verticals.each(function(vertical){var sinceId=this.sinceIds[vertical];if(!sinceId)sinceId=0;var url=this.options.requestURL.interpolate({vertical:vertical,host:this.options.host,sinceId:sinceId});this.queue.push(vertical);getJSON(url);}.bind(this));},append:function(data){this.queue=this.queue.without(data.vertical);this.data=this.data.concat(data.feed);this.sinceIds[data.vertical]=data.feed.max(function(e){return e.id;});if(this.queue.size()==0){this.data=this.data.sortBy(function(e){return new Date(e.createdAt);});if(!this.rendered)this.render();if(this.timeout)clearTimeout(this.timeout);this.timeout=setTimeout(this.next.bind(this),(this.options.interval*1000));}},next:function(){this.sweep();var event=this.data.shift();if(!event)return;var items=this.container.childElements();var first=items.first();var li=this.create(event,true).setStyle({marginTop:'-80px'});this.container.insert({top:li});if(Prototype.Browser.IE){first.className='feed-item';li.setStyle({marginTop:'0px'});}else{li.morph({marginTop:'0px'},{duration:.5,afterFinish:function(){first.className='feed-item';}});}
if(this.data.length==10)this.fetch();this.timeout=setTimeout(this.next.bind(this),(this.options.interval*1000));},sweep:function(){if(this.options.sweepCounter>0&&(this.options.sweepCounter%10==0)){var elements=this.container.select('.feed-item');elements.slice(10,elements.length).each(function(li){li.remove();});this.options.sweepCounter=0;}else{this.options.sweepCounter++;}},render:function(){var event;var i=0;while(event=this.data.shift()){if(i>=this.options.numEvents)break;var li=this.create(event);this.container.insert({top:li});i++;}
if(!this.rendered){this.container.down('li').addClassName('selected');this.container.insert(this.highlighter);this.rendered=true;}},create:function(event,selected){var li=new Element('li');li.className='feed-item';if(selected)li.addClassName('selected');li.innerHTML=event.body.gsub(/<a href="\/([^"]+)">/,function(match){return'<a href="http://'+event.vertical+'.'+this.options.host+'/'+match[1]+'">';}.bind(this));li.onclick=function(){this.toggle();}.bind(this);return li;}};(function(){var id=0,head=$$('head')[0],global=this;global.getJSON=function(url,callback){var script=document.createElement('script');script.src=url;script.onload=function(){script.remove();script=null;$('spinner_center').style.display='none';};head.appendChild(script);};})();