/**
 * twfeed.js beta - twitter fetching and processing js for search or regular api json
 * usage:
 *	<script type="text/javascript" src="http://www.popex.ukshells.co.uk/twfeed.js"></script>
 *	<ul class="tw"></ul>
 * 	<link rel="tw" href="http://search.twitter.com/search.json?q=@pauly+OR+%23pauly" />
 *
 * Includes jquery if not present, probably unnecessarily.
 * I wonder about searching for documentation on twitter by default?
 *
 * @see		http://www.clarkeology.com/m/12267/twfeed.js
 * @author	paulypopex+js+twitter@gmail.com
 * @date	27/02/09
 */

var tw = {
	ul: 'ul.tw:last',
	r: 30,
	len: 6,
	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 ) }, /* from twitter's blogger.js */
	filter: function ( m ) { return $(tw.ul+' #' + m.id).length },
	li: function ( m ) { return '<'+'li class="tw" id="' + m.id + '"><'+'b>' + tw.u( '@' + ( m.from_user || m.user.screenname ), 1 ) + '<'+'/b> ' + tw.p( m.text ) + '<'+'/li>' },
	get: function ( a ) {
		$(tw.ul).addClass('loading');
		var u = $('[rel=tw]').attr('href') || 'http://search.twitter.com/search.json?q=twfeed';
		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();

