text: var request = require('request');
  var parseXml = require('xml2js').parseString;
  
  /**
   * Asynchronously returns the data for the given bill status as JSON
   * @param {string} billName - The name of bill (i.e. "BILLSTATUS-115hr99")
   * @param {function} callback - Callback
   * @param {object} options - Options (Optional)
   * @param {boolean} options.clean - Enable / disable automatic cleaning of bill (default: true)
   * @return {object} - JSON result
   * @example
   * getBillStatus("BILLSTATUS-115hr99", function(res){
   *  //res is a JSON object
   * });
   */
  
  var getBillStatus = function(billName, callback, options){
    options = options || {};
    var clean = ("clean" in options) ? options.clean : true;
  
    if(typeof clean != "boolean") throw new TypeError("'options.clean' must be a boolean", "getBillStatus.js", 21);
    if(typeof billName != "string") throw new TypeError("'billName' needs to be a String", "getBillStatus.js", 22);
    if(callback == null) throw new TypeError("A callback needs to be included", "getBillStatus.js", 23);
    if(!/^BILLSTATUS-11[3-5](s|hr)[0-9]+$/i.test(billName)) throw new TypeError("'billName' needs to be a valid bill name", "getBillStatus.js", 24);
  
    var requestUrl = "https://www.gpo.gov/fdsys/bulkdata/BILLSTATUS/" + billName.replace("BILLSTATUS-", "").replace(/(s|hr).+$/g, "") + "/" + billName.replace(/BILLSTATUS-11[3-5]/, "").replace(/[0-9]+/g, "") + "/" + billName + ".xml";
  
  
    request(requestUrl, function (err, res, xml){ //Access the XML file from the GPO
      if(err) throw err;
      if(xml.indexOf("<title>Content Unavailable</title>") != -1) throw new TypeError("'billName' needs to be an actual bill", "getBillStatus.js", 31);
  
      parseXml(xml, function (error, json){
        if(err) throw err;
        json = json.billStatus.bill[0];
  
        if(clean){
          var cleanBillStatus = require("../parser/cleanBillStatus");
          cleanBillStatus(json, function(cleanedRes){
            callback(cleanedRes);
          });
        }
        else{
          callback(json);
        }
      });
    });
  };
  
  module.exports = getBillStatus;
  