
 var s = "";

 var lastUser='';
 var lastFriends = 0;
 var lastPage = 0;
 var fetched = [];

 var MAX_LEN=40;
 var MAX_PAGES = 10;
 var PAGE_SIZE = 50;

 var urlRegex = new RegExp("([^:]*):[/]*(?:www\.)*([^/]+)([^\?]*)(.*)");
 var spaceRegex =new RegExp("[ \t\n\r+]+","g");
 var scale=2; 

 function linkurl(url, keepPath, addIcon) 
 {
  urlbits = urlRegex.exec(url);
  imgtxt = "";
  if (addIcon && urlbits[1]=='http') {
    imgtxt = ['<img src="http://',urlbits[2],'/favicon.ico" class="favicon" width="16" />'].join('');
  }
  if (keepPath) {
    visualUrl = [urlbits[2],urlbits[3]].join('');
  } else {
    visualUrl = [urlbits[2]];
  }
  return [imgtxt,' <a class=\'link1\' href="',url,'" target=\'_blank\'>',visualUrl,'</a>'].join('');
 }

 function lookup()
 {
   var v = document.forms['mf'].u.value;

   if (v=='') return false;

   document.forms['mf'].submit();
 
   return true;
 }

 function showNote(note)
 {
    var s = "";

    s+="<div class='note' id='n"+note.guid+"'><span class='author'><a class='author-link' href='http://tinfo.linkstore.ru?u="+note.name+"' target='_blank'>"+note.title+"</a></span><br/>";
    s+=proceedText(note.description, 'l'+note.guid);
    s+="<div class='expl' id='l"+note.guid+"'></div>";

    s+="<div class='rtblock'>"
      +"<a class='rtlink' href=\"http://twitter.com?status="+getRetweet(note)+"\" target=\"_blank\">Retweet</a>"
      +" "
      +"<a class='rtlink' href=\"http://twitter.com?status="+getReply(note)+"\" target=\"_blank\">Reply</a>"
      +" "
      +"<a class='rtlink' href=\"http://got.linkstore.ru?q="+searchQuery(note.description)+"\" target=\"_blank\">Search</a>";
 
    s+="</div>";
    s+="</div>";

    return s;
 }

 function getNotesFromList(list)
 {
  var s='';
  var foundnodes = list["value"];

  if (foundnodes)
  {
   foundnodes = foundnodes.items; 
   if (foundnodes)
   {
    for (var node in foundnodes) 
    {
      var info = foundnodes[node];      
      var desc = info.description;
      if (desc) 
       if (desc.indexOf("RT @")>=0 || desc.indexOf("rt @")>=0)
        s+=showNote(info);
    }
   } 
  }

  return s;

 }

 function getShare()
 {
  var this_link = "http://rt.linkstore.ru?u="+lastUser;

  var twit_link="Retweets from @"+lastUser+" "+this_link;
     
  var subjectLine='Retweets from @'+lastUser; 
  var bodyText='See: '+this_link;

  var message_link = 'mailto:?subject='+escape(subjectLine)+'&body='+escape(bodyText);
     
  var face_link = 'http://www.facebook.com/sharer.php?u='+this_link+'&t='+encodeURIComponent(subjectLine);
             
  var s="<div class='link1'>Share: "
        +"<a href='http://twitter.com/home?status="+escape(twit_link)+"' target='_blank'>twit this</a> | "
        +"<a href='"+face_link+"' title='Share via facebook' target='_blank'>facebook</a> | "
        +"<a href='"+message_link+"' title='Share via email' target='_blank'>email</a> "
        +"&nbsp;&nbsp; "
        +"<a href='/rt/index.jsp'>New search</a>"
        +"</div>";

  return s;

 }

 function getPages()
 {
   var s = "<div class='link1'>Pages: ";

   var i = 1;
   var count = 0;

   while (count < lastFriends && i <= MAX_PAGES)
   {
     if (i==lastPage)
      s+=i+" ";
     else
      s+="<a href='javascript:void(0)' onClick='gotoPage("+i+");' title='Page "+i+"'>"+i+"</a> ";
     count+=PAGE_SIZE;
     i++;  
   }

   s+=" &nbsp; <span id='pageIndicator' style='display:none'><img src='/rt/load1.gif' alt='' border=''></span>";

   s+="</div>";

   return s;
        
 }

 function wrapResults(s0)
 {
   var s = s0;
  
   if (s == '') s="<br/><span style='font-size:130%;color:red'>no data yet or Twitter does not respond ...</span>";

   var ans = "<br/><span style='font-size:150%'>Retweets from <a href='http://tinfo.linkstore.ru?u="+lastUser+"' target='_blank' title='show extended info'>"+lastUser+"</a> timeline:</span>"
           + "<span> &nbsp; "
           + "<img src='/rt/load1.gif' alt='' border='0' id='gindicator'/></span><br/><br/>"
           + s
           + "<br/>&nbsp;";

   return ans;
 }

 function gotoPage(n)
 {
   var o = document.getElementById('pageIndicator');
   o.style.display='inline';

   lastPage = n;
   
   var f = (n-1)*PAGE_SIZE;
   var t = f+PAGE_SIZE;

   getScript('http://pipes.yahoo.com/pipes/pipe.run?Twitter_ID='+lastUser+'&f='+f+'&t='+t+'&_id=0f7d22cbb91023d596e391bd75de6665&_render=json&_callback=ShowLinks1');   
 }

 function ShowLinks1(list)
 {
   var s = getNotesFromList(list); 

   var s1 = getShare();

   var s2 = getPages();

   document.getElementById('result').innerHTML = wrapResults(s);

   document.getElementById('more').innerHTML = s2+"<br/>"+s1+"<br/>&nbsp;";

   expandBitly();
 }
 
 function ShowLinks(list) 
 {
   var s = getNotesFromList(list);
  
   var s1 = getShare();

   document.getElementById('result').innerHTML = wrapResults(s);

   document.getElementById('more').innerHTML = s1+"<br/>&nbsp;";

   expandBitly();
 }

