
 var s = "";

 var lastUser='';
 var lastFriends = 0;
 var lastPage = 0;
 var fetched = [];

 var MAX_LEN=40;
 var MAX_PAGES = 10;
 var PAGE_SIZE = 150;

 var urlRegex = new RegExp("([^:]*):[/]*(?:www\.)*([^/]+)([^\?]*)(.*)");
 var spaceRegex =new RegExp("[ \t\n\r+]+","g");
 var scale=2; 

 var scale=2; 

   var stopwords = [ "a", "about", "above", "accordingly", "after",
  "again", "against", "ah", "all", "also", "although", "always", "am", "among", "amongst", "an",
  "and", "any", "anymore", "anyone", "are", "as", "at", "away", "be", "been",
  "begin", "beginning", "beginnings", "begins", "begone", "begun", "being",
  "below", "between", "but", "by", "ca", "can", "cannot", "come", "could",
  "did", "do", "doing", "during", "each", "either", "else", "end", "et",
  "etc", "even", "ever", "far", "ff", "following", "for", "from", "further", "furthermore",
  "get", "go", "goes", "going", "got", "had", "has", "have", "he", "her",
  "hers", "herself", "him", "himself", "his", "how", "href", "i", "if", "in", "into",
  "is", "it", "its", "itself", "just", "last", "lastly", "less", "like", "many", "may", "me",
  "might", "more", "must", "my", "myself", "near", "nearly", "never", "new",
  "next", "no", "not", "now", "o", "of", "off", "often", "oh", "on", "only",
  "or", "other", "otherwise", "our", "ourselves", "out", "over", "perhaps",
  "put", "puts", "quite", "s", "said", "saw", "say", "see", "seen", "shall",
  "she", "should", "since", "so", "some", "such", "t", "than", "that", "the",
  "their", "them", "themselves", "then", "there", "therefore", "these", "they",
  "this", "those", "though", "throughout", "thus", "to", "too",
  "toward", "unless", "until", "up", "upon", "us", "ve", "very", "was", "we",
  "were", "what", "whatever", "when", "where", "which", "while", "who",
  "whom", "whomever", "whose", "why", "with", "within", "without", "would",
  "yes", "your", "yours", "yourself", "yourselves" ];


 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)
 {
    return note.description;
 }

 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("#")>=0)
        s+=" "+showNote(info);
    }
   } 
  }

  return processText(s);

 }

  function processText(_s)
    {
      var s = _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");
      s =  s.replace(re, ' ');
       
      re = new RegExp("[0-9]","g");
      s =  s.replace(re, ' ');

      re = new RegExp('["«»]','g');
      s =  s.replace(re, ' ');

      re = new RegExp('&lt;','g');
      s =  s.replace(re, ' ');

      re = new RegExp('&gt;','g');
      s =  s.replace(re, ' ');


      re = new RegExp('&quot;','g');
      s =  s.replace(re, ' ');
      
      re = new RegExp("[-+>=~<():,@.\t'\"{}%!?\/\\\\]","g");
      s =  s.replace(re, ' ');

      var elems = s.split(" ");
      var cloud0=[];
      var tag;
      var max = 0; 
      var res;
              
      for (var i=0; i<elems.length; i++)
      {
       tag = elems[i].toLowerCase();

       if (tag.length>2 && !isStop(tag))
       {
        res = -1;

        for (var j=0; j<cloud0.length; j++)
          if (cloud0[j].el==tag)
           {
               res = j;
               j = cloud0.length+1;               
           }


           if (res<0)
           {
             cloud0[cloud0.length] = { count: 1, el: tag };
             max = Math.max(1, max);
           }
           else 
           {
             cloud0[res].count += 1;
             max = Math.max(cloud0[res].count, max);
           }

       }
          
    }

    var cloud=[];
    s='';

    if (max<=1) cloud=cloud0;
    else 
    {
     var most='';
     var max1=0;

     for (var i=0; i<cloud0.length; i++)
     {
       var e = cloud0[i];
       if (e.count==max) 
        most+='<a class="link1" style="font-size:' + scale + 'em" href="http://got.linkstore.ru?q='+encodeURIComponent(e.el)+'" target="_blank" title="Used: '+e.count+' '+getHowMany(e.count)+'">' + untag(e.el) + '</a> &nbsp; ';

       if (e.count>1 && e.count!=max)
       {
         cloud[cloud.length]=e;        
         if (e.count>max1) max1=e.count;
       }
     }

     s="<span style='font-size:150%'>Most popular:</span> " 
      +"<br/><br/>" 
      + most 
      +"<br/><br/>"
      +"<span style='font-size:150%'>Cloud:</span> "
      +"<br/><br/>"; 

     max=max1;
    }
    
    
      
    for (var i = 0; i < cloud.length; i++) {
     if (cloud[i].count>=3 || cloud[i].el.indexOf('#')==0)
      if (cloud[i].count>=4 || cloud[i].el.indexOf("#")==0)
       s+='<a class="link1" style="font-size:' + Math.ceil((cloud[i].count / max) * scale) + 'em" href="http://got.linkstore.ru?q='+encodeURIComponent(cloud[i].el)+'" target="_blank" title="Used: '+cloud[i].count+' '+getHowMany(cloud[i].count)+'">' + untag(cloud[i].el) + '</a> &nbsp; ';
      else
       s+='<span style="color:blue;font-size:' + Math.ceil((cloud[i].count / max) * scale) + 'em">' + untag(cloud[i].el) + '</span> &nbsp; ';
    }

    return s;  

    }

function untag(s)
{
  return s.substring(1);
}

function isStop(s)
{
  if (s.substr(0,1)!='#') return true;
 
  for (var i=0; i<stopwords.length; i++)
  {
    if (s==stopwords[i]) return true;
  }

  return false;

}

 function getShare()
 {
  var this_link = "http://tbuzz.linkstore.ru?u="+lastUser;

  var twit_link="Buzz from @"+lastUser+" "+this_link;
     
  var subjectLine='Buzz 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> "
        +"<br/>&nbsp;"
        +"<br/>"
        +"More: "
        +"<a href='http://tbuzz.linkstore.ru'>New buzz</a> &nbsp; "
        +"<a href='http://tlink.linkstore.ru?u="+lastUser+"'>Show links</a> &nbsp; "
        +"<a href='http://rt.linkstore.ru?u="+lastUser+"'>Show retweets</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='/tbuzz/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?) ...</span>";

   var ans = "<br/><span style='font-size:150%'>Tags in "+"<a href='http://tinfo.linkstore.ru?u="+lastUser+"' target='_blank' title='show extended info'>"+lastUser+"</a> timeline:</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;";   
 }
 
 function ShowLinks(list) 
 {
   var s = getNotesFromList(list);
  
   var s1 = getShare();

   document.getElementById('result').innerHTML = wrapResults(s);

   document.getElementById('more').innerHTML = s1+"<br/>&nbsp;";

 }

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>";
  }

  if (t.url)
  {
    s+="<div style='text-align:left'><strong>URL:</strong> <a href='"+t.url+"' target='_blank'>"+t.url+"</a>";
    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;
        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(ans);
}

function getRetweet(note)
{
  var s = "RT @"+note.name+" "+note.description;

  return encodeURIComponent(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("Make")>=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 getHowMany(n)
{
  if (n==1) return "time";
  else      return "times";
}

