    var map, geocoder, searchControl, lastMarker; 

    var showAuthors = false;

    var showTexts = true;

    var type='breakfast';

    var scale=2; 

    var seq = 0;

    var hosts = ["p.twimg.com","twitpic","yfrog","img.ly","plixi.com","lockerz.com","tweetphoto.com","static.flickr.com",
                 "twitrpix.com","moby.to","twitsnaps.com","twitgoo.com","instagr.am"];

    var curService = 0;

    var currIndex, currData;

    function startProcess()
    {
      document.getElementById('progress1').style.display="inline";
      document.getElementById('progress2').style.display="inline";
    }

    function endProcess()
    {
      document.getElementById('progress1').style.display="none";
      document.getElementById('progress2').style.display="none";
    }

    function noData()
    {
      document.getElementById("twitpic").innerHTML="<div class='error'>nobody writes here</div>";   
      return 0;  
    }


    function fType(t)
    {
      var o = document.forms['mf'].r1;

      if (t=='b') 
      {
         document.forms['mf'].r1[0].checked=true;
         document.forms['mf0'].r1[0].checked=true;
         type='breakfast';
      }
      else
        if (t=='l') 
        {
         document.forms['mf'].r1[1].checked=true;
         document.forms['mf0'].r1[1].checked=true;
         type='lunch';
        }
        else
         if (t=='d') 
         {
          document.forms['mf'].r1[2].checked=true;
          document.forms['mf0'].r1[2].checked=true; 
          type='dinner';
         } 

      init(); 
    }

    function fAuthors(t)
    {
      showAuthors = !showAuthors;

      if (t=="top")
      {
        document.forms['mf'].c1.checked = document.forms['mf0'].c10.checked;
        document.forms['mf'].c2.checked = document.forms['mf0'].c20.checked;
      }
      else
      {
        document.forms['mf0'].c10.checked = document.forms['mf'].c1.checked;
        document.forms['mf0'].c20.checked = document.forms['mf'].c2.checked;
      }

      init();
    }

    function fTexts(t)
    {
      showTexts = !showTexts;

      if (t=="top")
      {
        document.forms['mf'].c1.checked = document.forms['mf0'].c10.checked;
        document.forms['mf'].c2.checked = document.forms['mf0'].c20.checked;
      }
      else
      {
        document.forms['mf0'].c10.checked = document.forms['mf'].c1.checked;
        document.forms['mf0'].c20.checked = document.forms['mf'].c2.checked;
      }

      init();
    }


    function init()
    {
         var count = 20;
         if (!showTexts) count+=8;

         var query=type;

         startProcess(); 

         query+=" "+hosts[curService];

         curService++;
         if (curService>hosts.length) curService=0;
         
         var s = "http://search.twitter.com/search.json?lang=all&q="+query+geoTwit+"&rpp="+count;
         getTwitter(s+"&callback=results");

    }
      
    function load() 
    {
      if (GBrowserIsCompatible()) 
      {

        var opts = {
           googleBarOptions : {
           style : 'new',
           adsOptions : {
            client : 'partner-pub-9490590989861158'
           }
         }
        } 

        map = new google.maps.Map2(document.getElementById("map"),opts);
        geocoder = new google.maps.ClientGeocoder();

        map.addControl(new google.maps.LargeMapControl());
        map.addControl(new google.maps.MapTypeControl());
        map.enableGoogleBar();

        initMap(lat,lng,zml);

        map.setCenter(new google.maps.LatLng(eval(lat),  eval(lng)), eval(zml), google.maps.G_NORMAL_MAP);

        google.maps.Event.addListener(map,"moveend",function()
         {setCookie('gllat',map.getCenter().lat(),365);
          setCookie('glltd',map.getCenter().lng(),365);
          setCookie('glzml',map.getZoom(),365);});     

        google.maps.Event.addListener(map, "click", clickFunction);  

        var publisher_id = "pub-9490590989861158"; 
                       
        adsManagerOptions = {
        maxAdsOnMap : 1,
        style: 'adunit',
        channel: '' // This field is optional - replace with a channel number that you created for GooYAMLgle AdSense tracking
       };

       adsManager = new GAdsManager(map, publisher_id, adsManagerOptions);
       adsManager.enable(); 
      }

      // Create a search control
      //searchControl = new google.search.SearchControl();

      // Add in a full set of searchers
      //var localSearch = new google.search.LocalSearch();
      //searchControl.addSearcher(localSearch);
      //searchControl.addSearcher(new google.search.WebSearch());
      //searchControl.addSearcher(new google.search.NewsSearch());
      //searchControl.addSearcher(new google.search.ImageSearch());
      //searchControl.addSearcher(new google.search.VideoSearch());
      //searchControl.addSearcher(new google.search.BlogSearch());

      // Set the Local Search center point
      //localSearch.setCenterPoint(google.loader.ClientLocation.address.city+","+google.loader.ClientLocation.address.country);

     
      // Tell the searcher to draw itself and tell it where to attach
      //searchControl.draw(document.getElementById("searchcontrol"));
    }

     function getExpirydate( nodays)
      {
        var UTCstring;
        Today = new Date();
        nomilli=Date.parse(Today);
        Today.setTime(nomilli+nodays*24*60*60*1000);
        UTCstring = Today.toUTCString();
        return UTCstring;
      }

      function getCookie(cookiename) 
      {
      var cookiestring=""+document.cookie;
       var index1=cookiestring.indexOf(cookiename);
       if (index1==-1 || cookiename=="") return ""; 
       var index2=cookiestring.indexOf(';',index1);
       if (index2==-1) index2=cookiestring.length; 
       return unescape(cookiestring.substring(index1+cookiename.length+1,index2));
      }

     function setCookie(name,value,duration)
     {
      cookiestring=name+"="+escape(value)+";EXPIRES="+getExpirydate(duration);
      document.cookie=cookiestring;
     }


     function initMap(_lat,_lng,_zml)
     {      
      if (_lat) lat = _lat;
      else 
       lat = getCookie('gllat');

      if (google.loader.ClientLocation)
	      if (lat.length==0) lat = google.loader.ClientLocation.latitude; 

      if (!lat) lat = 55.68455275165637;

      if (_lng) lng = _lng;
      else 
       lng = getCookie('glltd');

      if (google.loader.ClientLocation)
	      if (lng.length==0) lng = google.loader.ClientLocation.longitude;

      if (!lng) lng = 37.733917236328125;

      if (_zml) zml = _zml;
      else 
       zml = getCookie('glzml');

      if (zml.length==0) zml=8;
     }


    function clickFunction(overlay, latlng) 
    {
      if (latlng) 
      {
         var lat = latlng.lat();
         var lng = latlng.lng();

         var s ="http://search.twitter.com/search.json?lang=all&geocode="+lat+"%2C"+lng+"%2C"+"15mi"+"&rpp=20";
         document.getElementById("bottom").innerHTML="<div style='padding-top:30px;text-align:center' id='indicator'><img border='0' alt='in process ...' src='ajax_progress2.gif'></div>";
         getTwitter(s+"&callback=results");

         if (lastMarker) map.removeOverlay(lastMarker);
         var point = new GLatLng(lat, lng);
         lastMarker = new GMarker(point,{title:'See local faces'});
         map.addOverlay(lastMarker);         
      }

    }

    function results(t)
    {     
       if (!t)
       {
         endProcess();

         seq++; 
         if (seq>hosts.length)
         {  seq=0;
            return noData();}
         else
            return init();
       }
 
       var v = t.results;

       if (v.length==0)
       {         
         endProcess(); 

         seq++;
         if (seq>hosts.length)
         {  seq=0;
            return noData();}
         else
            return init();         
       }
       else
       {
         preproceedEntries(v,0);

       } 
    }

