/**
 * @name	twfeed.js beta
 * @description	twitter fetching and processing js for search or regular api json
 * @see		http://www.clarkeology.com/m/12267/twfeed.js
 * @author	paulypopex+js+twitter@gmail.com
 * @date	27/02/09
 * @usage	<script type="text/javascript" src="http://www.popex.ukshells.co.uk/twfeed.js"></script>
 * @usage	+ <ul class="tw"></ul>
 * @usage	+ <link rel="tw" href="http://search.twitter.com/search.json?q=@pauly+OR+%23pauly" />
 */
var tw = {
	ul: 'ul.tw:last',
	r: 30,
	len: 20,
	l: function ( ) {
		if (	window.$ ) {
			$( function () {
				tw.get(true);
			} );
		}
		else {	document.write('<'+'script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></'+'script>');
			onload = function () {
				tw.get(true);
			};
		}
	},
	q: function ( u ) { return u.indexOf('?') == -1 ? '?' : '&'; },
	u: function ( n, na ) { n = n.substring(1); return '<'+'a href="http://twitter.com/'+n+'">'+(na?'':'@')+n+'<'+'/a>' },
	s: function ( w ) { w = w.substring(1); return '<'+'a href="http://search.twitter.com/search?q=%23'+w+'"><'+'u>'+w+'<'+'/u><'+'/a>' },
	p: function ( t ) { return t.replace( /((https?)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g, function(F){return'<'+'a href="'+F+'">'+F+'<'+'/a>'}).replace(/\B@\w+/g, tw.u ).replace(/\B\#[\w:]+/g, tw.s ) },
	filter: function ( m ) { return $(tw.ul+' #' + m.id).length },
	li: function ( m, r ) { return '<'+'li class="tw" id="' + m.id + '"><'+'b>' + tw.u( '@' + ( m.from_user || m.user.screenname ), 1 ) + '<'+'/b> ' + tw.p( m.text ) + ( r ? ( ' <'+'a href="' + r + tw.q( r ) + 'tw=' + m.id + '">reply<'+'/a>' ) : '' ) + '<'+'/li>' },
	get: function ( a ) {
		$(tw.ul).addClass('loading');
		var u = $('[rel=tw]').attr('href') || 'http://search.twitter.com/search.json?q=twitter';
		u += tw.q( u );
		u += 'callback=?';
		$.getJSON( u, function ( js ) { tw.go( js, a ) } );
	},
	go: function ( js, a ) {
		var ul = $(tw.ul);
		js = js.results || js;
		for ( var i = 0; i < js.length; i ++ ) {
			if (	! tw.filter( js[i] )) {
				var li = tw.li( js[i] );
				a ? ul.append(li) : $(li).hide().prependTo(ul).slideDown('slow');
			}
			( $('.tw',ul).length > tw.len ) && $('.tw:last',ul).slideUp().remove();
		}
		ul.removeClass('loading');
		setTimeout( tw.get, tw.r * 1000 );
	}
};
tw.l();
