
var inSearch = false;
var lastQuery = '';
var latLat='';
var lastLng='';
var count=20;

var geocoder;

var standard=[ [51.50446860957782,-0.12617111206054688], [37.759858513184625,-122.43095397949219], [37.457963163657475,-122.14324951171875] ];

function nonStandard(lat,lng)
{
  for (var i=0; i<standard.length; i++)
  {
     var o = standard[i];

     if (lat==o[0] && lng==o[1]) return false;
  }   

  return true;
}

function showMap()
{
  var o = document.getElementById("map_panel");
  var o1 = document.getElementById("tweet_panel");
  if (o.style.display=='none') 
  {
    o.style.display='block';
    o1.style.display='none';
    document.getElementById("link1").innerHTML='Hide map & show tweets';
  }
  else
  {
    o.style.display='none';
    o1.style.display='block';
    document.getElementById("link1").innerHTML='Show map';
  }
}

function goto(lat,lng)
{
  location.href='/tsv/index.jsp?lat='+lat+'&lng='+lng;
}

function searchTwitter(lat, lng)
{
  if (!inSearch)
  {
    inSearch = true;
    var query="&geocode="+lat+"%2C"+lng+"%2C3mi";

    lastQuery = query;
    lastLat=lat;
    lastLng=lng;

    var s = "http://search.twitter.com/search.json?lang=all&q="+query+"&rpp="+count;
    showIndicator('indicator','inline');
    getTwitter(s+"&callback=results");

  }
}

function results(t)
{
  var v ='';

  if (t) v = t.results;
  var i;

  inSearch = false;

  if (v.length==0)
  {
     document.getElementById("tweet_panel").innerHTML="<div class='error'>nobody writes here</div>";   
     showIndicator('indicator','none');
  }
  else
  {
     var sText = "";  
     var tt = new Array();

     for (i=0; i<v.length; i++)
     { 
        var entry = v[i];
        var sEntry = getEntry(entry,tt); 

           if (i%3==0)
           {
            var c = sEntry.substring(0,1);

            if (goodCandidate(c))
             sEntry="<span class='bukv'>"+c+"</span><span>"+sEntry.substring(1)+"</span>";
           }

           sText +="<div id='res"+i+"' class='res'>"+sEntry+"</div>";
           if ((i+1)%3==0) sText+="<br/>";
          }
     

         document.getElementById('tweet_panel').innerHTML=sText;

         $('#tweet_panel').columnize({columns:3}); 
         for (i=0; i<tt.length; i++)
         {
           $('#res'+i).qtip({
            content: tt[i],
            position: {
             corner: {
            target: 'topMiddle',
            tooltip: 'bottomLeft'
            }
           },
           style: { 
             tip:'bottomLeft',
             padding:'5px',
             name: 'green' // Inherit from preset style
           },
           hide:
           { fixed:true,
             delay:100 
           }
         });

        } 

       showIndicator('indicator','none'); 

       }
    }


function showIndicator(id, val)
{
  document.getElementById(id).style.display = val;
}

