    var map, geocoder, searchControl, errorCount; 

    var COUNT = 9;
    var showAuthors = false;
    var showTexts = false;

    var searchNow = false;

    function load1()
    {
      load();
      clickFunction(null, map.getCenter());
    }
      
    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);

        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
      if (google.loader.ClientLocation)
        localSearch.setCenterPoint(google.loader.ClientLocation.address.city+","+google.loader.ClientLocation.address.country);

/*
      document.getElementById("cntr").innerHTML = google.loader.ClientLocation.address.country+" ("+google.loader.ClientLocation.address.country_code+")"; 
      document.getElementById("city").innerHTML = google.loader.ClientLocation.address.city; 
      document.getElementById("rgn").innerHTML = google.loader.ClientLocation.address.region; 
*/      
      // Tell the searcher to draw itself and tell it where to attach
      searchControl.draw(document.getElementById("searchcontrol"));

      if (searchNow)
        clickFunction(null, new GLatLng(lat,lng));
    }

     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!=null) lat = _lat;
      else 
       lat = getCookie('gllat');

      if (lat.length==0) 
       if (google.loader) 
        if (google.loader.ClientLocation)
        {
         lat = google.loader.ClientLocation.latitude; 
        }

      if (!lat) lat = 55.68455275165637;

      if (_lng!=null) lng = _lng;
      else 
       lng = getCookie('glltd');

      if (lng.length==0)
       if (google.loader) 
        if (google.loader.ClientLocation)
        {
         lng = google.loader.ClientLocation.longitude;
        }

      if (!lng) lng = 37.733917236328125;

      if (_zml) zml = _zml;
      else 
       zml = getCookie('glzml');

      if (zml.length==0) zml=8;

       map.setCenter(new google.maps.LatLng(eval(lat),  eval(lng)), eval(zml), google.maps.G_NORMAL_MAP);

     }


    function clickFunction(overlay, latlng) {
      if (latlng) 
      {
        geocoder.getLocations(latlng, function(addresses) {
          if(addresses.Status.code != 200) {
            alert("Google reverse geocoder failed to find an address for " + latlng.toUrlValue());
          }
          else 
          {
            var address = addresses.Placemark[0];
            var lng = address.Point.coordinates[0];
            var lat = address.Point.coordinates[1];
           
            //alert(lat+":"+lng+" "+getStreet(address));

            var myHtml = address.address;
            map.openInfoWindow(latlng, myHtml);

            searchControl.execute(getStreet(address));

            errorCount=0;
            var sTwit="&geocode="+lat+"%2C"+lng+"%2C20mi&lang=all";

            searchTwitter(sTwit);
          }
        });
      }
    }

    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;

//alert(dumpObj(o, "Sub", " ", 5));

                if (o)
                { 
                 if (o.LocalityName)
                 {
                  if (o.Thoroughfare)
                     return o.LocalityName+" "+o.Thoroughfare.ThoroughfareName;
                  else
                     if (o.DependentLocality)
                     {
                       if (o.DependentLocality.Thoroughfare) 
                        return o.LocalityName+" "+o.DependentLocality.Thoroughfare.ThoroughfareName;  
                       else
                        return o.LocalityName+" "+o.DependentLocality.DependentLocalityName;
                     } 
                     else
                        return o.LocalityName;
                 }
                }
              }
              else
                if (o.Locality)
                { 
                  if (o.Locality.Thoroughfare) 
                       return o.Locality.LocalityName+" "+o.Locality.Thoroughfare.ThoroughfareName;
                  else
                       return o.Locality.LocalityName;
                }
           } 
         }
       }
       return addr.address;
    }

   function getTwitter(query)
    {
      var cbscript = document.createElement("script");
      cbscript.src = query;
      cbscript.type = 'text/javascript';
      document.body.appendChild(cbscript);
    }

   function searchTwitter(_query)
   {

     var query="twitpic OR yfrog";

     var s = "http://search.twitter.com/search.json?lang=all&q="+encodeURIComponent(query)+_query+"&rpp="+COUNT;

     getTwitter(s+"&callback=results");
   }

   function results(t)
   {
       var v = t.results;
       var sHtml='';

       if (v.length==0)
       {
         var sHtml = "No pictures from Twitter"
                   + "<br/>" 
                   + "Try to move map and change position"
                   + "<br/><br/>"; 
               
         return;
       }
       else
       {
         sHtml="<table border='0'><tr>"; 
         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)
          {  
           sHtml+="<td valign='top'>"+getEntry(entry)+"</td>";
           if ((i+1)%3==0) sHtml+="</tr>";

           if ((i+1)%3==0 && i!=v.length-1) sHtml+="<tr>";
          }

         }
          
         var j = v.length;
         while ((j+1)%3!=0)
         {
           sHtml+="<td valign='top'>&nbsp;</td>";
           j++;
         }

         sHtml+="</tr></table>";

//alert(sHtml);

       } 

       document.getElementById('twitter').innerHTML = sHtml;

    }

    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+="<center><span style='font-size:80%;color:#555555'>"+dateDiff(new Date(entry.created_at), new Date());
 
          if (entry.from_user) 
             sText+=" by <a href='http://twitter.com/"+entry.from_user+"' target='_blank'>"+entry.from_user+"</a>";

           sText+="<br/>";
           sText+="<a href='http://twitter.com/home?status=@"+entry.from_user+"&in_reply_to_status_id="+entry.id+"&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
                 +"' target='_blank' title='Show tweet'>View tweet</a>";

           sText+="</span></center>";

           sText+="<br/><br/>";

           return sText;
    }

    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>';}	

      return tweet;
    }

    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 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 getName(s)
  {
     var i = s.indexOf(" ");
     if (i>0) return s.substring(0,i); 
     else     return s;
  }

  function pauseComp(millis)
  {
   var date = new Date();
   var curDate = null;

   do { curDate = new Date(); }
   while(curDate-date < millis);
  } 

     var MAX_DUMP_DEPTH = 10;

     function dumpObj(obj, name, indent, depth) {

              if (depth > MAX_DUMP_DEPTH) {
                     return indent + name + ": <Maximum Depth Reached>\n";
              }

              if (typeof obj == "object") {
                     var child = null;
                     var output = indent + name + "\n";
                     indent += "\t";
                     for (var item in obj)
                     {
                           try {
                                  child = obj[item];
                           } catch (e) {
                                  child = "<Unable to Evaluate>";
                           }
                           if (typeof child == "object") {

                                  output += dumpObj(child, item, indent, depth + 1);
                           } else {

                                  output += indent + item + ": " + child + "\n";
                           }

                     }
                     return output;

              } else {
                     return obj;
              }

       }
 