function getMap(lat,lng)
{
  var s = "<a href='http://bigmap.linkstore.ru?lat="+lat
        + "&lng="+lng
        + "&zml=10"
        + "&mrk=1"         
        + "' target='_blank'>"
        + lat+","+lng
        +"</a>";

  return s;
}

function TwitterLoc(t)
{

  if (!t) 
  {
    alert("Could not get data from Twitter");
    return;
  }

  lastFriends = t.friends_count;

  if (t.friends_count<=PAGE_SIZE)
  {
   lastPage=0;
   getScript('http://pipes.yahoo.com/pipes/pipe.run?Twitter_ID='+lastUser+'&_id=6edf129c111aa0b3dff26e41d2d9154a&_render=json&_callback=ShowLinks');
  }
  else
  {
   lastPage = 1;
   getScript('http://pipes.yahoo.com/pipes/pipe.run?Twitter_ID='+lastUser+'&f=0&t='+PAGE_SIZE+'&_id=0f7d22cbb91023d596e391bd75de6665&_render=json&_callback=ShowLinks1');
  }
  
  var image = t.profile_image_url;
  var o = document.getElementById("location");
  var name = t.screen_name;

  var s ="<a style='text-decoration:none' href='http://tinfo.linkstore.ru?u="+name+"' target='_blank'><img src='"+image+"' border='0' alt='"+t.name+"'/></a><br/>&nbsp;<br/>";

  document.getElementById('face').innerHTML=s;
 
  var loc = t.location;
  s='';

  if (loc)
  {
   re = new RegExp("([-]?[0-9]{1,3}.[0-9]+),([-]?[0-9]{1,3}.[0-9]+)","g");
   loc = loc.replace(re, getMap('$1','$2'));
   s += loc+"<br/>&nbsp;<br/>";
  }

  if (t.description)
  {
    s+="<div style='text-align:left'><strong>Bio</strong> "+t.description;
    s+="</div>";
  }

  s+= "<table border='0' cellpadding='5px' cellspacing='7px'>"
   +  "<tr><td>"
   +  "<span id='following_count' class='number'>"+t.friends_count+"</span><br/>"
   +  "<a href='http://twitter.com/"+name+"/following' id='following_count_link' class='stat' rel='"+name+"' title='See who he/she is following' target='_blank'>"
   +  "<span class='label'>following</span>"
   +  "</a>"
   +  "</td><td>"
   +  "<span id='follower_count' class='number'>"+t.followers_count+"</span><br/>"
   +  "<a href='http://twitter.com/"+name+"/followers' id='follower_count_link' class='stat' rel='"+name+"' title='See who is following him/her'>"
   +  "<span class='label'>followers</span>"
   +  "</a>"
   +  "</td>"
   +  "<td>"
   +  "<span id='update_count' class='number'>"+t.statuses_count+"</span><br/>"
   +  "<a href='http://twitter.com/"+name+"' class='stat' title='See all tweets' rel='"+name+"' target='_blank'>"
   +  "<span class='label'>tweets</span>"
   +  "</a></td>"
   +  "</tr>"
   +  "</table><br/>";

  o.innerHTML = s;


}


