var Coolumns=new Class({Implements:[Events,Options],options:{fUrl:'f.php',tUrl:'t.php',profileUrl:'http://twitter.com/',profileImageSwitch:['_mini.','_normal.'],screennameRegex:'[a-zA-Z0-9_]+'},initialize:function(options){this.setOptions(options);this.el=$('coolumns');this.fCache={};this.initEvents();if(Browser.Platform.ipod)this.enableSwipe();this.smallScreen=window.getSize().x<=480;if(this.smallScreen)document.body.addClass('small-screen');this.windowScroll=new Fx.Scroll(window,{'transition':'expo:out'});this.screennameInput=$('screenname');if(!this.screennameInput)return;this.screennameInput.set('disabled',false).addEvent('keyup',function(e){if(e.key=='enter')this.goButton.fireEvent('click');}.bind(this));this.screennameInput.focus();this.goButton=this.el.getElement('.go-button');if(!this.goButton)return;this.goButton.set('disabled',false).addEvent('click',function(){this.screenname=this.screennameInput.get('value').trim();if(this.screenname){if(this.screenname.test(this.options.screennameRegex,'i')){goLoading.fade('show');$$(this.goButton,this.screennameInput).set('disabled',true);this.addCol('f',this.goButton.getParent('.col'),{'screenname':this.screenname},function(){this.screennameInput.set('disabled',false);this.goButton.set('disabled',false);goLoading.fade('hide');document.location.hash=this.screenname;}.bind(this));}
else if(this.screenname=='...'){this.addCol('d',this.goButton.getParent('.col'));}
else{alert('Invalid screenname.');}}}.bind(this));var goLoading=new Element('span',{'class':'go-load'}).inject(this.screennameInput,'before');var screenname=document.location.hash.slice(1);if(screenname)this.screennameInput.set('value',screenname);},addCol:function(type,col,info,fn){var self=this;var newCol=new Element('div',{'class':'col'});var slide=$empty;if(!this.smallScreen){var nextCols=col.getAllNext('.col').set('morph',{'transition':'expo:in',onComplete:function(){nextCols.destroy();}}).morph({'width':0,'left':col.getCoordinates().right,'opacity':0});var dummyCol=new Element('div',{'class':'dummy-col','styles':{left:col.getCoordinates().right}}).inject(col,'after').tween('width',320);newCol.set({'styles':{left:col.getCoordinates().right,width:0},'tween':{'duration':'short','transition':'expo:out',onComplete:function(){dummyCol.destroy();self.windowScroll.toElement(newCol);}}});slide=function(){newCol.tween('width',319);}}
else{col.set('tween',{'unit':'%','duration':1050,onComplete:function(){col.setStyle('display','none');document.body.setStyle('overflow','auto');}}).getAllNext('.col').destroy();col.getElement('.next').setStyle('display','none');newCol.set({'styles':{left:'100%','min-height':col.getSize().y},'tween':{'unit':'%','duration':1000}});slide=function(){document.body.setStyle('overflow','hidden');self.windowScroll.toTop();self.showHideNext(newCol);col.tween('left','-100%');newCol.tween('left',0);}}
var html='<div class="nav"><a href="#" class="prev">Prev</a><span class="title"></span><a href="#" class="next">Next</a></div>';switch(type){case'f':var genContent=function(data){self.fCache[info.screenname]=data;switch(data){case undefined:case null:case'none':html+='<div class="section"><h2>No friends or followers. Oh my.</h2></div>';newCol.addClass('col-content');break;case'notfound':html+='<div class="section"><h2>Oops. I couldn\'t find this guy! (or girl)</h2></div>';newCol.addClass('col-content');break;case'notauth':html+='<div class="section"><h2>Stop. Not authorized.</h2></div>';newCol.addClass('col-content');break;case'exceeded':html+='<div class="section"><h2>Ugh, request limit exceeded. Please try again in the next few minutes or hours.</h2></div>';newCol.addClass('col-content');break;default:var selectedNames=$$('.selected').get('text');selectedNames.push(self.screenname);var prevListNames=[];if(col.hasClass('col-list'))prevListNames=$$('.f').get('text');html+='<ul>';var type={'0':0,'1':0,'2':0};data.each(function(item){type[item.type]++;});html+='<li class="stats">'+'<span class="f3" title="total">'+data.length+'</span>'+'<span class="f1" title="followers">'+type['1']+'</span>'+'<span class="f2" title="friends">'+type['2']+'</span>'+'<span class="f0" title="followings">'+type['0']+'</span></li>';data.each(function(item){var p=(item.protected)?'protected':'';var w=selectedNames.contains(item.screen_name)?'was-selected':'';var l=prevListNames.contains(item.screen_name)?'was-listed':'';item.classes=w+' '+l+' '+p;var temphtml='<li><a class="f-{screen_name} type-{type} {classes} f" title="{name}">'+'<span style="background-image: url({profile_image_url})" class="t-{screen_name} t"></span>'+'{screen_name}</a>'+'</li>';html+=temphtml.substitute(item);});html+='</ul>';newCol.addClass('col-list');}
newCol.set('html',html).inject(col,'after')
.getElement('.title').set('text',info.screenname);newCol.store('f-list',data);slide();fn.attempt();}
if(this.fCache[info.screenname])genContent(this.fCache[info.screenname]);else{if(this.currentAjax)this.currentAjax.cancel();this.currentAjax=new Request.JSON({url:this.options.fUrl,onSuccess:genContent}).get({'u':info.screenname});}
break;case't':if(this.currentAjax)this.currentAjax.cancel();this.currentAjax=new Request.JSON({url:this.options.tUrl,onSuccess:function(data){var topbarHtml='<div class="topbar">'+'<img src="{profile_image_url}" class="type-{type}" />'+'<h2>{name}</h2>'+'<a href="{profile_url}">{screenname}</a>'+'</div>';html+=topbarHtml.substitute(info);switch(data){case'none':html+='<div class="section"><h2>No tweets...?</h2></div>';break;default:html+='<ul class="t-list">';data.each(function(item){var temphtml='<li id="tweet-{id}">'+'<p>{text} <a href="{permalink}" title="{created_at}">{created_since}</a></p>'+'</li>';html+=temphtml.substitute(item);});html+='</ul><p>&nbsp;</p>';}
newCol.addClass('col-content').set('html',html).inject(col,'after')
.getElement('.title').set('text',info.screenname+'\'s timeline');newCol.getElements('a[href]').set('target','_blank');slide();fn.attempt();}}).get({'u':info.screenname});break;case'd':if($random(0,1)==0){html+='<div class="section"><h2>Developer Mode.</h2>'+'<p><a href="#">New col.</a></p>'+'</div>';newCol.addClass('col-content');}
else{html+='<ul>'+'<li><a class="type-0" href="#"><span class="t"></span>New col.</a></li>'+'<li><a class="type-1" href="#"><span class="t"></span>New col.</a></li>'+'<li><a class="type-2" href="#"><span class="t"></span>New col.</a></li>'+'</ul>';newCol.addClass('col-list');}
newCol.set('html',html).inject(col,'after')
.getElement('.title').set('text','Developer Mode');newCol.getElements('.nav+* a').addEvent('click',function(e){e.stop();self.addCol('d',newCol);});slide();break;}
self.showSelected();return this;},showSelected:function(){var docHeight=document.body.getSize().y
$$('.selected').each(function(el){var elPos=el.getPosition().y;if(elPos<0||elPos>docHeight)
new Fx.Scroll(el.getParent('.col'),{'duration':'long','transition':'expo:out'}).toElement(el);});},showHideNext:function(col){col.getElement('.next').setStyle('display',col.getNext('.col')?'block':'none');},slideCols:function(step,col){var self=this;var sideCol=(step=='prev')?col.getPrevious('.col'):col.getNext('.col');if(sideCol){document.body.setStyle('overflow','hidden');col.set('tween',{'unit':'%','duration':1050,onComplete:function(){col.setStyle('display','none');document.body.setStyle('overflow','auto');var selected=sideCol.getElements('.selected, .tselected')[0];(selected)?self.windowScroll.toElement(selected):self.windowScroll.toTop();}});sideCol.set('tween',{'unit':'%','duration':1000});col.tween('left',(step=='prev')?'100%':'-100%');sideCol.setStyle('display','block').tween('left',0);this.showHideNext(sideCol);}},initEvents:function(){var self=this;window.addEvent('resize',function(){var prevSmallScreen=self.smallScreen;self.smallScreen=window.getSize().x<=480;if(!prevSmallScreen&&self.smallScreen){document.body.addClass('small-screen');var cols=$$('.col');cols.filter(':not(:last-child)').setStyles({left:'-100%',display:'none'});var lastCol=cols.getLast().setStyle('left',0);self.showHideNext(lastCol);}
else if(prevSmallScreen&&!self.smallScreen){document.body.removeClass('small-screen');$$('.col').each(function(el,i){el.setStyles({left:i*320,display:'block'});});}});document.addEvents({'click':function(e){var el=e.target;if(el.hasClass('f')){e.stop();var elParent=el.getParent('.col');var prevParent=elParent.getPrevious('.col');if(!self.smallScreen&&prevParent)self.windowScroll.toElement(prevParent);if(!el.hasClass('selected')){elParent.getElements('.selected').removeClass('selected');elParent.getElements('.loading').removeClass('loading');elParent.getElements('.tselected').removeClass('tselected');el.addClass('selected loading');self.addCol('f',elParent,{'screenname':el.get('text')},function(){el.removeClass('loading');});}
else if(self.smallScreen){elParent.getElement('.next').fireEvent('click');}}
else if(el.hasClass('t')){e.stop();var elParent=el.getParent('.col');var prevParent=elParent.getPrevious('.col');if(!self.smallScreen&&prevParent)self.windowScroll.toElement(prevParent);var elF=el.getParent('.f');if(!elF.hasClass('tselected')){var profileImage=el.getStyle('background-image').replace('url(','').replace(')','');var profileImageUrl=(self.options.profileImageSwitch.length)?profileImage.replace(self.options.profileImageSwitch[0],self.options.profileImageSwitch[1]):profileImage;var data={'screenname':elF.get('text'),'name':elF.get('title'),'profile_image_url':profileImageUrl,'profile_url':self.options.profileUrl+elF.get('text'),'type':elF.hasClass('type-0')?0:elF.hasClass('type-1')?1:2}
elParent.getElements('.selected').removeClass('selected');elParent.getElements('.loading').removeClass('loading');elParent.getElements('.tselected').removeClass('tselected');elF.addClass('tselected');el.addClass('loading');self.addCol('t',elParent,data,function(){el.removeClass('loading');});}
else if(self.smallScreen){self.slideCols('next',elParent);}}
else if(el.hasClass('filter')||el.getParent('.filter')){e.stop();if(el.getParent('.filter'))el=el.getParent('.filter');el.getChildren('span').toggleClass('check');document.body.toggleClass('dont-'+el.id);}
else if(el.hasClass('prev')){e.stop();self.slideCols('prev',el.getParent('.col'));}
else if(el.hasClass('next')){e.stop();self.slideCols('next',el.getParent('.col'));}},'mousewheel':function(e){if(e.shift){e.stop();var distance=320;var x=window.getScroll().x+((e.wheel<0)?distance:-distance);self.windowScroll.start(x,0);}}});},enableSwipe:function(){var startX,startY,endX,endY;var moved=false;var distance=150;var self=this;function touchStart(e){startX=e.touches[0].pageX;}
function touchEnd(e){endX=e.changedTouches[0].pageX;var el=e.changedTouches[0].target;if($type(el)=='textnode')el=el.parentNode;var col=el.hasClass('col')?el:el.getParent('.col');if(startX-endX>distance)
self.slideCols('prev',col);else if(startX-endX<-distance)
self.slideCols('next',col);}
document.addListener('touchstart',touchStart).addListener('touchend',touchEnd);}});window.addEvent('domready',function(){var coo=new Coolumns();});
