text: var BingMapsApi=require('./BingMapsApi');
  var Check=require('./Check');
  var defaultValue=require('./defaultValue');
  var defined=require('./defined');
  var defineProperties=require('./defineProperties');
  var Rectangle=require('./Rectangle');
  var Resource=require('./Resource');
  
      'use strict';
  
      var url = 'https://dev.virtualearth.net/REST/v1/Locations';
  
      /**
       * Provides geocoding through Bing Maps.
       * @alias BingMapsGeocoderService
       * @constructor
       *
       * @param {Object} options Object with the following properties:
       * @param {String} [options.key] A key to use with the Bing Maps geocoding service
       */
      function BingMapsGeocoderService(options) {
          options = defaultValue(options, defaultValue.EMPTY_OBJECT);
  
          var key = options.key;
          this._key = BingMapsApi.getKey(key);
  
          this._resource = new Resource({
              url: url,
              queryParameters: {
                  key: this._key
              }
          });
      }
  
      defineProperties(BingMapsGeocoderService.prototype, {
          /**
           * The URL endpoint for the Bing geocoder service
           * @type {String}
           * @memberof BingMapsGeocoderService.prototype
           * @readonly
           */
          url : {
              get : function () {
                  return url;
              }
          },
  
          /**
           * The key for the Bing geocoder service
           * @type {String}
           * @memberof BingMapsGeocoderService.prototype
           * @readonly
           */
          key : {
              get : function () {
                  return this._key;
              }
          }
      });
  
      /**
       * @function
       *
       * @param {String} query The query to be sent to the geocoder service
       * @returns {Promise<GeocoderService~Result[]>}
       */
      BingMapsGeocoderService.prototype.geocode = function(query) {
          //>>includeStart('debug', pragmas.debug);
          Check.typeOf.string('query', query);
          //>>includeEnd('debug');
  
          var resource = this._resource.getDerivedResource({
              queryParameters: {
                  query: query
              }
          });
  
          return resource.fetchJsonp('jsonp').then(function(result) {
              if (result.resourceSets.length === 0) {
                  return [];
              }
  
              var results = result.resourceSets[0].resources;
  
              return results.map(function (resource) {
                  var bbox = resource.bbox;
                  var south = bbox[0];
                  var west = bbox[1];
                  var north = bbox[2];
                  var east = bbox[3];
                  return {
                      displayName: resource.name,
                      destination: Rectangle.fromDegrees(west, south, east, north)
                  };
              });
          });
      };
  
      module.exports= BingMapsGeocoderService;
  