function proceedText(text,guid)
    {
        var tweet = text;

        tweet = tweet.replace(/</g, '&lt;');

        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 id1="'+guid+'" style="' + 'text-decoration:none;" target="_blank" href=$1 >$1</a>');

        re = new RegExp("@([a-zA-Z0-9_]+)", "g");
	tweet = tweet.replace(re, '@<a style="' + 'text-decoration:none;" target="_blank" href=http://tinfo.linkstore.ru?u=$1>$1</a>');

        re = new RegExp("#([a-zA-Z0-9_]+)", "g");
	tweet = tweet.replace(re, '<a style="' + 'text-decoration:none;" target="_blank" href=http://got.linkstore.ru?q=%23$1>#$1</a>');

        tweet = tweet.replace(/&/g, '&');

        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 {tweet = tweet+'<br/>' + '<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>';}	

        re = new RegExp("(http://yfrog.com/)([0-9a-zA-Z]*)");
	var m = re.exec(tweet);
	if  (!m || m.length == 0) {} 
	else {tweet = tweet +'<br/>' + '<a href="http://yfrog.com/' + m[2] + '" target="_blank"><img src="http://yfrog.com/' + m[2] + '.th.jpg" border=0 height=150 width=150></a>';}	
        
      return tweet;
    }


function addReply(ara, r)
{
  for (var i=0; i<ara.length; i++)
   if (ara[i]==r) return;

  ara[ara.length]=r;
}

function getLocation(user)
{
  getScript('http://twitter.com/users/show/'+user+'.json?callback=TwitterLoc');
}

function getScript(s)
{
  var cbscript = document.createElement("script");
  cbscript.src = s;
  cbscript.type = 'text/javascript';
  document.body.appendChild(cbscript);
}

function searchQuery(s)
{
  var ans=s;

  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");
  ans = ans.replace(re, '');

  re = new RegExp("@([a-zA-Z0-9_]+)", "g");
  ans = ans.replace(re, '');

  re = new RegExp("([,:!\.\?\(\)\=\;\-])", "g");
  ans = ans.replace(re,' ');

  re = new RegExp("RT ", "g");
  ans = ans.replace(re,'');

  return encodeURIComponent(trim(ans));
}

