text: var utils = require( "./utils" ),
      array = [];
  
  
  /**
   *
   * @class Hobo
   * @constructor
   * @classdesc A very small, modular DOM utility for modern web apps.
   * @param {string} selector The goods - String, Element, Collection.
   * @param {element} context The Element used to call `querySelectorAll`
   *
   */
  var Hobo = function ( selector, context ) {
      // Hobo version?
      this._hobo = utils.version;
  
      // Hobo context
      this._context = (context && context.nodeType && context.nodeType === 1 ? context : document);
  
      // Hobo selector / elements
      // Hobo supports a mixed selector argument
  
      // Handle Window
      // Handle Document
      // Handle DOMElement
      if ( selector === window || selector === document || (selector.nodeType && selector.nodeType === 1) ) {
          this._selector = "";
          selector = [ selector ];
  
      // Handle String
      } else if ( typeof selector === "string" ) {
          // Trim trailing whitespace from the string
          selector = utils.trimString( selector );
  
          // Handle string html => Element creation
          if ( utils.rTag.test( selector ) ) {
              // Then remove the doctype - `<!DOCTYPE html>`
              selector = selector.replace( utils.rDocType, "" );
  
              // Create a dummy `hobo` element
              // Dump the HTML payload in the `hobo` element
              // Extract the elements from the `hobo` element
              var el = document.createElement( "hobo" );
                  el.innerHTML = selector;
  
              // Format elements as a true Array
              selector = utils.makeArray( el.children );
  
              el = null;
  
          // Handle string selector
          } else {
              this._selector = selector;
              selector = utils.makeArray( this._context.querySelectorAll( selector ) );
          }
  
      // Handle Collection: NodeList, HTMLCollection, Array
      } else if ( selector.length !== undefined ) {
          this._selector = "";
          selector = utils.makeArray( selector );
      }
  
      // Hobo events?
      this._events = {};
  
      // Hobo length?
      this.length = selector.length;
  
      // Hobo elements?
      for ( var i = this.length; i--; ) {
          this[ i ] = selector[ i ];
      }
  
      // Initial mapping of each nodes data.
      // Transfer {DOMStringMap} => {hoboDataMap}
      this.forEach( utils.makeData );
  };
  
  
  // Shim Array-like presentation in console
  Hobo.prototype.splice = array.splice;
  
  
  /**
   *
   * @instance
   * @method each
   * @param {function} callback The method called on each iteration
   * @memberof Hobo
   * @description Make sure Hobo is iterable like an Array
   *
   */
  Hobo.prototype.each = array.forEach;
  
  
  /**
   *
   * @instance
   * @method forEach
   * @param {function} callback The method called on each iteration
   * @memberof Hobo
   * @description Make sure Hobo is iterable like an Array
   *
   */
  Hobo.prototype.forEach = array.forEach;
  
  
  /**
   *
   * @instance
   * @method push
   * @param {?} element element1, ..., elementN
   * @memberof Hobo
   * @description Make sure Hobo is pushable like an Array
   *
   */
  Hobo.prototype.push = array.push;
  
  
  /**
   *
   * @instance
   * @method map
   * @param {function} callback The method called for each element
   * @memberof Hobo
   * @description Make sure Hobo is mappable like an Array
   *
   */
  Hobo.prototype.map = array.map;
  
  
  // Export the main Hobo Class :D
  module.exports = Hobo;
  