     var map=null;
     var geocoder=null;
     var mrk=null;
     var lastMarker = null;

     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.addMapType(G_SATELLITE_3D_MAP);


         map.enableScrollWheelZoom();
         map.enableContinuousZoom();
*/
         map.setUIToDefault();

          if (lat!='' && lng!='')
            initMap(lat,lng,zml);
         else
          {

           // W3C geolocation API provides 
	      if (typeof(navigator.geolocation) != 'undefined') {
		try {
			navigator.geolocation.getCurrentPosition(function(position) {
				initMap(position.coords.latitude, position.coords.longitude, zml);
			}, function() {
				// fail - geolocation denied by user. do nothing.
                           initMap(lat,lng,zml);
			});
		} catch (e) {}
               }
              else
              {
               initMap(lat,lng,zml);               
              }

	 }	


         map.addControl(new ExtMapTypeControl({showTraffic: true, showTrafficKey: true}));
         map.enableGoogleBar(); 

         if (mrk)
         {
          var point = new google.maps.LatLng(lat, lng);
          lastMarker = new google.maps.Marker(point,{draggable: true});
          map.addOverlay(lastMarker);
          setListeners(lastMarker);
/*
          GEvent.addListener(lastMarker, "click", function(position) {
           var lat = position.lat();
           var lng = position.lng();
           var myHtml = "<b>Lat:</b> &nbsp; " + lat +" <br><b>Lng:</b> &nbsp; "+lng
                      + "<br/><b>Local:</b> &nbsp; <a title='Local news' target='_blank' href='http://tgazeta.linkstore.ru?lat="+lat+"&lng="+lng+"'>news</a>"
                      + " &nbsp; <a title='Local people' target='_blank' href='http://lt.linkstore.ru?lat="+lat+"&lng="+lng+"'>people</a>"
                      + " &nbsp; <a title='Local photo' target='_blank' href='http://photomap.linkstore.ru?lat="+lat+"&lng="+lng+"'>photo</a>"
                      + "<br/><b>Misc:</b> &nbsp; "
                      + "<a title='Local search' target='_blank' href='http://geo.linkstore.ru?lat="+lat+"&lng="+lng+"'>search</a>"
                      + " &nbsp; <a title='Link to this' target='_blank' href='http://geotalk.linkstore.ru?lat="+lat+"&lng="+lng+"'>link</a>";
            map.openInfoWindowHtml(point, myHtml);
          });

         GEvent.addListener(lastMarker, "dragstart", function() {
            map.closeInfoWindow();
          });
*/
         
         }

         GEvent.addListener(map,"moveend",function()
         {
          var lat = map.getCenter().lat();
          var lng = map.getCenter().lng();
          setCookie('gllat',lat,365);
          setCookie('glltd',lng,365);
          setCookie('glzml',map.getZoom(),365);

          if (mrk)
          {

           var balloon = map.getInfoWindow();
           if (!balloon.isHidden()) return;
           
           if (lastMarker) map.removeOverlay(lastMarker);
           var point = new google.maps.LatLng(lat, lng);
           var t = "Lat:"+lat + " Lng:"+lng;
           lastMarker = new google.maps.Marker(point,{title:t,draggable:true});
           map.addOverlay(lastMarker);
           setListeners(lastMarker);
          }

         });

        }

        GEvent.addListener(map, "click", clickFunction);

        var publisher_id = "pub-9490590989861158"; 

        adsManagerOptions = {
        maxAdsOnMap : 2,
        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();

      getHelp();
    }

     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 
          { address = addresses.Placemark[0];
            var myHtml = address.address;
            map.openInfoWindow(latlng, myHtml); }
        });
      }
    }
    
    function setListeners(_lastMarker)
    {
           google.maps.Event.addListener(_lastMarker, "click", function(position) {
           var lat = position.lat();
           var lng = position.lng();
           var myHtml = "<b>Lat:</b> &nbsp; " + lat +" <br><b>Lng:</b> &nbsp; "+lng
                      + "<br/><b>Local:</b> &nbsp; <a title='Local news' target='_blank' href='http://tgazeta.linkstore.ru?lat="+lat+"&lng="+lng+"'>news</a>"
                      + " &nbsp; <a title='Local people' target='_blank' href='http://lt.linkstore.ru?lat="+lat+"&lng="+lng+"'>people</a>"
                      + " &nbsp; <a title='Local photo' target='_blank' href='http://photomap.linkstore.ru?lat="+lat+"&lng="+lng+"'>photo</a>"
                      + "<br/><b>Misc:</b> &nbsp; "
                      + "<a title='Local search' target='_blank' href='http://geo.linkstore.ru?lat="+lat+"&lng="+lng+"'>search</a>"
                      + " &nbsp; <a title='Link to this' target='_blank' href='http://geotalk.linkstore.ru?lat="+lat+"&lng="+lng+"'>link</a>";
            map.openInfoWindowHtml(position, myHtml);
          });

          google.maps.Event.addListener(_lastMarker, "dragstart", function() {
            map.closeInfoWindow();
          });

          google.maps.Event.addListener(_lastMarker, "dragend", function(position) {
            var lat = position.lat();
            var lng = position.lng();
            if (lastMarker) map.removeOverlay(lastMarker);
            var t = "Lat:"+lat + " Lng:"+lng;
            lastMarker = new google.maps.Marker(position,{title:t,draggable:true});
            map.addOverlay(lastMarker);
            setListeners(lastMarker);
          });

    }

    
     function initMap(_lat,_lng,_zml)
     {
      var lat,lng,zml;

      if (_lat) lat = _lat;
      else 
       lat = getCookie('gllat');

      if (google.loader) 
        if (google.loader.ClientLocation)
         if (lat.length==0) lat = google.loader.ClientLocation.latitude; 

      if (lat.length==0) lat = 55.68455275165637;

      if (_lng) lng = _lng;
      else 
       lng = getCookie('glltd');

      if (google.loader) 
        if (google.loader.ClientLocation)
         if (lng.length==0) lng = google.loader.ClientLocation.longitude; 

      if (lng.length==0) lng = 37.733917236328125;

      if (_zml) zml = _zml;
      else 
       zml = getCookie('glzml');

      if (zml.length==0) zml=4;

      map.setCenter(new google.maps.LatLng(lat,lng),parseInt(zml));
     }

      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 beforeAction()
   {
     document.getElementById("indicator").style.display='block';
   }

   function afterAction()
   {
     document.getElementById("indicator").style.display='none';
   }

   function handlerFunction(txt, xmlDoc)
   {
     if (txt)
     {
       txt = trimResponse(txt);
       if (txt.indexOf("http://")>=0) location.href=txt;
       else                           alert(txt);  
     }
   } 

   function errorFunction()
   {
     alert("Could not create URL for this map");
   }
     
   function getHelp()
   {
     var o = document.getElementById("help");
     var h = (window.screen.height - 400);
     if (h < 280) h = 280;
     o.style.height=h+"px";
     o.style.display = 'block';
     document.forms['mf'].txt.focus();
   } 

  function createForum(ip)
  {
    var s = document.forms['mf'].txt.value;
    if (s=='')
    {
      alert("Please, type a question");
      return;
    }

   var lat = lastMarker.getLatLng().lat();
   var lng = lastMarker.getLatLng().lng();
   var z = map.getZoom();

   var query = "t="+encodeURIComponent(s)+"&ip="+ip+"&lat="+lat+"&lng="+lng+"&z="+z;  
   cjAjaxEnginePost("/geotalk/savenote.jsp",query,handlerFunction,errorFunction,beforeAction,afterAction);
    
  }

  
    function moveMap(lat,lng,zoom,mt)
    {
       var z;
       if (zoom) z = eval(zoom);
       else      z = map.getZoom();

       var m;

       if (mt) m = getGoogleMapType(mt);
       else    m = map.getCurrentMapType();

       map.setCenter(new google.maps.LatLng(eval(lat),eval(lng)),z,m);
    }
    
   function getGoogleMapType(mapType)
   {
     if (mapType=='0') return google.maps.G_NORMAL_MAP;
     else
      if (mapType=='1') return google.maps.G_SATELLITE_MAP;
      else
       if (mapType=='2') return google.maps.G_HYBRID_MAP;

     return google.maps.G_NORMAL_MAP;
   }

  function trimResponse(s0)
  { if (s0==null) return s0; s=s0;

  var s1 = ' ';
  while (s.length>0 && s1==' ')
  {
   s1 = s.substring(s.length-1); 
   if (s1==' ' || s1=='\r' || s1=='\n' || s1=='\t') { s=s.substring(0,s.length-1); s1=' '; }      
  }

  while (s.length>0)
  { s1=s.substring(0,1);
    if (s1==' ' || s1=='\r' || s1=='\n' || s1=='\t') s=s.substring(1);
    else  return s; }

  return '';}












