﻿    var lastQuery, lastMarker, lastLat, lastLng; 

    var showAuthors = false;

    var count = 4;

    var showTexts = true;

    var scale=2; 

    var currentRadius = 10;

    timeInterval = 10;

    var hosts = ["p.twimg.com","twitpic","yfrog","img.ly","lockerz.com","plixi.com","tweetphoto.com","static.flickr.com","twitrpix.com","moby.to","twitsnaps","twitgoo", "instagr.am"];
    var currentHost=0;
    var seq = 0;

    var currIndex, currData;

    function getImages(q, lat, lng, _timeInterval, cnt)
    {
//alert("lat "+lat+" lng:"+lng);

         if (cnt) count=cnt;
         if (_timeInterval) timeInterval=_timeInterval;

//alert(timeInterval);

         if (lat && lng)  init(q,lat,lng);
         else             init(q);
        
    }

    function init(q,lat,lng)
    {         
         lastQuery=q;

         if (lat)
           lastLat = lat;
         else
           lastLat = 0;

         if (lng) 
           lastLng = lng;
         else
           lastLng = 0; 
        
         var s ="p.twimg.com+OR+twitpic+OR+yfrog+OR+img.ly+OR+lockerz.com+OR+plixi.com+OR+tweetphoto.com+OR+static.flickr+OR+twitrpix.com+OR+instagr.am";
         //var s = "p.twimg.com";
         if (q)
          if (q.length>0)
          {
           s = "&ands="+encodeURIComponent(q)+"%20";
           if (currentHost>=hosts.length) currentHost=0;
           
           s+=hosts[currentHost];
     
           currentHost++; 
          }

         var s1 ="http://search.twitter.com/search.json?lang=all&q="+s+"&rpp="+count;
         if (lat && lng)
          if (lat!=0 && lng!=0)
            s1+="&geocode="+lat+"%2C"+lng+"%2C"+currentRadius+"mi";

         
//alert(s1);

         getTwitter(s1+"&callback=results");
    }

     
      

    function results(t)
    {
       
//alert(seq+":"+currentHost+":"+q+":"+hosts.length+":"+hosts[currentHost]);


 
       if (!t)
       {         
         if (q) 
         { 
           seq++;
           if (seq>hosts.length) 
           {
               seq = 0;
               var s = "init('"+lastQuery+"',"+lastLat+","+lastLng+")";
               setTimeout(s, timeInterval*1000);                 
       
           }
           else                  init(lastQuery, lastLat, lastLng);
         }
         else
           {  
               var s = "init('"+lastQuery+"',"+lastLat+","+lastLng+")";
               setTimeout(s, timeInterval*1000);                 
           }   

         return;
       }
     
       var v = t.results;

       if (!v)
       {
         
         if (lastQuery) 
         {
           seq++;
           if (seq>=hosts.length) 
           {
               seq = 0;
               var s = "init('"+lastQuery+"',"+lastLat+","+lastLng+")";
               setTimeout(s, timeInterval*1000);                 
           }
           else                  init(lastQuery, lastLat, lastLng);
         }
         else
           {
               var s = "init('"+lastQuery+"',"+lastLat+","+lastLng+")";
               setTimeout(s, timeInterval*1000);                 
            }   
       }

       else
        if (v.length==0)
        {
          
          if (lastQuery) 
          {
           seq++;
           if (seq>=hosts.length) 
           {
               seq = 0;
               var s = "init('"+lastQuery+"',"+lastLat+","+lastLng+")";
               setTimeout(s, timeInterval*1000);                                 
           }
           else                  init(lastQuery, lastLat, lastLng);
          } 
          else
           { 
               var s = "init('"+lastQuery+"',"+lastLat+","+lastLng+")";
               setTimeout(s, timeInterval*1000);                 
           }
        }
        else
        {
           preproceedEntries(v,0);
        } 
    }



   function results1(t)
   {

//alert("Status:"+t.id_str+ " "+dump(t.entities));

       if (t.entities)
       {
         var v=t.entities.urls;
         if (t.entities.media) v = t.entities.media;

         if (v)
          if (v.length>0)
          {
            var txt = currData[currIndex].text;

//alert(v[0].media[0].media_url);
//alert("Source text:"+txt);

            for (var i=0; i<v.length; i++)
            {
//alert(dump(v[i]));
              var u = v[i];
              if (u.display_url)
               txt = txt.replace(u.url,u.expanded_url);
             }

//alert("Result:"+txt);
            currData[currIndex].text=txt;
           } 
       }
 

//if (currData[currIndex].text.indexOf("/photo/")>0) alert("it is photo");
                      
       preproceedEntries(currData,currIndex+1);

    }


    function preproceedEntries(v, ind)
    {
       if (ind>=v.length) { doTheRest(v); return;}

       var entry = v[ind];

       var txt = entry.text;

       if (txt.indexOf("http://t.co/")<0 && txt.indexOf("pic.twitter.com")<0) 
       {
         preproceedEntries(v, ind+1);
         return ;
       }

//alert("Index:"+txt);

       currIndex = ind;
       currData = v;

       var s = "http://api.twitter.com/1/statuses/show.json?id="+entry.id_str+"&include_entities=true";

//alert("Get status:"+s);

       getTwitter(s+"&callback=results1");
    }



    function doTheRest(v)
    {
         seq = 0;
         var sText = "";  
         var max_id=-1;
        
         for (var i=0; i<v.length; i++)
         { 
          var entry = v[i];
          var txt = entry.text;
          if (txt.indexOf("http://twitpic.com")>=0 || txt.indexOf("http://yfrog.com")>=0
             || txt.indexOf("http://img.ly")>=0 || txt.indexOf("http://tweetphoto.com")>=0
             || txt.indexOf("http://lockerz.com")>=0 || txt.indexOf("static.flickr.com")>=0 
             || txt.indexOf("http://twitrpix.com")>=0 || txt.indexOf("http://moby.to")>=0
             || txt.indexOf("http://twitsnaps.com")>=0 || txt.indexOf("http://twitgoo.com")>=0 
             || txt.indexOf("http://plixi.com")>=0 || txt.indexOf("http://instagr.am/p")>=0 
             || txt.indexOf("http://p.twimg.com")>=0)
          {             
           if (entry.max_id>max_id) max_id=entry.max_id;
           sText +=getEntry(entry);
          }

         }

//alert(sText);
         
         var prev = document.getElementById('twitpic').innerHTML;

         document.getElementById('twitpic').innerHTML=sText+prev;

         var s = "init('"+lastQuery+"',"+lastLat+","+lastLng+")";
         setTimeout(s, timeInterval*1000);                         
    }

    function getEntry(entry)
    {
       var sText = '';
       var geo = isGeoCoded(entry);

           var sPic = proceedPics(entry.text);

           if (sPic!=entry.text) 
           {
             sText+=sPic; 
             sText += "<br/>";
           }

          if (showAuthors)
          {
           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>"; 
          }
  
          if (showTexts)
          { 
           sText +=proceedUrl(entry.text) + "<br/>";
         
           sText+="<span style='font-size:10px;color:#555555'>";

           if (geo)
             sText+="<a title='show map' href='http://bigmap.linkstore.ru?lat="+getLatitude(entry)+"&lng="+getLongitude(entry)+"&mrk=1' target='_blank'>";

           sText+=dateDiff(new Date(entry.created_at), new Date());

           if (geo)
             sText+="</a>&nbsp; ";
 
          if (entry.from_user) 
             sText+=" by <a title='show info' href='http://tinfo.linkstore.ru?u="+entry.from_user+"' target='_blank'>"+entry.from_user+"</a>";

           if (geo)
             sText+="</a>";


           sText+="&nbsp;";
           sText+=" <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> "; 
           sText+="&nbsp;";
           sText+=" <a href='http://twitter.com/"+entry.from_user+"/statuses/"+entry.id_str
                 +"' target='_blank' title='Show tweet'>View tweet</a>";

           sText+="</span>";
          }

          sText+="<hr style='border:0;color:#aaa;background-color:#aaa;height:1px;width:90%;'>";
          sText+="<br/>";
          
          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("((http://)((4sq)[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://got.linkstore.ru?q=%23$1>#$1</a>');
              
        re = new RegExp("@([a-zA-Z0-9_]+)", "g");
	tweet = tweet.replace(re, '@<a style="' + 'text-decoration:none;" target="_new" href=http://tinfo.linkstore.ru?u=$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 = '<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>'; return tweet;}	

        re = new RegExp("(http://yfrog.com/)([0-9a-zA-Z]*)");
	m = re.exec(tweet);
	if  (!m || m.length == 0) {} 
	else {tweet = '<center><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></center>';return tweet;}	

        re = new RegExp("(http://img.ly/)([0-9a-zA-Z]*)");
     	m = re.exec(tweet);
  	if  (!m || m.length == 0) {} 
 	else {tweet = '<center><a href="http://img.ly/' + m[2] + '"><img src="http://img.ly/show/thumb/'+m[2]+'" border="0" style="height:150;width:150;"></a></center>';return tweet;}	

        re = new RegExp("(http://tweetphoto.com/)([0-9a-zA-Z]*)");
     	m = re.exec(tweet);
  	if  (!m || m.length == 0) {} 
 	else {tweet = '<center><a 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></center>';return tweet;}	

        re = new RegExp("(http://plixi.com/p/)([0-9a-zA-Z]*)");
     	m = re.exec(tweet);
  	if  (!m || m.length == 0) {} 
 	else {tweet = '<center><a 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></center>';return tweet;}	        

        re = new RegExp("(http://lockerz.com/s/)([0-9a-zA-Z]*)");
     	m = re.exec(tweet);
  	if  (!m || m.length == 0) {} 
 	else {tweet = '<center><a 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></center>';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 = '<center><a href="'+m[0]+'" target="_blank"><img src="'+m[0]+ '" border=0 height=150 width=150></a></center>'; return tweet;}	        

        re = new RegExp("(http://twitrpix.com/)([0-9a-zA-Z]*)");
	m = re.exec(tweet);
	if  (!m || m.length == 0) {} 
	else {tweet = '<center><a href="http://twitrpix.com/' + m[2] + '" target="_blank"><img src="http://img.twitrpix.com/thumb/' + m[2] + '" border=0 height=150 width=150></a></center>'; return tweet;}	

        re = new RegExp("(http://moby.to/)([0-9a-zA-Z]*)");
	m = re.exec(tweet);
	if  (!m || m.length == 0) {} 
	else {tweet = '<center><a href="http://moby.to/' + m[2] + '" target="_blank"><img src="http://moby.to/' + m[2] + ':medium" border=0 height=150 width=150></a></center>'; return tweet;}	

        re = new RegExp("(http://twitsnaps.com/)([0-9a-zA-Z]*)");
	m = re.exec(tweet);
	if  (!m || m.length == 0) {} 
	else {tweet = '<center><a href="http://twitsnaps.com/' + m[2] + '" target="_blank"><img src="http://twitsnaps.com/thumb/' + m[2] + '" border=0 height=150 width=150></a></center>'; return tweet;}	

        re = new RegExp("(http://twitgoo.com/)([0-9a-zA-Z]*)");
	m = re.exec(tweet);
	if  (!m || m.length == 0) {} 
	else {tweet = '<center><a href="http://twitgoo.com/' + m[2] + '" target="_blank"><img src="http://twitgoo.com/' + m[2] + '/thumb" border=0 height=150 width=150></a></center>'; return tweet;}	

        re = new RegExp("(http://instagr.am/p/)([0-9a-zA-Z_\-]*)/");
	m = re.exec(tweet);
	if  (!m || m.length == 0) {} 
	else {tweet = '<center><a 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></center>'; return tweet;}

        re = new RegExp("(http://p.twimg.com/)([0-9a-zA-Z_.\-]*)");
	m = re.exec(tweet);
	if  (!m || m.length == 0) {} 
	else {tweet = '<center><a href="http://p.twimg.com/'+m[2] +  '" target="_blank"><img src="http://p.twimg.com/' + m[2] + ':thumb" border=0 height=150 width=150></a></center>'; return tweet;}


      return tweet;
    }

    
    function getTwitter(query)
    {
      var cbscript = document.createElement("script");
      cbscript.src = query;
      cbscript.type = 'text/javascript';
      document.body.appendChild(cbscript);
    }

   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 isGeoCoded(entry)
  {
    if (entry.geo) return true;
    if (!entry.place) return false;
    if (!entry.place.bounding_box) return false;

    return true;  
  }

  function getLatitude(entry)
  {
    if (entry.geo) 
    {     
      return entry.geo.coordinates[0];
    }
    else
    {  
      var box = entry.place.bounding_box.coordinates;
      var point0 = box[0][0];

      return point0[1];
    }
  }

  function getLongitude(entry)
  {
    if (entry.geo) 
      return entry.geo.coordinates[1];
    else
    {  
      var box = entry.place.bounding_box.coordinates;
      var point0 = box[0][0];

      return point0[0];
    }
  }

function dump(arr,level) {
	var dumped_text = "";
	if(!level) level = 0;
	
	//The padding given at the beginning of the line.
	var level_padding = "";
	for(var j=0;j<level+1;j++) level_padding += "    ";
	
	if(typeof(arr) == 'object') { //Array/Hashes/Objects 
		for(var item in arr) {
			var value = arr[item];
			
			if(typeof(value) == 'object') { //If it is an array,
				dumped_text += level_padding + "'" + item + "' ...\n";
				dumped_text += dump(value,level+1);
			} else {
				dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
			}
		}
	} else { //Stings/Chars/Numbers etc.
		dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
	}
	return dumped_text;
}


