﻿function GMClientReverseGeocoder ()
{
  GMClientReverseGeocoder.gdir = new GDirections();
  this.geocoder = new GClientGeocoder();  

  GEvent.addListener(GMClientReverseGeocoder.gdir, 'load',  this._dirLoadHandler);
}

// ============================================================================

GMClientReverseGeocoder.prototype.getAddress = function (latLng, callback)
{
  GMClientReverseGeocoder.callback = callback;

  GMClientReverseGeocoder.gdir.loadFromWaypoints(
  
    [new GLatLng(55.755786, 37.617633), latLng],
    {
      getSteps: true,
      locale  : this.getBaseCountryCode()
    }
  ); 
}

GMClientReverseGeocoder.prototype.getBaseCountryCode = function ()
{
  return this.countryCode;
}

GMClientReverseGeocoder.prototype.setBaseCountryCode = function (countryCode)
{
  this.countryCode = countryCode;
}

GMClientReverseGeocoder.prototype.setViewpoint = function (bounds)
{
  this.geocoder.setViewport(bounds); 
}

// ============================================================================

GMClientReverseGeocoder.prototype._dirLoadHandler = function ()
{
  if (GMClientReverseGeocoder.gdir.getNumRoutes() != 0)
  {
      var route = GMClientReverseGeocoder.gdir.getRoute(0);
      
      if (route.getNumSteps() != 0)
      {
          var s;
          var i = route.getNumSteps();
          
          do
          {
              s = route.getStep(--i).getDescriptionHtml();
      //alert(s + ' ' + route.getNumSteps() + ' ' + GMClientReverseGeocoder.gdir.getNumRoutes());
      //alert(s.lastIndexOf("<b>"))
              
              if (s.lastIndexOf("<b>") == -1) continue;
          
              var street = s.substring(s.lastIndexOf("<b>") + 3, s.lastIndexOf("</b>"));
              
              if (street.lastIndexOf("/<wbr/>") > 0)
              {
                  street = street.substring(0, street.lastIndexOf("/<wbr/>"));
              }
              
          } while (i > 0 && (
          
            !street ||
            street == 'разворот' ||
            street == 'налево'   ||
            street == 'направо'  ||
            street == 'Сверните'
          ));
          
          //alert('Result (' + i + '): ' + street);
          
          GMClientReverseGeocoder.callback(street ? street : '');
      }
  }    
}