/*
 Highcharts JS v3.0.6 (2013-10-04)

 Standalone Highcharts Framework

 License: MIT License
*/
var HighchartsAdapter = (function () {
  function o(c) {
    function a(a, b, d) {
      a.removeEventListener(b, d, !1);
    }
    function d(a, b, d) {
      d = a.HCProxiedMethods[d.toString()];
      a.detachEvent('on' + b, d);
    }
    function b(b, c) {
      var f = b.HCEvents,
        i,
        g,
        k,
        j;
      if (b.removeEventListener) i = a;
      else if (b.attachEvent) i = d;
      else return;
      c ? ((g = {}), (g[c] = !0)) : (g = f);
      for (j in g) if (f[j]) for (k = f[j].length; k--; ) i(b, j, f[j][k]);
    }
    c.HCExtended ||
      Highcharts.extend(c, {
        HCExtended: !0,
        HCEvents: {},
        bind: function (b, a) {
          var d = this,
            c = this.HCEvents,
            g;
          if (d.addEventListener) d.addEventListener(b, a, !1);
          else if (d.attachEvent) {
            g = function (b) {
              a.call(d, b);
            };
            if (!d.HCProxiedMethods) d.HCProxiedMethods = {};
            d.HCProxiedMethods[a.toString()] = g;
            d.attachEvent('on' + b, g);
          }
          c[b] === r && (c[b] = []);
          c[b].push(a);
        },
        unbind: function (c, h) {
          var f, i;
          c
            ? ((f = this.HCEvents[c] || []),
              h
                ? ((i = HighchartsAdapter.inArray(h, f)),
                  i > -1 && (f.splice(i, 1), (this.HCEvents[c] = f)),
                  this.removeEventListener ? a(this, c, h) : this.attachEvent && d(this, c, h))
                : (b(this, c), (this.HCEvents[c] = [])))
            : (b(this), (this.HCEvents = {}));
        },
        trigger: function (b, a) {
          var d = this.HCEvents[b] || [],
            c = d.length,
            g,
            k,
            j;
          k = function () {
            a.defaultPrevented = !0;
          };
          for (g = 0; g < c; g++) {
            j = d[g];
            if (a.stopped) break;
            a.preventDefault = k;
            a.target = this;
            a.type = b;
            j.call(this, a) === !1 && a.preventDefault();
          }
        },
      });
    return c;
  }
  var r,
    l = document,
    p = [],
    m = [],
    q,
    n;
  Math.easeInOutSine = function (c, a, d, b) {
    return (-d / 2) * (Math.cos((Math.PI * c) / b) - 1) + a;
  };
  return {
    init: function (c) {
      if (!l.defaultView)
        (this._getStyle = function (a, d) {
          var b;
          return a.style[d]
            ? a.style[d]
            : (d === 'opacity' && (d = 'filter'),
              (b =
                a.currentStyle[
                  d.replace(/\-(\w)/g, function (a, b) {
                    return b.toUpperCase();
                  })
                ]),
              d === 'filter' &&
                (b = b.replace(/alpha\(opacity=([0-9]+)\)/, function (b, a) {
                  return a / 100;
                })),
              b === '' ? 1 : b);
        }),
          (this.adapterRun = function (a, d) {
            var b = { width: 'clientWidth', height: 'clientHeight' }[d];
            if (b)
              return (
                (a.style.zoom = 1),
                a[b] - 2 * parseInt(HighchartsAdapter._getStyle(a, 'padding'), 10)
              );
          });
      if (!Array.prototype.forEach)
        this.each = function (a, d) {
          for (var b = 0, c = a.length; b < c; b++) if (d.call(a[b], a[b], b, a) === !1) return b;
        };
      if (!Array.prototype.indexOf)
        this.inArray = function (a, d) {
          var b,
            c = 0;
          if (d) for (b = d.length; c < b; c++) if (d[c] === a) return c;
          return -1;
        };
      if (!Array.prototype.filter)
        this.grep = function (a, d) {
          for (var b = [], c = 0, h = a.length; c < h; c++) d(a[c], c) && b.push(a[c]);
          return b;
        };
      n = function (a, c, b) {
        this.options = c;
        this.elem = a;
        this.prop = b;
      };
      n.prototype = {
        update: function () {
          var a;
          a = this.paths;
          var d = this.elem,
            b = d.element;
          a && b
            ? d.attr('d', c.step(a[0], a[1], this.now, this.toD))
            : d.attr
            ? b && d.attr(this.prop, this.now)
            : ((a = {}), (a[d] = this.now + this.unit), Highcharts.css(d, a));
          this.options.step && this.options.step.call(this.elem, this.now, this);
        },
        custom: function (a, c, b) {
          var e = this,
            h = function (a) {
              return e.step(a);
            },
            f;
          this.startTime = +new Date();
          this.start = a;
          this.end = c;
          this.unit = b;
          this.now = this.start;
          this.pos = this.state = 0;
          h.elem = this.elem;
          h() &&
            m.push(h) === 1 &&
            (q = setInterval(function () {
              for (f = 0; f < m.length; f++) m[f]() || m.splice(f--, 1);
              m.length || clearInterval(q);
            }, 13));
        },
        step: function (a) {
          var c = +new Date(),
            b;
          b = this.options;
          var e;
          if (this.elem.stopAnimation) b = !1;
          else if (a || c >= b.duration + this.startTime) {
            this.now = this.end;
            this.pos = this.state = 1;
            this.update();
            a = this.options.curAnim[this.prop] = !0;
            for (e in b.curAnim) b.curAnim[e] !== !0 && (a = !1);
            a && b.complete && b.complete.call(this.elem);
            b = !1;
          } else
            (e = c - this.startTime),
              (this.state = e / b.duration),
              (this.pos = b.easing(e, 0, 1, b.duration)),
              (this.now = this.start + (this.end - this.start) * this.pos),
              this.update(),
              (b = !0);
          return b;
        },
      };
      this.animate = function (a, d, b) {
        var e,
          h = '',
          f,
          i,
          g;
        a.stopAnimation = !1;
        if (typeof b !== 'object' || b === null)
          (e = arguments), (b = { duration: e[2], easing: e[3], complete: e[4] });
        if (typeof b.duration !== 'number') b.duration = 400;
        b.easing = Math[b.easing] || Math.easeInOutSine;
        b.curAnim = Highcharts.extend({}, d);
        for (g in d)
          (i = new n(a, b, g)),
            (f = null),
            g === 'd'
              ? ((i.paths = c.init(a, a.d, d.d)), (i.toD = d.d), (e = 0), (f = 1))
              : a.attr
              ? (e = a.attr(g))
              : ((e = parseFloat(HighchartsAdapter._getStyle(a, g)) || 0),
                g !== 'opacity' && (h = 'px')),
            f || (f = parseFloat(d[g])),
            i.custom(e, f, h);
      };
    },
    _getStyle: function (c, a) {
      return window.getComputedStyle(c).getPropertyValue(a);
    },
    getScript: function (c, a) {
      var d = l.getElementsByTagName('head')[0],
        b = l.createElement('script');
      b.type = 'text/javascript';
      b.src = c;
      b.onload = a;
      d.appendChild(b);
    },
    inArray: function (c, a) {
      return a.indexOf ? a.indexOf(c) : p.indexOf.call(a, c);
    },
    adapterRun: function (c, a) {
      return parseInt(HighchartsAdapter._getStyle(c, a), 10);
    },
    grep: function (c, a) {
      return p.filter.call(c, a);
    },
    map: function (c, a) {
      for (var d = [], b = 0, e = c.length; b < e; b++) d[b] = a.call(c[b], c[b], b, c);
      return d;
    },
    offset: function (c) {
      for (var a = 0, d = 0; c; ) (a += c.offsetLeft), (d += c.offsetTop), (c = c.offsetParent);
      return { left: a, top: d };
    },
    addEvent: function (c, a, d) {
      o(c).bind(a, d);
    },
    removeEvent: function (c, a, d) {
      o(c).unbind(a, d);
    },
    fireEvent: function (c, a, d, b) {
      var e;
      l.createEvent && (c.dispatchEvent || c.fireEvent)
        ? ((e = l.createEvent('Events')),
          e.initEvent(a, !0, !0),
          (e.target = c),
          Highcharts.extend(e, d),
          c.dispatchEvent ? c.dispatchEvent(e) : c.fireEvent(a, e))
        : c.HCExtended === !0 && ((d = d || {}), c.trigger(a, d));
      d && d.defaultPrevented && (b = null);
      b && b(d);
    },
    washMouseEvent: function (c) {
      return c;
    },
    stop: function (c) {
      c.stopAnimation = !0;
    },
    each: function (c, a) {
      return Array.prototype.forEach.call(c, a);
    },
  };
})();