function tn_urlencode(str) {
str = escape(str);

str = str.replace(/\+/g, '%2B');
str = str.replace(/%20/g, '+');
str = str.replace(/\*/g, '%2A');
str = str.replace(/\//g, '%2F');
str = str.replace(/@/g, '%40');
str = str.replace(/#/g, '%23');
return str;
}


var __d = function(msg) {
  if (document.getElementById("tn_debug")) {
	document.getElementById("tn_debug").innerHTML = document.getElementById("tn_debug").innerHTML + "<br>" + msg;
	document.getElementById("tn_debug").scrollTop = document.getElementById("tn_debug").scrollHeight;
  }
}

var tn_getdatediff = function (now_ms, gmt)
{
  var dt_ms = Date.parse(gmt);

  var delta = now_ms - dt_ms;
  delta = Math.floor(delta / 1000);  // turn into seconds

  if (delta > 86400) {
    return '' + Math.floor(delta/86400) + ' days ago';
  } else if (delta > 3600) {
    return '' + Math.floor(delta/3600) + ' hours ' + Math.floor(delta/60) + ' minutes ago';
  } else if (delta > 60) {
    return '' + Math.floor(delta/60) + ' minutes ' + (delta % 60) + ' seconds ago';
  } else { // seconds
    return '' + (delta % 60) + ' seconds ago';
  }

}

var tn_cleanup = function () 
{
  if (tn_widget_refresh_interval > 0) {
    clearTimeout(tn_settings[tn_curidx]['tn_timer']);
	tn_settings[tn_curidx]['tn_timer'] = setTimeout("tn_refresh_clbk(" + tn_curidx + ");", (tn_widget_refresh_interval * 1000) + Math.floor(Math.random() * 2000));
  }
  tn_widget_refresh_interval='';
  tn_divname='';
  tn_width='';tn_height='';tn_scroll='';tn_widget_background='';tn_widget_border='';tn_tweet_textcolor='';tn_tweet_linkcolor='';tn_tweet_background='';tn_tweet_border='';tn_tweet_margin='';tn_tweet_fontsize='';tn_tweet_lang='';tn_hide_img='';tn_num_tweets='';tn_search='';tn_pre_html='';tn_post_html='';tn_mid_html='';tn_center_widget='';
  tn_tweet_newbackground='';
  tn_lastsearch='';
  __d(tn_curidx + " RELEASED the lock...");
  tn_lock = -1;
}

var tn_searchfunc_pre1 = function(arr){var x = 1;	if (x != tn_lock) {__d(x + ": i don't have the lock! aborting!!");return false;}tn_searchfunc(arr);}
var tn_searchfunc_pre2 = function(arr){var x = 2;	if (x != tn_lock) {__d(x + ": i don't have the lock! aborting!!");return false;}tn_searchfunc(arr);}
var tn_searchfunc_pre3 = function(arr){var x = 3;	if (x != tn_lock) {__d(x + ": i don't have the lock! aborting!!");return false;}tn_searchfunc(arr);}
var tn_searchfunc_pre4 = function(arr){var x = 4;	if (x != tn_lock) {__d(x + ": i don't have the lock! aborting!!");return false;}tn_searchfunc(arr);}
var tn_searchfunc_pre5 = function(arr){var x = 5;	if (x != tn_lock) {__d(x + ": i don't have the lock! aborting!!");return false;}tn_searchfunc(arr);}
var tn_searchfunc_pre6 = function(arr){var x = 6;	if (x != tn_lock) {__d(x + ": i don't have the lock! aborting!!");return false;}tn_searchfunc(arr);}
var tn_searchfunc_pre7 = function(arr){var x = 7;	if (x != tn_lock) {__d(x + ": i don't have the lock! aborting!!");return false;}tn_searchfunc(arr);}
var tn_searchfunc_pre8 = function(arr){var x = 8;	if (x != tn_lock) {__d(x + ": i don't have the lock! aborting!!");return false;}tn_searchfunc(arr);}
var tn_searchfunc_pre9 = function(arr){var x = 9;	if (x != tn_lock) {__d(x + ": i don't have the lock! aborting!!");return false;}tn_searchfunc(arr);}
var tn_searchfunc_pre10 = function(arr){var x = 10;	if (x != tn_lock) {__d(x + ": i don't have the lock! aborting!!");return false;}tn_searchfunc(arr);}


var tn_searchfunc = function (arr) 
{

  //if (tn_lock == -1) {
  //  __d("!!!!> lock was FORCIBLY unlocked, aborting...");
  //	return false;
  //}  
  
  
  
//__d(tn_curidx + " entering SEARCHFUNC...");
  clearTimeout(tn_lock_timeout_timer);
  var ret = tn_pre_html;
  var i = 0;
  var bg;
  var wasnew = 0;
//
  var now = new Date();
  var now_ms = now.getTime();
//  
  if ((!arr || !arr.results[0]) && tn_settings[tn_curidx]['tn_lastid'] == 0) {document.getElementById(tn_divname).innerHTML='0 Results to display.  Enter new search terms.';tn_cleanup(); return false;}
  if ((!arr || !arr.results[0]) && (tn_lastsearch == tn_search)) {__d(tn_curidx + " --no new tweets--"); tn_cleanup(); return false;}
  ret = ret + '<div style="color:' + tn_tweet_textcolor + ';padding:0px 5px 0px 5px;' + tn_results_style_misc + '">';

  var num_newtweets;
  if (!arr || !arr.results[0]) {
	num_newtweets = 0;
  } else {
	num_newtweets = arr.results.length;
}
  var newptr = (tn_settings[tn_curidx]['tn_ringptr'] - num_newtweets + 100) % 100;
  tn_settings[tn_curidx]['tn_ringptr'] = newptr;
  __d(tn_curidx + " num_newtweets " + num_newtweets);
  __d(tn_curidx + " newptr " + newptr);
  for (i = 0; i < num_newtweets; i++) {
	tn_settings[tn_curidx]['tn_tweets'][(newptr + i) % 100] = new Array(6);
	tn_settings[tn_curidx]['tn_tweets'][(newptr + i) % 100]['user'] = arr.results[i].from_user;
	tn_settings[tn_curidx]['tn_tweets'][(newptr + i) % 100]['tweet'] = arr.results[i].text;
	//tn_settings[tn_curidx]['tn_tweets'][(newptr + i) % 100]['tstamp'] = arr.results[i].created_at;
	tn_settings[tn_curidx]['tn_tweets'][(newptr + i) % 100]['tstamp'] = new Date(arr.results[i].created_at);
	tn_settings[tn_curidx]['tn_tweets'][(newptr + i) % 100]['tstamp'] = tn_settings[tn_curidx]['tn_tweets'][(newptr + i) % 100]['tstamp'].toLocaleString();
	tn_settings[tn_curidx]['tn_tweets'][(newptr + i) % 100]['img'] = arr.results[i].profile_image_url;
	tn_settings[tn_curidx]['tn_tweets'][(newptr + i) % 100]['id'] = arr.results[i].id;
	tn_settings[tn_curidx]['tn_tweets'][(newptr + i) % 100]['search'] = tn_search;
  }
  for (i = 0; i < tn_num_tweets; i++) {
	if (!tn_settings[tn_curidx]['tn_tweets'][(newptr + i) % 100] || tn_settings[tn_curidx]['tn_tweets'][(newptr + i) % 100]['search'] != tn_search) break;
    var user =   tn_settings[tn_curidx]['tn_tweets'][(newptr + i) % 100]['user'];
    var tweet =  tn_settings[tn_curidx]['tn_tweets'][(newptr + i) % 100]['tweet'];
    var tstamp = tn_settings[tn_curidx]['tn_tweets'][(newptr + i) % 100]['tstamp'];
    var img =    tn_settings[tn_curidx]['tn_tweets'][(newptr + i) % 100]['img'];
	var tid =    tn_settings[tn_curidx]['tn_tweets'][(newptr + i) % 100]['id'];

	if (tid > tn_settings[tn_curidx]['tn_lastid'] && tn_settings[tn_curidx]['tn_lastid'] != 0) {bg = tn_tweet_newbackground; wasnew = 1;} else {bg = tn_tweet_background}
	//tstamp = tstamp.substr(0, tstamp.length-5) + " GMT";
	//var re = new RegExp("(([a-zA-Z]+:\/\/)([a-z][a-z0-9_\.-]*[a-z]{2,6})([a-zA-Z0-9#\/*-_\?&%]*))", "g");
	//var re = new RegExp("(([a-zA-Z]+:\/\/)([a-z][a-z0-9_\.-]*[a-z]{2,6})([a-zA-Z0-9#\/*-_\?&%]*))[\.]*", "g");
	var re = new RegExp("(([a-zA-Z]+:\/\/)([a-zA-Z][a-zA-Z0-9_\.-]*[a-zA-Z]{2,6})([a-zA-Z0-9~\#\/\._\?\&%-=]*[a-zA-Z0-9~\#\/_\?\&%-=]))", "g");
	tweet = tweet.replace(re, '<a style="' + tn_tweet_linkcolor + 'text-decoration:none;" target="_new" href=$1 >$1</a>');
	re = new RegExp("@([a-zA-Z0-9_]+)", "g");
	tweet = tweet.replace(re, '@<a style="' + tn_tweet_linkcolor + 'text-decoration:none;" target="_new" href=http://twitter.com/$1>$1</a>');
        tweet = tweet.replace(/&/g, '&');
    ret = ret + '<div align="left" style="background:' + bg + ';font-size:' + tn_tweet_fontsize + ';border:' + tn_tweet_border + ';padding:2px;margin:' + tn_tweet_margin + ';' + tn_tweet_style_misc;
	if (tid > tn_settings[tn_curidx]['tn_lastid'] && tn_settings[tn_curidx]['tn_lastid'] != 0 && typeof(jQuery) == 'function' && typeof($) == 'function') 
	    {ret = ret + 'display:none;';}
	ret = ret + '" ';
	if (tid > tn_settings[tn_curidx]['tn_lastid'] && tn_settings[tn_curidx]['tn_lastid'] != 0)
    	{ret = ret + ' class="tn_new_tweet" ';}
	ret = ret + '>';
	if (!tn_hide_img) {ret = ret + '<img src=' + img + ' height=' + tn_img_size + ' width=' + tn_img_size + ' align=left style="padding:2px;">';}
	ret = ret + '<b><a style="' + tn_tweet_linkcolor + 'text-decoration:none;" target="_new" href=http://twitter.com/' + user + '>' + user + '</a></b>: ' + tweet + '<br><span class="tn_tstamp" style="font-size:10px;">' + tstamp; //+ tn_getdatediff(now_ms, tstamp); //+ tstamp;
	ret = ret + '</span>';
	re = new RegExp("(http://twitpic.com/)([0-9a-zA-Z]*)");
	var m = re.exec(tweet);
	if  (!m || m.length == 0 || m[2] == "photos" || m[2] == "photo" || m[2] == "tag") {} else {ret = ret + '<center><a href="http://twitpic.com/' + m[2] + '" target="_blank"><img src="http://twitpic.com/show/thumb/' + m[2] + '" border=0 height=150 width=150></a></center>';}	
	ret = ret + '</div>';
	//if (i < arr.results.length - 1) ret = ret + tn_mid_html;
	if (i < tn_num_tweets - 1) ret = ret + tn_mid_html;
  }
  ret = ret + tn_post_html;
  ret = ret + '';
  //ret = ret + '<div style="position:absolute;bottom:0px;width:100%;background:#000;height:18px;color:#fff;">hello</div>';
  ret = ret + '</div>';
  tn_settings[tn_curidx]['tn_lastid'] = (arr.results[0] ? arr.results[0].id : tn_settings[tn_curidx]['tn_lastid']);
  tn_settings[tn_curidx]['tn_lastsearch'] = (wasnew ? '' : tn_search);
  
  document.getElementById(tn_divname).innerHTML = ret;
  //if (typeof(jQuery) == 'function') {$('#'+tn_divname+' .tn_new_tweet').hide(1,function(){$(this).slideDown("slow");});}
  //if (typeof(jQuery) == 'function') {$('#'+tn_divname+' .tn_new_tweet').hide(1,function(){$(this).fadeIn("slow");});}
  if (typeof(jQuery) == 'function' && typeof($) == 'function') {$('#'+tn_divname+' .tn_new_tweet').fadeIn("slow");}
  tn_cleanup();
}

tn_refresh_clbk = function(i) {

	if (tn_lock != -1) {
		if (tn_lock == i) {
			__d(i + ": trying to double lock!! aborting...");
			return false;
		}	
__d(i + ": " + tn_lock + " already has lock, backing off...");
	setTimeout("tn_refresh_clbk(" + i + ");", 1000 + Math.floor(Math.random() * 1000));
		return false;
	}
__d(i + " GRABBED lock...");	
	tn_lock = i;
	tn_lock_timeout_timer = setTimeout("tn_lock_timeout(" + i + ");", 6500);
	if (tn_lock != i) {
		setTimeout("tn_refresh_clbk(" + i + ");", 1000 + Math.floor(Math.random() * 1000));
		return false;
	}
	tn_divname = tn_settings[i]['tn_divname'];
	tn_curidx = tn_settings[i]['tn_curidx'];
	tn_width = tn_settings[i]['tn_width'];
	tn_height = tn_settings[i]['tn_height'];
	tn_scroll = tn_settings[i]['tn_scroll'];
	tn_widget_background = tn_settings[i]['tn_widget_background'];
	tn_widget_border = tn_settings[i]['tn_widget_border'];
	tn_widget_refresh_interval = tn_settings[i]['tn_widget_refresh_interval'];
	tn_tweet_textcolor = tn_settings[i]['tn_tweet_textcolor'];
	tn_tweet_linkcolor = tn_settings[i]['tn_tweet_linkcolor'];
	tn_tweet_background = tn_settings[i]['tn_tweet_background'];
	tn_tweet_newbackground = tn_settings[i]['tn_tweet_newbackground'];
	tn_tweet_border = tn_settings[i]['tn_tweet_border'];
	tn_tweet_margin = tn_settings[i]['tn_tweet_margin'];
	tn_tweet_fontsize = tn_settings[i]['tn_tweet_fontsize'];
	tn_tweet_lang = tn_settings[i]['tn_tweet_lang'];
	tn_hide_img = tn_settings[i]['tn_hide_img'];
	tn_big_img = tn_settings[i]['tn_big_img'];
	tn_img_size = tn_settings[i]['tn_img_size'];
	tn_num_tweets = tn_settings[i]['tn_num_tweets'];
	tn_search = tn_settings[i]['tn_search'];
	tn_lastsearch = tn_settings[i]['tn_lastsearch'];
	tn_pre_html = tn_settings[i]['tn_pre_html'];
	tn_post_html = tn_settings[i]['tn_post_html'];
	tn_mid_html = tn_settings[i]['tn_mid_html'];
	tn_center_widget = tn_settings[i]['tn_center_widget'];
	tn_widget_style_misc = tn_settings[i]['tn_widget_style_misc'];
	tn_results_style_misc = tn_settings[i]['tn_results_style_misc'];
	tn_tweet_style_misc = tn_settings[i]['tn_tweet_style_misc'];
	tn_lastid = tn_settings[i]['tn_lastid'];
	if (tn_lock != i) {
__d(i + " failed 2nd lock check..." + tn_lock + " has it...");	
		setTimeout("tn_refresh_clbk(" + i + ");", 1000 + Math.floor(Math.random() * 1000));
		return false;
	}
__d(i + " lastid is " + tn_settings[i].tn_lastid);
	var sc = document.createElement('script');
	var h = document.getElementsByTagName('head')[0];
	sc.language = 'javascript';
	sc.type = 'text/javascript';
	//sc.src = 'http://search.twitter.com/search.json?callback=tn_searchfunc&' + tn_tweet_lang + 'q=' + tn_urlencode(tn_search) + '&rpp=' + tn_num_tweets + '&since_id=' + tn_settings[i].tn_lastid + '&rand=' + Math.floor(Math.random() * 10000000);
	sc.src = 'http://search.twitter.com/search.json?callback=tn_searchfunc_pre'+ tn_curidx + '&' + tn_tweet_lang + 'q=' + tn_urlencode(tn_search) + '&rpp=' + tn_num_tweets + '&since_id=' + tn_settings[i].tn_lastid + '&rand=' + Math.floor(Math.random() * 10000000);
	h.appendChild(sc);
}

function tn_lock_timeout(i) {
__d("!!! forcing UNLOCK for " + i + "");
	tn_cleanup();


}

var tn_idx;
var tn_curidx;
var tn_lock;
var tn_lock_timeout_timer;
var tn_settings;
var tn_divname;
var tn_width;
var tn_height;
var tn_scroll;
var tn_widget_background;
var tn_widget_border;
var tn_widget_refresh_interval;
var tn_tweet_textcolor;
var tn_tweet_linkcolor;
var tn_tweet_background;
var tn_tweet_newbackground;
var tn_tweet_border;
var tn_tweet_margin;
var tn_tweet_fontsize;
var tn_tweet_lang;
var tn_hide_img;
var tn_big_img;
var tn_img_size;
var tn_num_tweets;
var tn_search;
var tn_lastsearch;
var tn_pre_html;
var tn_post_html;
var tn_mid_html;
var tn_center_widget;
var tn_widget_style_misc;
var tn_results_style_misc;
var tn_tweet_style_misc;
var tn_trk;
var _gat;

//set defaults;
if (!tn_settings) tn_settings = new Array(0);
if (!tn_idx) tn_idx = 0;
if (!tn_lock) tn_lock = -1;
if (!tn_divname)
	tn_divname = 'tn_widget';
if (!tn_width)
	tn_width = '300px';
if (!tn_height)
	tn_height = '400px';
if (!tn_scroll || tn_scroll == 'yes')
	tn_scroll = 'overflow:auto;';
else
	tn_scroll = '';
if (!tn_widget_background)
	tn_widget_background = '#fff';
if (!tn_widget_border)
	tn_widget_border = '0px solid #aaa';
if (!tn_widget_refresh_interval)
	tn_widget_refresh_interval = 10;
if (tn_widget_refresh_interval < 8 && tn_widget_refresh_interval != 0)
	tn_widget_refresh_interval = 8;
if (!tn_tweet_textcolor)
	tn_tweet_textcolor = '#000';
if (!tn_tweet_linkcolor)
	tn_tweet_linkcolor = 'color:#00f;';
else
	tn_tweet_linkcolor = 'color:' + tn_tweet_linkcolor + ';';
if (!tn_tweet_background)
	tn_tweet_background = '#f8f8f8';
if (!tn_tweet_newbackground)
	tn_tweet_newbackground = tn_tweet_background;
if (!tn_tweet_border)
	tn_tweet_border = '0px solid #aaa';
if (!tn_tweet_margin)
	tn_tweet_margin = '4px';
if (!tn_tweet_fontsize)
	tn_tweet_fontsize = '12px';
if (!tn_search)
	tn_search = '';
else
	tn_search = tn_search;
if (!tn_num_tweets)
	tn_num_tweets = 20;
if (!tn_pre_html)
	tn_pre_html = '';
if (!tn_post_html)
	tn_post_html = '';
if (!tn_mid_html)
	tn_mid_html = '';
if (tn_center_widget == 'yes')
	tn_center_widget = 'margin: 0 auto;';
else
	tn_center_widget = '';
if (!tn_tweet_lang) 
    tn_tweet_lang = '';
else
    tn_tweet_lang = 'lang=' + tn_tweet_lang + '&';
if (!tn_widget_style_misc)
	tn_widget_style_misc = '';
if (!tn_results_style_misc)
	tn_results_style_misc = '';
if (!tn_tweet_style_misc)
	tn_tweet_style_misc = '';
if (tn_big_img == 'yes')
   tn_img_size = 48;
else
   tn_img_size = 24;
if (tn_hide_img == 'yes')
	tn_hide_img = 1;
else 
	{tn_hide_img = 0; tn_tweet_style_misc = tn_tweet_style_misc + ';min-height:' + (tn_img_size + 4) + 'px;';}

tn_idx++;	

tn_curidx = tn_idx;
tn_settings[tn_idx] = new Array(40);
tn_settings[tn_idx]['tn_divname'] =tn_divname;
tn_settings[tn_idx]['tn_curidx'] =tn_curidx;
tn_settings[tn_idx]['tn_width'] =tn_width;
tn_settings[tn_idx]['tn_height'] =tn_height;
tn_settings[tn_idx]['tn_scroll'] =tn_scroll;
tn_settings[tn_idx]['tn_widget_background'] =tn_widget_background;
tn_settings[tn_idx]['tn_widget_border'] =tn_widget_border;
tn_settings[tn_idx]['tn_widget_refresh_interval'] =tn_widget_refresh_interval;
tn_settings[tn_idx]['tn_tweet_textcolor'] =tn_tweet_textcolor;
tn_settings[tn_idx]['tn_tweet_linkcolor'] =tn_tweet_linkcolor;
tn_settings[tn_idx]['tn_tweet_background'] =tn_tweet_background;
tn_settings[tn_idx]['tn_tweet_newbackground'] =tn_tweet_newbackground;
tn_settings[tn_idx]['tn_tweet_border'] =tn_tweet_border;
tn_settings[tn_idx]['tn_tweet_margin'] =tn_tweet_margin;
tn_settings[tn_idx]['tn_tweet_fontsize'] =tn_tweet_fontsize;
tn_settings[tn_idx]['tn_tweet_lang'] =tn_tweet_lang;
tn_settings[tn_idx]['tn_hide_img'] =tn_hide_img;
tn_settings[tn_idx]['tn_big_img'] =tn_big_img;
tn_settings[tn_idx]['tn_img_size'] =tn_img_size;
tn_settings[tn_idx]['tn_num_tweets'] =tn_num_tweets;
tn_settings[tn_idx]['tn_search'] =tn_search;
tn_settings[tn_idx]['tn_lastsearch'] =tn_search;
tn_settings[tn_idx]['tn_pre_html'] =tn_pre_html;
tn_settings[tn_idx]['tn_post_html'] =tn_post_html;
tn_settings[tn_idx]['tn_mid_html'] =tn_mid_html;
tn_settings[tn_idx]['tn_center_widget'] =tn_center_widget;
tn_settings[tn_idx]['tn_widget_style_misc'] =tn_widget_style_misc;
tn_settings[tn_idx]['tn_results_style_misc'] =tn_results_style_misc;
tn_settings[tn_idx]['tn_tweet_style_misc'] =tn_tweet_style_misc;
tn_settings[tn_idx]['lastid'] = 0;
tn_settings[tn_idx]['tn_timer'] = '';
tn_settings[tn_idx]['tn_tweets'] = new Array(100);
tn_settings[tn_idx]['tn_ringptr'] = 0;
	
document.write('<h2> Latest Tweets about ' + tn_search + ':</h2>' );	
document.write('<div style="width:' + tn_width + ';height:' + tn_height + ';' +  tn_center_widget +  ';padding:0px;margin:0px;' + '">');
document.write('<div id=' + tn_divname + ' style="' + tn_scroll + '' +  tn_center_widget + 'width:auto;height:' + tn_height + ';background:' + tn_widget_background +  ';' + 'border:' + tn_widget_border + ';' + tn_widget_style_misc + '">');
document.write('');
document.write('</div>');
document.write('</div>');
if (tn_search != '-') {
	document.write('<script src="http://search.twitter.com/search.json?callback=tn_searchfunc&' + tn_tweet_lang + 'q=' + tn_urlencode(tn_search) + '&rpp=' + tn_num_tweets + '&since_id=0" type="text/javascript"></script>');
	//tn_refresh_clbk(tn_curidx);
}
else {
}
if (tn_trk != "done") {
//gat
//s
try {
if (typeof(_gat) != "object") {
		var tgwgaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
		
	}
} catch(err) {}	
///s

tn_trk = "done";
}
