text: /**
   * Durandal 2.1.0 Copyright (c) 2012 Blue Spire Consulting, Inc. All Rights Reserved.
   * Available via the MIT license.
   * see: http://durandaljs.com or https://github.com/BlueSpire/Durandal for details.
   */
  /**
   * Enables common http request scenarios.
   * @module http
   * @requires jquery
   * @requires knockout
   */
  define(['jquery', 'knockout'], function ($, ko) {
      /**
       * @class HTTPModule
       * @static
       */
      return {
          /**
           * The name of the callback parameter to inject into jsonp requests by default.
           * @property {string} callbackParam
           * @default callback
           */
          callbackParam: 'callback',
          /**
           * Converts the data to JSON.
           * @method toJSON
           * @param {object} data The data to convert to JSON.
           * @return {string} JSON.
           */
          toJSON: function(data) {
              return ko.toJSON(data);
          },
          /**
           * Makes an HTTP GET request.
           * @method get
           * @param {string} url The url to send the get request to.
           * @param {object} [query] An optional key/value object to transform into query string parameters.
           * @param {object} [headers] The data to add to the request header.  It will be converted to JSON. If the data contains Knockout observables, they will be converted into normal properties before serialization.
           * @return {Promise} A promise of the get response data.
           */
          get: function (url, query, headers) {
              return $.ajax(url, { data: query, headers: ko.toJS(headers)});
          },
          /**
           * Makes an JSONP request.
           * @method jsonp
           * @param {string} url The url to send the get request to.
           * @param {object} [query] An optional key/value object to transform into query string parameters.
           * @param {string} [callbackParam] The name of the callback parameter the api expects (overrides the default callbackParam).
           * @param {object} [headers] The data to add to the request header.  It will be converted to JSON. If the data contains Knockout observables, they will be converted into normal properties before serialization.
           * @return {Promise} A promise of the response data.
           */
          jsonp: function (url, query, callbackParam, headers) {
              if (url.indexOf('=?') == -1) {
                  callbackParam = callbackParam || this.callbackParam;
  
                  if (url.indexOf('?') == -1) {
                      url += '?';
                  } else {
                      url += '&';
                  }
  
                  url += callbackParam + '=?';
              }
  
              return $.ajax({
                  url: url,
                  dataType: 'jsonp',
                  data: query,
                  headers: ko.toJS(headers)
              });
          },
          /**
           * Makes an HTTP PUT request.
           * @method put
           * @param {string} url The url to send the put request to.
           * @param {object} data The data to put. It will be converted to JSON. If the data contains Knockout observables, they will be converted into normal properties before serialization.
           * @param {object} [headers] The data to add to the request header.  It will be converted to JSON. If the data contains Knockout observables, they will be converted into normal properties before serialization.
           * @return {Promise} A promise of the response data.
           */
          put:function(url, data, headers) {
              return $.ajax({
                  url: url,
                  data: this.toJSON(data),
                  type: 'PUT',
                  contentType: 'application/json',
                  dataType: 'json',
                  headers: ko.toJS(headers)
              });
          },
          /**
           * Makes an HTTP POST request.
           * @method post
           * @param {string} url The url to send the post request to.
           * @param {object} data The data to post. It will be converted to JSON. If the data contains Knockout observables, they will be converted into normal properties before serialization.
           * @param {object} [headers] The data to add to the request header.  It will be converted to JSON. If the data contains Knockout observables, they will be converted into normal properties before serialization.
           * @return {Promise} A promise of the response data.
           */
          post: function (url, data, headers) {
              return $.ajax({
                  url: url,
                  data: this.toJSON(data),
                  type: 'POST',
                  contentType: 'application/json',
                  dataType: 'json',
                  headers: ko.toJS(headers)
              });
          },
          /**
           * Makes an HTTP DELETE request.
           * @method remove
           * @param {string} url The url to send the delete request to.
           * @param {object} [query] An optional key/value object to transform into query string parameters.
           * @param {object} [headers] The data to add to the request header.  It will be converted to JSON. If the data contains Knockout observables, they will be converted into normal properties before serialization.
           * @return {Promise} A promise of the get response data.
           */
          remove:function(url, query, headers) {
              return $.ajax({
                  url: url,
                  data: query,
                  type: 'DELETE',
                  headers: ko.toJS(headers)
              });
          }
      };
  });
  