$(function() {
	var TwitterFeed = function(selector, searchstring, timeout) {
	    if($(selector).length == 0) { return; }
		var pagesize = 19;
		var maxpage = 20;
		var thispage = 1;
		var latestResult;
		var ulElement = $(selector);
		var timer;
		
		this.getTimer = function() {
			return timer;
		}
		
		this.getLatestResult = function() {
			return latestResult;
		}
		
		var search = function() {
			var searchUrl;			
			if(!latestResult || !latestResult.next_page || thispage >= maxpage) {
				searchUrl = 'http://search.twitter.com/search.json?rpp=' + pagesize + '&q=' + escape(searchstring) + '&callback=?';
				thispage = 1;
			} else {
				searchUrl = 'http://search.twitter.com/search.json' + latestResult.next_page + '&callback=?';
				thispage++;
			}
			jQuery.getJSON(searchUrl, display);
		};
		
		var display = function(data, textStatus) {
			latestResult = data;
			ulElement.empty();

			if(!data.results || data.results.length == 0) {
				ulElement.append('<li>No tweets on <a href="http://twitter.com/search?q=' + escape(searchstring) + '">' + searchstring + '</a></li>');
				thispage = maxpage;
			} else {
			
			
				var tweets = '';
				$.each(data.results, function() {
					this.text = httpLinks(this.text);
					this.text = atLinks(this.text);
					this.text = hashTags(this.text);
					tweets += '<li>' + '<a class="username" href="http://twitter.com/' + this.from_user + '">' + this.from_user + '</a> said: ' + this.text + ' <span class="time">(' + getTimeString(this.created_at) + ')</span>' + '</li>';
				});
				ulElement.append(tweets);
				$('#tweetslider').tinycarousel({ axis: 'y', display: 1, interval: true, intervaltime: 15000, animation: true });
			}
			//timer = setTimeout(search, timeout);
		};
		search();
		
		var getTimeString = function(created_at) {
			var tweetDateString;
            var delta = parseInt((new Date().getTime() - new Date(created_at).getTime()) / 1000);
            if (delta < 60) {
                tweetDateString = 'less than a minute ago';
            }
            else 
                if (delta < 120) {
                    tweetDateString = 'about a minute ago';
                }
                else 
                    if (delta < (45 * 60)) {
                        tweetDateString = (parseInt(delta / 60)).toString() + ' minutes ago';
                    }
                    else 
                        if (delta < (90 * 60)) {
                            tweetDateString = 'about an hour ago';
                        }
                        else 
                            if (delta < (24 * 60 * 60)) {
                                tweetDateString = 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';
                            }
                            else 
                                if (delta < (48 * 60 * 60)) {
                                    tweetDateString = '1 day ago';
                                }
                                else {
                                    tweetDateString = (parseInt(delta / 86400)).toString() + ' days ago';
                                }
			return tweetDateString;
		};
		
		var hashTags = function(tweet) {
			var regex = /(#([a-zA-Z0-9]*))/g;
			return linkReplacement(tweet, regex, 'http://twitter.com/search?q=%23');
		}

		var atLinks = function(tweet) {
			var regex = /(@([a-zA-Z0-9]*))/g;
			return linkReplacement(tweet, regex, 'http://twitter.com/search?q=%40');
		}

		var httpLinks = function(tweet) {
			var regex = /((http:\/\/[a-zA-Z0-9.\/&?%-_]*))/g;
			return linkReplacement(tweet, regex, '');
		}
		
		var linkReplacement = function(tweet, regex, prepend) {
			prepend = prepend || '';
			return tweet.replace(regex, '<a href="' + prepend + '$2">$1</a>');
		}

		
	}
	
	var asidetwitterfeed = new TwitterFeed('#aside-tweets', asidetwitterfeedhash, 10000);
});

$().ready(function()
{
  
});

(function($){$.fn.tinycarousel=function(options){var defaults={start:1,display:1,axis:'x',controls:true,pager:false,interval:false,intervaltime:3000,animation:true,duration:1000,callback:null};var options=$.extend(defaults,options);var oSlider=$(this);var oViewport=$('.viewport',oSlider);var oContent=$('.overview',oSlider);var oPages=oContent.children();var oBtnNext=$('.next',oSlider);var oBtnPrev=$('.prev',oSlider);var oPager=$('.pager',oSlider);var iPageSize,iSteps,iCurrent,oTimer,bForward=true,bAxis=options.axis=='x';return this.each(function(){initialize();});function initialize(){iPageSize=bAxis?$(oPages[0]).outerWidth(true):$(oPages[0]).outerHeight(true);var iLeftover=Math.ceil(((bAxis?oViewport.outerWidth():oViewport.outerHeight())/(iPageSize*options.display))-1);iSteps=Math.max(1,Math.ceil(oPages.length/options.display)-iLeftover);iCurrent=Math.min(iSteps,Math.max(1,options.start))-2;oContent.css(bAxis?'width':'height',(iPageSize*oPages.length));move(1);setEvents();}
function setButtons(){if(options.controls){oBtnPrev.toggleClass('disable',!(iCurrent>0));oBtnNext.toggleClass('disable',!(iCurrent+1<iSteps));}}
function setEvents(){if(options.controls&&oBtnPrev.length>0&&oBtnNext.length>0){oBtnPrev.click(function(){move(-1);return false;});oBtnNext.click(function(){move(1);return false;});}if(options.pager&&oPager.length>0){oPager.click(setPager);}}
function setPager(oEvent){var oTarget=oEvent.target;if($(oTarget).hasClass('pagenum')){iCurrent=parseInt(oTarget.rel)-1;move(1);}return false;}
function setPagerActive(){if(options.pager){var oNumbers=$('.pagenum',oPager);oNumbers.removeClass('active');$(oNumbers[iCurrent]).addClass('active');}}
function setTimer(bReset){if(options.interval&&!bReset){clearInterval(oTimer);oTimer=window.setInterval(function(){bForward=iCurrent+1==iSteps?false:iCurrent==0?true:bForward;move(bForward?1:-1,true);},options.intervaltime);}}
function move(iDirection,bTimerReset){if(iCurrent+iDirection>-1&&iCurrent+iDirection<iSteps){iCurrent+=iDirection;var oPosition={};oPosition[bAxis?'left':'top']=-(iCurrent*(iPageSize*options.display));oContent.animate(oPosition,{queue:false,duration:options.animation?options.duration:0,complete:function(){if(typeof options.callback=='function')options.callback.call(this,oPages[iCurrent],iCurrent);}});setButtons();setPagerActive();setTimer(bTimerReset);}}};})(jQuery);
