Added modified version of the JQuery sparkline library.
Added modified version of the JQuery sparkline library.

  /*
  * This file has been modified!
  * I've added a static Tooltip option.
  * - Tom Rees
  * - January 2013
  */
  /**
  *
  * jquery.sparkline.js
  *
  * v2.1
  * (c) Splunk, Inc
  * Contact: Gareth Watts (gareth@splunk.com)
  * http://omnipotent.net/jquery.sparkline/
  *
  * Generates inline sparkline charts from data supplied either to the method
  * or inline in HTML
  *
  * Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag
  * (Firefox 2.0+, Safari, Opera, etc)
  *
  * License: New BSD License
  *
  * Copyright (c) 2012, Splunk Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without modification,
  * are permitted provided that the following conditions are met:
  *
  * * Redistributions of source code must retain the above copyright notice,
  * this list of conditions and the following disclaimer.
  * * Redistributions in binary form must reproduce the above copyright notice,
  * this list of conditions and the following disclaimer in the documentation
  * and/or other materials provided with the distribution.
  * * Neither the name of Splunk Inc nor the names of its contributors may
  * be used to endorse or promote products derived from this software without
  * specific prior written permission.
  *
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
  * SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  *
  * Usage:
  * $(selector).sparkline(values, options)
  *
  * If values is undefined or set to 'html' then the data values are read from the specified tag:
  * <p>Sparkline: <span class="sparkline">1,4,6,6,8,5,3,5</span></p>
  * $('.sparkline').sparkline();
  * There must be no spaces in the enclosed data set
  *
  * Otherwise values must be an array of numbers or null values
  * <p>Sparkline: <span id="sparkline1">This text replaced if the browser is compatible</span></p>
  * $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])
  * $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])
  *
  * Values can also be specified in an HTML comment, or as a values attribute:
  * <p>Sparkline: <span class="sparkline"><!--1,4,6,6,8,5,3,5 --></span></p>
  * <p>Sparkline: <span class="sparkline" values="1,4,6,6,8,5,3,5"></span></p>
  * $('.sparkline').sparkline();
  *
  * For line charts, x values can also be specified:
  * <p>Sparkline: <span class="sparkline">1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5</span></p>
  * $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])
  *
  * By default, options should be passed in as teh second argument to the sparkline function:
  * $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})
  *
  * Options can also be set by passing them on the tag itself. This feature is disabled by default though
  * as there's a slight performance overhead:
  * $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})
  * <p>Sparkline: <span class="sparkline" sparkType="bar" sparkBarColor="red">loading</span></p>
  * Prefix all options supplied as tag attribute with "spark" (configurable by setting tagOptionPrefix)
  *
  * Supported options:
  * lineColor - Color of the line used for the chart
  * fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart
  * width - Width of the chart - Defaults to 3 times the number of values in pixels
  * height - Height of the chart - Defaults to the height of the containing element
  * chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied
  * chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied
  * chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax
  * chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied
  * chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied
  * composite - If true then don't erase any existing chart attached to the tag, but draw
  * another chart over the top - Note that width and height are ignored if an
  * existing chart is detected.
  * tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'
  * enableTagOptions - Whether to check tags for sparkline options
  * tagOptionPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'
  * disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a
  * hidden dom element, avoding a browser reflow
  * disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,
  * making the plugin perform much like it did in 1.x
  * disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)
  * disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled
  * defaults to false (highlights enabled)
  * highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase
  * tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body
  * tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied
  * tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis
  * tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis
  * tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip
  * callback is given arguments of (sparkline, options, fields)
  * tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title
  * tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries)
  * to control the format of the tooltip
  * tooltipPrefix - A string to prepend to each field displayed in a tooltip
  * tooltipSuffix - A string to append to each field displayed in a tooltip
  * tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)
  * tooltipValueLookups - An object or range map to map field values to tooltip strings
  * (eg. to map -1 to "Lost", 0 to "Draw", and 1 to "Win")
  * numberFormatter - Optional callback for formatting numbers in tooltips
  * numberDigitGroupSep - Character to use for group separator in numbers "1,234" - Defaults to ","
  * numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to "."
  * numberDigitGroupCount - Number of digits between group separator - Defaults to 3
  *
  * There are 7 types of sparkline, selected by supplying a "type" option of 'line' (default),
  * 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'
  * line - Line chart. Options:
  * spotColor - Set to '' to not end each line in a circular spot
  * minSpotColor - If set, color of spot at minimum value
  * maxSpotColor - If set, color of spot at maximum value
  * spotRadius - Radius in pixels
  * lineWidth - Width of line in pixels
  * normalRangeMin
  * normalRangeMax - If set draws a filled horizontal bar between these two values marking the "normal"
  * or expected range of values
  * normalRangeColor - Color to use for the above bar
  * drawNormalOnTop - Draw the normal range above the chart fill color if true
  * defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart
  * highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable
  * highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable
  * valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map
  *
  * bar - Bar chart. Options:
  * barColor - Color of bars for postive values
  * negBarColor - Color of bars for negative values
  * zeroColor - Color of bars with zero values
  * nullColor - Color of bars with null values - Defaults to omitting the bar entirely
  * barWidth - Width of bars in pixels
  * colorMap - Optional mappnig of values to colors to override the *BarColor values above
  * can be an Array of values to control the color of individual bars or a range map
  * to specify colors for individual ranges of values
  * barSpacing - Gap between bars in pixels
  * zeroAxis - Centers the y-axis around zero if true
  *
  * tristate - Charts values of win (>0), lose (<0) or draw (=0)
  * posBarColor - Color of win values
  * negBarColor - Color of lose values
  * zeroBarColor - Color of draw values
  * barWidth - Width of bars in pixels
  * barSpacing - Gap between bars in pixels
  * colorMap - Optional mappnig of values to colors to override the *BarColor values above
  * can be an Array of values to control the color of individual bars or a range map
  * to specify colors for individual ranges of values
  *
  * discrete - Options:
  * lineHeight - Height of each line in pixels - Defaults to 30% of the graph height
  * thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor
  * thresholdColor
  *
  * bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...
  * options:
  * targetColor - The color of the vertical target marker
  * targetWidth - The width of the target marker in pixels
  * performanceColor - The color of the performance measure horizontal bar
  * rangeColors - Colors to use for each qualitative range background color
  *
  * pie - Pie chart. Options:
  * sliceColors - An array of colors to use for pie slices
  * offset - Angle in degrees to offset the first slice - Try -90 or +90
  * borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)
  * borderColor - Color to use for the pie chart border - Defaults to #000
  *
  * box - Box plot. Options:
  * raw - Set to true to supply pre-computed plot points as values
  * values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier
  * When set to false you can supply any number of values and the box plot will
  * be computed for you. Default is false.
  * showOutliers - Set to true (default) to display outliers as circles
  * outlierIQR - Interquartile range used to determine outliers. Default 1.5
  * boxLineColor - Outline color of the box
  * boxFillColor - Fill color for the box
  * whiskerColor - Line color used for whiskers
  * outlierLineColor - Outline color of outlier circles
  * outlierFillColor - Fill color of the outlier circles
  * spotRadius - Radius of outlier circles
  * medianColor - Line color of the median line
  * target - Draw a target cross hair at the supplied value (default undefined)
  *
  *
  *
  * Examples:
  * $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });
  * $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });
  * $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):
  * $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });
  * $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });
  * $('#pie').sparkline([1,1,2], { type:'pie' });
  */
 
  /*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */
 
  (function(factory) {
  if(typeof define === 'function' && define.amd) {
  define(['jquery'], factory);
  }
  else {
  factory(jQuery);
  }
  }
  (function($) {
  'use strict';
 
  var UNSET_OPTION = {},
  getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,
  remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,
  MouseHandler, Tooltip, barHighlightMixin,
  line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,
  VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;
 
  /**
  * Default configuration settings
  */
  getDefaults = function () {
  return {
  // Settings common to most/all chart types
  common: {
  type: 'line',
  lineColor: '#00f',
  fillColor: '#cdf',
  defaultPixelsPerValue: 3,
  width: 'auto',
  height: 'auto',
  composite: false,
  tagValuesAttribute: 'values',
  tagOptionsPrefix: 'spark',
  enableTagOptions: false,
  enableHighlight: true,
  highlightLighten: 1.4,
  tooltipSkipNull: true,
  tooltipPrefix: '',
  tooltipSuffix: '',
  disableHiddenCheck: false,
  numberFormatter: false,
  tooltips: false,
  numberDigitGroupCount: 3,
  numberDigitGroupSep: ',',
  numberDecimalMark: '.',
  disableTooltips: false,
  disableInteraction: false
  },
  // Defaults for line charts
  line: {
  spotColor: '#f80',
  highlightSpotColor: '#5f5',
  highlightLineColor: '#f22',
  spotRadius: 1.5,
  minSpotColor: '#f80',
  maxSpotColor: '#f80',
  lineWidth: 1,
  normalRangeMin: undefined,
  normalRangeMax: undefined,
  normalRangeColor: '#ccc',
  drawNormalOnTop: false,
  chartRangeMin: undefined,
  chartRangeMax: undefined,
  chartRangeMinX: undefined,
  chartRangeMaxX: undefined,
  tooltipFormat: new SPFormat('<span style="color: {{color}}">&#9679;</span> {{prefix}}{{y}}{{suffix}}')
  },
  // Defaults for bar charts
  bar: {
  barColor: '#3366cc',
  negBarColor: '#f44',
  stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',
  '#dd4477', '#0099c6', '#990099'],
  zeroColor: undefined,
  nullColor: undefined,
  zeroAxis: true,
  barWidth: 4,
  barSpacing: 1,
  chartRangeMax: undefined,
  chartRangeMin: undefined,
  chartRangeClip: false,
  colorMap: undefined,
  tooltipFormat: new SPFormat('<span style="color: {{color}}">&#9679;</span> {{prefix}}{{value}}{{suffix}}')
  },
  // Defaults for tristate charts
  tristate: {
  barWidth: 4,
  barSpacing: 1,
  posBarColor: '#6f6',
  negBarColor: '#f44',
  zeroBarColor: '#999',
  colorMap: {},
  tooltipFormat: new SPFormat('<span style="color: {{color}}">&#9679;</span> {{value:map}}'),
  tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }
  },
  // Defaults for discrete charts
  discrete: {
  lineHeight: 'auto',
  thresholdColor: undefined,
  thresholdValue: 0,
  chartRangeMax: undefined,
  chartRangeMin: undefined,
  chartRangeClip: false,
  tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')
  },
  // Defaults for bullet charts
  bullet: {
  targetColor: '#f33',
  targetWidth: 3, // width of the target bar in pixels
  performanceColor: '#33f',
  rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],
  base: undefined, // set this to a number to change the base start number
  tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),
  tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }
  },
  // Defaults for pie charts
  pie: {
  offset: 0,
  sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',
  '#dd4477', '#0099c6', '#990099'],
  borderWidth: 0,
  borderColor: '#000',
  tooltipFormat: new SPFormat('<span style="color: {{color}}">&#9679;</span> {{value}} ({{percent.1}}%)')
  },
  // Defaults for box plots
  box: {
  raw: false,
  boxLineColor: '#000',
  boxFillColor: '#cdf',
  whiskerColor: '#000',
  outlierLineColor: '#333',
  outlierFillColor: '#fff',
  medianColor: '#f00',
  showOutliers: true,
  outlierIQR: 1.5,
  spotRadius: 1.5,
  target: undefined,
  targetColor: '#4a2',
  chartRangeMax: undefined,
  chartRangeMin: undefined,
  tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),
  tooltipFormatFieldlistKey: 'field',
  tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',
  uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',
  lw: 'Left Whisker', rw: 'Right Whisker'} }
  }
  };
  };
 
  // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname
  defaultStyles = '.jqstooltip { ' +
  'position: absolute;' +
  'left: 0px;' +
  'top: 0px;' +
  'visibility: hidden;' +
  'background: rgb(0, 0, 0) transparent;' +
  'background-color: rgba(0,0,0,0.6);' +
  'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +
  '-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";' +
  'color: white;' +
  'font: 10px arial, san serif;' +
  'text-align: left;' +
  'white-space: nowrap;' +
  'padding: 5px;' +
  'border: 1px solid white;' +
  'z-index: 10000;' +
  '}' +
  '.jqsfield { ' +
  'color: white;' +
  'font: 10px arial, san serif;' +
  'text-align: left;' +
  '}';
 
  /**
  * Utilities
  */
 
  createClass = function (/* [baseclass, [mixin, ...]], definition */