function goodCandidate(c)
    {
       if ( c=='"' || c=='#' || c=='<' || c=="'" ||
            c=='[' || c=='(' || c=='{' || c=='>' ||
            c=='@' || c=='+' || c=='-' || c=='.' ||
            c==':' || !isNaN(c))
         return false;

       return true;
    }        

    function getEntry(entry,tt)
    {
       var sText = '';
       var sTt = '';
       var showAuthor = true; 

           var sPic = proceedPics(entry.text);

           if (sPic!=entry.text) 
           {
             sText+=sPic; 
             //sText += "<br/>";
             showAuthor=false;
           }

          
          //if (showAuthor)
          // sText +="<a style='text-decoration:none' href='http://tinfo.linkstore.ru?u="+entry.from_user+"' target='_blank'><img src='"+entry.profile_image_url+"' style='float:left;padding-right:7px' border='0' width='48' height='48'/></a>"; 

          sTt +="<a style='text-decoration:none' href='http://tinfo.linkstore.ru?u="+entry.from_user+"' target='_blank'><img src='"+entry.profile_image_url+"' style='float:left;padding-right:7px' border='0' width='48' height='48'/></a>"; 
            
          
          sText +=proceedUrl(entry.text);
          
          sTt+="<span style='font-size:80%;color:#555555'>"+dateDiff(new Date(entry.created_at), new Date());
 
          if (entry.from_user) 
             //sTt+=" by <a href='http://twitter.com/"+entry.from_user+"' target='_blank'>"+entry.from_user+"</a>";
             sTt+=" by <a href='http://tinfo.linkstore.ru?u="+entry.from_user+"' target='_blank'>"+entry.from_user+"</a>";

           sTt+="&nbsp;";
           sTt+=" <a href='http://twitter.com/home?status=@"+entry.from_user+"&in_reply_to_status_id="+entry.id_str+"&in_reply_to="+entry.from_user
            +"' target='_blank' title='Reply to '"+entry.from_user+"'>Reply</a> "; 
           sTt+="&nbsp;";
           sTt+=" <a href='http://twitter.com/"+entry.from_user+"/statuses/"+entry.id_str
                 +"' target='_blank' title='Show tweet'>View tweet</a>";

           if (entry.text.indexOf("@")==0)
             sTt+=" <a style='text-decoration:none' href='http://tdialog.linkstore.ru?"+entry.id_str
                +"' target='_blank' title='Show conversation'><img alt='' border='0' src='/tsv/images/thread.png'/></a>";

          if (entry.geo)
            if (entry.geo.coordinates)
           {
            sTt+="&nbsp;";

            sTt+=" <a href='http://bigmap.linkstore.ru?lat="
                +entry.geo.coordinates[0]
                +"&lng="
                +entry.geo.coordinates[1]
                +"&zml=10" 
                +"&mrk=1"  
                +"' target='_blank' title='Show map'>Map</a>";
           }   

           sTt+="</span>";
                  
          tt[tt.length]=sTt;

          return sText;
    }

    function proceedUrl(text)
    {
        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 style="' + 'text-decoration:none;" target="_new" href=$1 >$1</a>');

        re = new RegExp("@([a-zA-Z0-9_]+)", "g");
	tweet = tweet.replace(re, '<a style="' + 'text-decoration:none;" target="_new" href=http://twitter.com/$1>@$1</a>');

        re = new RegExp("#([a-zA-Z0-9_]+)", "g");
	tweet = tweet.replace(re, '<a style="text-decoration:none;" target="_new" href=http://search.twitter.com/search?q=%23$1>#$1</a>');


        tweet = tweet.replace(/&/g, '&');

        return tweet; 
    }

    function proceedPics(text)
    {
        var tweet = text;
     
        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 = '<a style="float:left;padding-right:7px" href="http://twitpic.com/' + m[2] + '" target="_blank"><img src="http://twitpic.com/show/thumb/' + m[2] + '" border="0" style="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 = '<a style="float:left;padding-right:7px" href="http://yfrog.com/' + m[2] + '" target="_blank"><img src="http://yfrog.com/' + m[2] + '.th.jpg" border="0" style="height:150;width:150;"></a>';}	

        re = new RegExp("(http://img.ly/)([0-9a-zA-Z]*)");
     	m = re.exec(tweet);
  	if  (!m || m.length == 0) {} 
 	else {tweet = '<a style="float:left;padding-right:7px" href="http://img.ly/' + m[2] + '"><img src="http://img.ly/show/thumb/'+m[2]+'" border="0" style="height:150;width:150;"></a>';return tweet;}	

        re = new RegExp("(http://tweetphoto.com/)([0-9a-zA-Z]*)");
     	m = re.exec(tweet);
  	if  (!m || m.length == 0) {} 
 	else {tweet = '<a style="float:left;padding-right:7px" href="http://tweetphoto.com/' + m[2] + '" target="_blank"><img src="http://TweetPhotoAPI.com/api/TPAPI.svc/imagefromurl?size=medium&url=http://tweetphoto.com/' + m[2] + '" border=0 height=150 width=150></a>';return tweet;}	

        re = new RegExp("(http://plixi.com/p/)([0-9a-zA-Z]*)");
     	m = re.exec(tweet);
  	if  (!m || m.length == 0) {} 
 	else {tweet = '<a style="float:left;padding-right:7px" href="http://plixi.com/p/' + m[2] + '" target="_blank"><img src="http://api.plixi.com/api/tpapi.svc/imagefromurl?size=medium&url=http://plixi.com/p/' + m[2] + '" border=0 height=150 width=150></a>';return tweet;}	        

        re = new RegExp("(http://lockerz.com/s/)([0-9a-zA-Z]*)");
     	m = re.exec(tweet);
  	if  (!m || m.length == 0) {} 
 	else {tweet = '<a style="float:left;padding-right:7px" href="http://lockerz.com/s/' + m[2] + '" target="_blank"><img src="http://api.plixi.com/api/tpapi.svc/imagefromurl?size=medium&url=http://lockerz.com/s/' + m[2] + '" border=0 height=150 width=150></a>';return tweet;}	        

        re = new RegExp("(http://farm)([0-9])(.static.flickr.com/)([0-9a-zA-Z_\.\/]*)");
     	m = re.exec(tweet);
  	if  (!m || m.length == 0) {} 
 	else {tweet = '<a style="float:left;padding-right:7px" href="'+m[0]+'" target="_blank"><img src="'+m[0]+ '" border=0 height=150 width=150></a>'; return tweet;}	        

        re = new RegExp("(http://twitrpix.com/)([0-9a-zA-Z]*)");
	m = re.exec(tweet);
	if  (!m || m.length == 0) {} 
	else {tweet = '<a style="float:left;padding-right:7px" href="http://twitrpix.com/' + m[2] + '" target="_blank"><img src="http://img.twitrpix.com/thumb/' + m[2] + '" border=0 height=150 width=150></a>'; return tweet;}	

        re = new RegExp("(http://moby.to/)([0-9a-zA-Z]*)");
	m = re.exec(tweet);
	if  (!m || m.length == 0) {} 
	else {tweet = '<a style="float:left;padding-right:7px" href="http://moby.to/' + m[2] + '" target="_blank"><img src="http://moby.to/' + m[2] + ':medium" border=0 height=150 width=150></a>'; return tweet;}	

        re = new RegExp("(http://twitsnaps.com/)([0-9a-zA-Z]*)");
	m = re.exec(tweet);
	if  (!m || m.length == 0) {} 
	else {tweet = '<a style="float:left;padding-right:7px" href="http://twitsnaps.com/' + m[2] + '" target="_blank"><img src="http://twitsnaps.com/thumb/' + m[2] + '" border=0 height=150 width=150></a>'; return tweet;}	

        re = new RegExp("(http://twitgoo.com/)([0-9a-zA-Z]*)");
	m = re.exec(tweet);
	if  (!m || m.length == 0) {} 
	else {tweet = '<a style="float:left;padding-right:7px" href="http://twitgoo.com/' + m[2] + '" target="_blank"><img src="http://twitgoo.com/' + m[2] + '/thumb" border=0 height=150 width=150></a>'; return tweet;}	

        re = new RegExp("(http://instagr.am/p/)([0-9a-zA-Z_\-]*)/");
	m = re.exec(tweet);
	if  (!m || m.length == 0) {} 
	else {tweet = '<a style="float:left;padding-right:7px" href="http://instagr.am/p/'+m[2] +  '/" target="_blank"><img src="http://instagr.am/p/' + m[2] + '/media?size=t" border=0 height=150 width=150></a>'; return tweet;}


      return tweet;
    }


 function dateDiff(d1, d2)
   {
     var diff  = new Date();

     diff.setTime(Math.abs(d1.getTime() - d2.getTime()));

     var timediff = diff.getTime();

     var weeks = Math.floor(timediff / (1000 * 60 * 60 * 24 * 7));
     timediff -= weeks * (1000 * 60 * 60 * 24 * 7);

     var days = Math.floor(timediff / (1000 * 60 * 60 * 24)); 
     timediff -= days * (1000 * 60 * 60 * 24);

     var hours = Math.floor(timediff / (1000 * 60 * 60)); 
     timediff -= hours * (1000 * 60 * 60);

     var mins = Math.floor(timediff / (1000 * 60)); 
     timediff -= mins * (1000 * 60);

     var secs = Math.floor(timediff / 1000); 
     timediff -= secs * 1000;

     var ans ="";
     if (weeks!=0) ans+=weeks+" weeks ";

     if (days!=0)  ans+=days+" days ";

     if (hours!=0) ans+=hours+" hours ";
     else
     {
       if (mins!=0)  ans+=mins+" mins ";   
       else
          ans += secs +" secs "    
     }

     return ans+"ago";
   }


function getTwitter(query)
 {
      var cbscript = document.createElement("script");
      cbscript.src = query;
      cbscript.type = 'text/javascript';
      document.body.appendChild(cbscript);
 }