function results1(t)
   {

//alert("Status:"+t.id_str);

       if (!t)
       {
         preproceedEntries(currData,currIndex+1);
         return;
       } 

       if (t.entities)
       {
         var v=t.entities.urls;
         if (v)
          if (v.length>0)
          {
            var txt = currData[currIndex].text;

//alert("Source text:"+txt);

            for (var i=0; i<v.length; i++)
            {
              var u = v[i];
              if (u.display_url)
               txt = txt.replace(u.url,u.expanded_url);
             }

//alert("Result:"+txt);
            currData[currIndex].text=txt;
           } 
       }
 
                      
       preproceedEntries(currData,currIndex+1);

    }


    function preproceedEntries(v, ind)
    {
       if (ind>=v.length) { endProcess(); doTheRest(v); return;}

       var entry = v[ind];

       var txt = entry.text;
       if (txt.indexOf("http://t.co/")<0) 
       {
         preproceedEntries(v, ind+1);
         return ;
       }

//alert("Index:"+txt);

       currIndex = ind;
       currData = v;

       var s = "http://api.twitter.com/1/statuses/show/"+entry.id_str+".json?include_entities=true";

//alert("Get status:"+s);

       getTwitter(s+"&callback=results1");
    }


    function doTheRest(v)
    {
         var sText = "<table border='0'><tr>";  
         var max_id=-1;
         var count = 0;
         var columns = 2;

         if (!showTexts) columns = 4;

         for (var i=0; i<v.length; i++)
         { 
          var entry = v[i];
          var txt = entry.text;

          if (txt.indexOf("#pussy")>=0 || txt.indexOf("#ass")>=0 || txt.indexOf("#funny")>=0) continue;
          if (txt.indexOf("BREAKFAST")>=0) continue;

          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://plixi.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://lockerz.com")>=0 || txt.indexOf("http://instagr.am/p/")>=0 
             || txt.indexOf("http://p.twimg.com")>=0) 
          {  
           if (count%columns == 0 && count!=0) sText+="</tr><tr>";

           if (entry.max_id>max_id) max_id=entry.max_id;
           sText +="<td valign='top'>"+getEntry(entry)+"</td>";
           count++;
          }

         }

         while (count%columns!=0)
         {
           sText+="<td>&nbsp;</td>"; 
           count++;
         } 

         if (count==0)
         {
          seq++;
          if (seq>hosts.length)
          { seq=0;
            return noData();}
          else
            return init();       
         }

         seq=0;

         sText+="</tr></table>"; 
         document.getElementById('twitpic').innerHTML=sText;

         if (document.getElementById('controls').style.display=='none') 
           document.getElementById('controls').style.display='block';

         if (document.getElementById('controls0').style.display=='none') 
           document.getElementById('controls0').style.display='block';

    }

    function getEntry(entry)
    {
       var sText = '';

           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:80%;color:#555555'>"+dateDiff(new Date(entry.created_at), new Date());
 
          if (entry.from_user) 
             sText+=" by <a href='http://tinfo.linkstore.ru?u="+entry.from_user+"' target='_blank'>"+entry.from_user+"</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+="<br/><br/><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("@([a-zA-Z0-9_]+)", "g");
	tweet = tweet.replace(re, '@<a style="' + 'text-decoration:none;" target="_new" href=http://twitter.com/$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>';}	

        re = new RegExp("(http://yfrog.com/)([0-9a-zA-Z]*)");
	var 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>';}	

        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>';}	

        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>';}	

        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>';}	        

        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>';}	        

       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 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 cloud=[];
      var tag;
      var max = 0; 
      var res;
              
      for (var i=0; i<elems.length; i++)
      {
       tag = elems[i].toLowerCase();
       if (tag.length>3)
       {
        res = -1;

        for (var j=0; j<cloud.length; j++)
          if (cloud[j].el==tag)
           {
               res = j;
               j = cloud.length+1;               
           }


           if (res<0)
           {
             cloud[cloud.length] = { count: 1, el: tag };
             max = Math.max(1, max);
           }
           else 
           {
             cloud[res].count += 1;
             max = Math.max(cloud[res].count, max);
           }

       }
          
    }
      
    s='';    
    for (var i = 0; i < cloud.length; i++) {
      if (cloud[i].count>=2)
       s+='<a class="link1" style="font-size:' + Math.ceil((cloud[i].count / max) * scale) + 'em" href="http://search.twitter.com/search?q='+cloud[i].el+'" target="_blank">' + cloud[i].el + '</a> &nbsp; ';
      else
       s+='<span style="color:blue;font-size:' + Math.ceil((cloud[i].count / max) * scale) + 'em">' + cloud[i].el + '</span> &nbsp; ';
    }

    return s;  

    }

    function getTwitter(query)
    {
      var i = query.indexOf("callback=");
      var callback="";
      if (i>0)  
      {
          callback=query.substring(i+9);
          i=callback.indexOf("&");
          if (i>0) callback = callback.substring(0,i);           
      }

      var cbscript = document.createElement("script");
      cbscript.src = query;
      cbscript.type = 'text/javascript';
      cbscript.onerror = function() 
      { 

         if (callback) eval(callback+"('')");
         else
              alert("Loading failed!"); 
      }
      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";
   }

  