function getRetweet(note)
{
  var s0 = note.description;
  s0 = s0.replace(/"/g,"");
  var s = "RT @"+note.name+" "+s0;

  return encodeURIComponent(s);
}

function getReply(note)
{
  var s = "@"+note.name+"%20"+"&in_reply_to_status_id="+note.guid+"&in_reply_to="+note.name;

  return s;
}


function expandBitly()
{
  var links = document.getElementsByTagName('a');
  for (var i=0; i < links.length; i++) 
   {
	var a = links[i];
	if (a.href && a.href.match(/^http\:\/\/bit\.ly/)) 
        {
	 if (!fetched[a.href]) 
         {
	  BitlyAPI(a.href);	
          return; 
      	 }
         else
         {

          var title = fetched[a.href].title;
          var longUrl = fetched[a.href].longUrl;
          var ids = fetched[a.href].ids;
          var id = a.getAttribute('id1');

          if (title!='' || longUrl!='')
            if (!ids[id])
            {  
              addLinks(id,title,longUrl)	
              ids[id]="1"; 
            }
          }
        }
  }

  finishBitLy();
}

function finishBitLy()
{
  var o = document.getElementById("gindicator");
  o.style.display = "none";
}

function BitlyAPI(s)
{
 var o = document.getElementById('pageIndicator');
 var doIt = true;
 
 if (o) 
  if (o.style.display!='none') doIt=false;

 if (doIt)
 {
  getScript('http://api.bit.ly/info?version=2.0.1&shortUrl='+s
            + '&keys=htmlTitle,longUrl&login=coldjava&apiKey=R_eaef9593ff7dafb595bf584116f7a108'
            + '&callback=myInfoCallback');
 }
}


var count=1;
function myInfoCallback(data)
{
			// this is how to get a result of infoing a single url
			var results = data.results;
						
			var links = document.getElementsByTagName('a');
			for (var i=0; i < links.length; i++) 
                        {
			    var a = links[i];
   			    if (a.href && a.href.match(/^http\:\/\/bit\.ly/) && !fetched[a.href]) 
                            {
                              var k = a.href.lastIndexOf("/");
                              var hash = a.href.substring(k+1);

 			       var r = results[hash];

                               var link = { };
                               link.title = '';
                               link.longUrl=''; 
                               link.ids=[];

      			       if (r) {
				 var title = rtrim(ltrim(r['htmlTitle']));
                                 var longUrl = r['longUrl'];

                                 var id = a.getAttribute('id1');	

                                 addLinks(id,title,longUrl)	
                                
                                 link.title = title;
                                 link.longUrl=longUrl; 
                                 link.ids[id]="1";

                                 fetched[a.href]=link; 
                             
 				    }

                                 else
                                   fetched[a.href] = link; 

                               
                               expandBitly();

                               return;
			    }
				
			}
			
}

function getLongLink(s)
{
 var ans = "<a class='expl1' href='"+s+"' target='_blank'>";

 if (s.length>MAX_LEN) 
  ans+=s.substring(0,MAX_LEN)+"...";
 else
  ans+=s;

 ans+="</a>";

 return ans;
}

function addLinks(id,title,longUrl)	
{
   var o = document.getElementById(id);
   var o1 = document.getElementById('n'+id.substring(1));

   var old = o.innerHTML;
   var old1 = o1.innerHTML;

   if (old) old+="<br/>";
   else     old="";

   var s ="";

//if (title.indexOf("Time")>=0)
//alert("id:"+id+" "+o1+" old1:"+old1+" title:"+title+" "+old1.indexOf(title));

   if (title)
    if (old1.indexOf(title)<0)    
     s += "<em>"+ title +"</em>" + "<br/>";

   s+=getLongLink(longUrl);
                
   o.innerHTML = old+s; 
}

function ltrim(s)
{
  var ans = s;

  while (ans.length>0)
  {
    if (' '==ans.substring(0,1))
      ans = ans.substring(1);
    else
      return ans;
  }

  return ans;
}

function rtrim(s)
{
  var ans = s;

  while (ans.length>0)
  {
    if (' '==ans.substring(ans.length-1,1))
      ans = ans.substring(0,ans.length-1);
    else
      return ans;
  }

  return ans;

}

function trim(s)
{
  return ltrim(rtrim(s));
}
