    var map, geocoder, searchControl, lastMarker, poly; 

    var scale=2; 
  
    var currentRadius=15;

   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", "i", "if", "in", "into",
  "is", "it", "its", "itself", "last", "lastly", "less", "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", "thanks", "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 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();

        var needClick = false;

        if (lat && lng) needClick = true;

        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(); 

       if (needClick)
         clickFunction(null, new GLatLng(lat, lng));
      }

      // 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"));
    }

var bounds = new GLatLngBounds();
function fit(){
map.panTo(bounds.getCenter()); 
map.setZoom(map.getBoundsZoomLevel(bounds));
}

function drawCircle(center, radius, nodes, liColor, liWidth, liOpa, fillColor, fillOpa)
{
	//calculating km/degree
	var latConv = center.distanceFrom(new GLatLng(center.lat()+0.1, center.lng()))/100;
	var lngConv = center.distanceFrom(new GLatLng(center.lat(), center.lng()+0.1))/100;

	//Loop 
	var points = [];
	var step = parseInt(360/nodes)||10;
	for(var i=0; i<=360; i+=step)
	{
	var pint = new GLatLng(center.lat() + (radius/latConv * Math.cos(i * Math.PI/180)), center.lng() + 
	(radius/lngConv * Math.sin(i * Math.PI/180)));
	points.push(pint);
	bounds.extend(pint); //this is for fit function
	}
	points.push(points[0]); // Closes the circle, thanks Martin
	fillColor = fillColor||liColor||"#0055ff";
	liWidth = liWidth||2;
	poly = new GPolygon(points,liColor,liWidth,liOpa,fillColor,fillOpa);
	map.addOverlay(poly);
}


     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();

         refresh(lat, lng);                       
      }
     else
      if (overlay==poly)
        map.removeOverlay(poly); 

    }

    function results(t)
    {
       var v ='';
       if (t) v = t.results;

       if (v.length==0)
       {
         document.getElementById("bottom").innerHTML="<div class='error'>nobody writes here"
                                                    +getRadiusForm()
                                                    +"</div>";   
         setRadius();
       }
       else
       {
         var sText = '';
         var desc = '';
         var hash = new Array();
         var cnt = 0;
         for (var i=0; i<v.length; i++)
         {
           sText += v[i].text + ' '; 
           if (hash[v[i].profile_image_url]==null)
           {
             desc += "<a style='text-decoration:none' href='http://tinfo.linkstore.ru?u="+v[i].from_user+"' target='_blank' title='"+v[i].from_user+"'><img src ='"+v[i].profile_image_url+"' width='48px' height='48px' border='0' alt='"+v[i].from_user+"'></a>&nbsp;"; 
             hash[v[i].profile_image_url]='1';
             cnt++;
             if (cnt==4) { cnt=0; desc+="<br/>"; } 
           }

         }

         sText = processText(sText);
         sText +=getRadiusForm();
         
         sText = "<div style='padding-left:10px; padding-right:10px'>"+sText+"</div>";
         document.getElementById('bottom').innerHTML=sText;

         setRadius();

         if (lastMarker!=null)
         {
           var link = "http://search.twitter.com/search"; 
           var lat = lastMarker.getLatLng().lat();
           var lng = lastMarker.getLatLng().lng();
           link+="?q=&near="+lat+"%2C"+lng+"&within="+currentRadius+"&units=mi";
           var sHtml = "<div style='width:250px;height:200px;padding-left:10px;overflow:scroll'>"
                       + "<h1>Most active:</h1>"+"<br/><br/><span>"+desc+"</span><br/><br/>"
                       + "<a href='http://tgazeta.linkstore.ru?lat="+lat+"&lng="+lng+"' title='local search' target='_blank'>Newspaper</a>"
                       + "&nbsp;&nbsp;"
                       + "<a href='"+link+"' title='See more details' target='_blank'>More</a>"
                       + "&nbsp;&nbsp;"
                       + "<a href='http://lt.linkstore.ru?lat="+lat+"&lng="+lng+"' title='get a link for this area' target='_blank'>Link</a>"
                       + "&nbsp;&nbsp;"
                       + "<a href='http://twitter.com/home?status="+escape("http://lt.linkstore.ru?lat="+lat+"&lng="+lng)+"' title='share with Twitter' target='_blank'>Share</a>"
                       + "<br/>&nbsp;</div>"
           GEvent.addListener(lastMarker, "click", function() {
             lastMarker.openInfoWindowHtml(sHtml);
            });

            lastMarker.openInfoWindowHtml(sHtml);
         }

       } 
    }

    function getRadiusForm()
    {
         var s ="<br/>&nbsp;<br/><form name='mf'><strong style='font-size:120%'>Radius</strong> (mi): &nbsp; "
               +"<input type='radio' name='r' onClick='changeRadius(5)'>5 &nbsp; <input type='radio' name='r' onClick='changeRadius(10)'>10 "
               +"&nbsp; <input type='radio' name='r' onClick='changeRadius(15)'>15 &nbsp; <input type='radio' name='r' onClick='changeRadius(20)'>20 "
               +"&nbsp; <input type='radio' name='r' onClick='changeRadius(25)'>25 &nbsp; ";

         if (lastMarker!=null)
         {
            s +="<a href='javascript:void(0)' onClick='refresh("
              +lastMarker.getLatLng().lat()+","
              +lastMarker.getLatLng().lng()+")' title='Refresh data'>Refresh</a>";
         }

         s+="</form>";

         return s;
    }

    function refresh(lat, lng)
    {
         if (lastMarker) map.clearOverlays(); //map.removeOverlay(lastMarker);
         var point = new GLatLng(lat, lng);

         var radius = currentRadius*1.609;
         
         drawCircle(point, radius, 40);

         lastMarker = new GMarker(point,{title:'See local faces'});
         map.addOverlay(lastMarker);  

         var s ="http://search.twitter.com/search.json?lang=all&geocode="+lat+"%2C"+lng+"%2C"+currentRadius+"mi"+"&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");
    }

    function changeRadius(n)
    {
      currentRadius=n;
    }

    function setRadius()
    {
      if (currentRadius==5) document.forms['mf'].r[0].checked=true;
      else
       if (currentRadius==10) document.forms['mf'].r[1].checked=true;
       else
        if (currentRadius==15) document.forms['mf'].r[2].checked=true;
        else
         if (currentRadius==20) document.forms['mf'].r[3].checked=true;
         else  
          if (currentRadius==25) document.forms['mf'].r[4].checked=true;
    }

    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 && !isStop(tag))
       {
        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 || cloud[i].el.indexOf("#")==0)
       s+='<a class="link1" style="font-size:' + Math.ceil((cloud[i].count / max) * scale) + 'em" href="http://search.twitter.com/search?q='+encodeURIComponent(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 cbscript = document.createElement("script");
      cbscript.src = query;
      cbscript.type = 'text/javascript';
      document.body.appendChild(cbscript);
    }

    function getStreet(addr)
    {
       if (addr.AddressDetails)
       {
         var o = addr.AddressDetails;
         if (o.Country)
         {
           o = o.Country;
           if (o.AdministrativeArea)
           {
             o = o.AdministrativeArea;

             if (o.Thoroughfare)
             { 
              if (o.Thoroughfare.ThoroughfareName) 
                return o.Thoroughfare.ThoroughfareName;
             }
             else
              if (o.SubAdministrativeArea)
              {
                o = o.SubAdministrativeArea.Locality;
                if (o)
                {  
                  if (o.Thoroughfare)
                  return o.Thoroughfare.ThoroughfareName;
                else
                  if (o.LocalityName)
                    return o.LocalityName;
                }
              }
              else
                if (o.Locality)
                { 
                  if (o.Locality.Thoroughfare) 
                       return o.Locality.Thoroughfare.ThoroughfareName;
                }
           } 
         }
       }
       return addr.address;
    }

function isStop(s)
{
 
  for (var i=0; i<stopwords.length; i++)
  {
    if (s==stopwords[i]) return true;
  }

  return false;

}
