Source: pxcel.js

/**
 * @overview 
 * 
 * This is a tool to track as much as possible from a small image fetch.<p />
 *
 * Though cookie tracking is done, it does not create cookies.<br />
 * This is because cookies created by the http request cannot be altered by the javascript.<br />
 * Attempts to create identical cookies results in two cookies stored by the browser.<p>
 *
 * Instead, all parameters except the tracking cookie itself are stored as request arguments.<p />
 *
 * Because state tracking is no longer needed, this library has been reduced from a class to a single function<br />
 * that is called when the page is loaded.<p />
 *
 * Of note, is the use of the Valve Fingerprint2 library (https://github.com/Valve/fingerprintjs2), which is signifantly larger than this.<br />
 * It is the main purpose of having this codebase.<br />
 *
 * Fingerprints are a way of uniquely identifying a browser if cookies are turned off or unreliable by getting every piece of <br />
 * information about a system that is available to the browser and concatenating and MD5summing it in order to generate a unique system key.
 * 
 * @module Pxcel Tracker
 * @author Rusty Phillips
 * @version 0.1
 */

/**
 * Adds an image to the page.
 * 
 * @param {hash} attributes - A tuple containing name value pairs that are added to the source of the image.
 */
function Pxcel(attributes) {
  var path = document.location.protocol + '//www.pxcels.com/1x1.gif';

  /** 
   * Returns the cookie with the given name by parsing the cookie file.
   * @private
   */
  getCookie = function(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
      var c = ca[i];
      while (c.charAt(0) == ' ') c = c.substring(1);
      if (c.indexOf(name) === 0) return c.substring(name.length, c.length);
    }
    return null;
  };

  /** 
   * Returns the fingerprint of the current browser. 
   * @private
   */
  pxcel_ff = function() {
    fp_cookie = getCookie('hpy_f');
    if (fp_cookie !== null)
      return fp_cookie;
    if (typeof(self.pxcel_f) == 'undefined')
      new Fingerprint2().get(function(md5) {
        self.pxcel_f = md5;
      });
    return self.pxcel_f;
  };
/*  This approach is probably not going to be used because of the way we need to do https.
  if (attributes) {
    var node = document.createElement('img');
    src = path + "?hpy_f=" + self.pxcel_ff();
    for (var key in attributes) {
      src += '&' + key + '=' + attributes[key];
    }
    node.setAttribute("src", src);
    document.getelementsbytagname('body')[0].appendchild(node);
  }
*/
  if (_pxl) {
    for (i = 0; i < _pxl.length; i++) {
      var node = document.createElement('img');
      var src = path + "?hpy_f=" + self.pxcel_ff();
      for (var val in _pxl[i])
        src += '&' + val + '=' + _pxl[i][val];
      node.setAttribute("src", src);
      document.getElementsByTagName('body')[0].appendChild(node);
    }
  }
}

Pxcel();