﻿
var MONTH_NAMES = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], DAY_NAMES = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; function LZ(c) { return (c < 0 || c > 9 ? "" : "0") + c } function isDate(c, d) { if (getDateFromFormat(c, d) == 0) return false; return true } function compareDates(c, d, b, i) { c = getDateFromFormat(c, d); b = getDateFromFormat(b, i); if (c == 0 || b == 0) return -1; else if (c > b) return 1; return 0 } function formatDate(c, d) { d += ""; var b = "", i = 0, f = "", a = ""; f = c.getYear() + ""; a = c.getMonth() + 1; var l = c.getDate(), m = c.getDay(), h = c.getHours(), k = c.getMinutes(), j = c.getSeconds(), e = {}; if (f.length < 4) f = "" + (f - 0 + 1900); e.y = "" + f; e.yyyy = f; e.yy = f.substring(2, 4); e.M = a; e.MM = LZ(a); e.MMM = MONTH_NAMES[a - 1]; e.NNN = MONTH_NAMES[a + 11]; e.d = l; e.dd = LZ(l); e.E = DAY_NAMES[m + 7]; e.EE = DAY_NAMES[m]; e.H = h; e.HH = LZ(h); e.h = h == 0 ? 12 : h > 12 ? h - 12 : h; e.hh = LZ(e.h); e.K = h > 11 ? h - 12 : h; e.k = h + 1; e.KK = LZ(e.K); e.kk = LZ(e.k); e.a = h > 11 ? "PM" : "AM"; e.m = k; e.mm = LZ(k); e.s = j; for (e.ss = LZ(j); i < d.length; ) { f = d.charAt(i); for (a = ""; d.charAt(i) == f && i < d.length; ) a += d.charAt(i++); b += e[a] != null ? e[a] : a } return b } function _isInteger(c) { for (var d = 0; d < c.length; d++) if ("1234567890".indexOf(c.charAt(d)) == -1) return false; return true } function _getInt(c, d, b, i) { for (i = i; i >= b; i--) { var f = c.substring(d, d + i); if (f.length < b) break; if (_isInteger(f)) return f } return null } function getDateFromFormat(c, d) { c += ""; d += ""; var b = 0, i = 0, f = "", a = "", l, m, h = new Date, k = h.getYear(), j = h.getMonth() + 1, e = 1, g = h.getHours(), n = h.getMinutes(); h = h.getSeconds(); for (var o = ""; i < d.length; ) { f = d.charAt(i); for (a = ""; d.charAt(i) == f && i < d.length; ) a += d.charAt(i++); if (a == "yyyy" || a == "yy" || a == "y") { if (a == "yyyy") m = l = 4; if (a == "yy") m = l = 2; if (a == "y") { l = 2; m = 4 } k = _getInt(c, b, l, m); if (k == null) return 0; b += k.length; if (k.length == 2) k = k > 70 ? 1900 + (k - 0) : 2E3 + (k - 0) } else if (a == "MMM" || a == "NNN") { for (f = j = 0; f < MONTH_NAMES.length; f++) { var p = MONTH_NAMES[f]; if (c.substring(b, b + p.length).toLowerCase() == p.toLowerCase()) if (a == "MMM" || a == "NNN" && f > 11) { j = f + 1; if (j > 12) j -= 12; b += p.length; break } } if (j < 1 || j > 12) return 0 } else if (a == "EE" || a == "E") for (f = 0; f < DAY_NAMES.length; f++) { a = DAY_NAMES[f]; if (c.substring(b, b + a.length).toLowerCase() == a.toLowerCase()) { b += a.length; break } } else if (a == "MM" || a == "M") { j = _getInt(c, b, a.length, 2); if (j == null || j < 1 || j > 12) return 0; b += j.length } else if (a == "dd" || a == "d") { e = _getInt(c, b, a.length, 2); if (e == null || e < 1 || e > 31) return 0; b += e.length } else if (a == "hh" || a == "h") { g = _getInt(c, b, a.length, 2); if (g == null || g < 1 || g > 12) return 0; b += g.length } else if (a == "HH" || a == "H") { g = _getInt(c, b, a.length, 2); if (g == null || g < 0 || g > 23) return 0; b += g.length } else if (a == "KK" || a == "K") { g = _getInt(c, b, a.length, 2); if (g == null || g < 0 || g > 11) return 0; b += g.length } else if (a == "kk" || a == "k") { g = _getInt(c, b, a.length, 2); if (g == null || g < 1 || g > 24) return 0; b += g.length; g-- } else if (a == "mm" || a == "m") { n = _getInt(c, b, a.length, 2); if (n == null || n < 0 || n > 59) return 0; b += n.length } else if (a == "ss" || a == "s") { h = _getInt(c, b, a.length, 2); if (h == null || h < 0 || h > 59) return 0; b += h.length } else if (a == "a") { if (c.substring(b, b + 2).toLowerCase() == "am") o = "AM"; else if (c.substring(b, b + 2).toLowerCase() == "pm") o = "PM"; else return 0; b += 2 } else if (c.substring(b, b + a.length) != a) return 0; else b += a.length } if (b != c.length) return 0; if (j == 2) if (k % 4 == 0 && k % 100 != 0 || k % 400 == 0) { if (e > 29) return 0 } else if (e > 28) return 0; if (j == 4 || j == 6 || j == 9 || j == 11) if (e > 30) return 0; if (g < 12 && o == "PM") g = g - 0 + 12; else if (g > 11 && o == "AM") g -= 12; return (new Date(k, j - 1, e, g, n, h)).getTime() } function parseDate(c) { var d = arguments.length == 2 ? arguments[1] : false; generalFormats = ["y-M-d", "MMM d, y", "MMM d,y", "y-MMM-d", "d-MMM-y", "MMM d"]; monthFirst = ["M/d/y", "M-d-y", "M.d.y", "MMM-d", "M/d", "M-d"]; dateFirst = ["d/M/y", "d-M-y", "d.M.y", "d-MMM", "d/M", "d-M"]; d = ["generalFormats", d ? "dateFirst" : "monthFirst", d ? "monthFirst" : "dateFirst"]; for (var b = null, i = 0; i < d.length; i++) for (var f = window[d[i]], a = 0; a < f.length; a++) { b = getDateFromFormat(c, f[a]); if (b != 0) return new Date(b) } return null } function DateAdd(c, d, b) { switch (c) { case "d": d.setDate(d.getDate() + b); break; case "m": d.setMonth(d.getMonth() + b); break; case "y": d.setYear(d.getFullYear() + b); break; case "h": d.setHours(d.getHours() + b); break; case "n": d.setMinutes(d.getMinutes() + b); break; case "s": d.setSeconds(d.getSeconds() + b) } return d };
/*!
* jQuery Tools v1.2.6 - The missing UI library for the Web
* 
* overlay/overlay.js
* scrollable/scrollable.js
* scrollable/scrollable.autoscroll.js
* scrollable/scrollable.navigator.js
* tabs/tabs.js
* toolbox/toolbox.mousewheel.js
* tooltip/tooltip.js
* tooltip/tooltip.dynamic.js
* 
* NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
* 
* http://flowplayer.org/tools/
* 
* jquery.event.wheel.js - rev 1 
* Copyright (c) 2008, Three Dub Media (http://threedubmedia.com)
* Liscensed under the MIT License (MIT-LICENSE.txt)
* http://www.opensource.org/licenses/mit-license.php
* Created: 2008-07-01 | Updated: 2008-07-14
* 
* -----
* 
*/
(function(a) { a.tools = a.tools || { version: "v1.2.6" }, a.tools.overlay = { addEffect: function(a, b, d) { c[a] = [b, d] }, conf: { close: null, closeOnClick: !0, closeOnEsc: !0, closeSpeed: "fast", effect: "default", fixed: !a.browser.msie || a.browser.version > 6, left: "center", load: !1, mask: null, oneInstance: !0, speed: "normal", target: null, top: "10%"} }; var b = [], c = {}; a.tools.overlay.addEffect("default", function(b, c) { var d = this.getConf(), e = a(window); d.fixed || (b.top += e.scrollTop(), b.left += e.scrollLeft()), b.position = d.fixed ? "fixed" : "absolute", this.getOverlay().css(b).fadeIn(d.speed, c) }, function(a) { this.getOverlay().fadeOut(this.getConf().closeSpeed, a) }); function d(d, e) { var f = this, g = d.add(f), h = a(window), i, j, k, l = a.tools.expose && (e.mask || e.expose), m = Math.random().toString().slice(10); l && (typeof l == "string" && (l = { color: l }), l.closeOnClick = l.closeOnEsc = !1); var n = e.target || d.attr("rel"); j = n ? a(n) : null || d; if (!j.length) throw "Could not find Overlay: " + n; d && d.index(j) == -1 && d.click(function(a) { f.load(a); return a.preventDefault() }), a.extend(f, { load: function(d) { if (f.isOpened()) return f; var i = c[e.effect]; if (!i) throw "Overlay: cannot find effect : \"" + e.effect + "\""; e.oneInstance && a.each(b, function() { this.close(d) }), d = d || a.Event(), d.type = "onBeforeLoad", g.trigger(d); if (d.isDefaultPrevented()) return f; k = !0, l && a(j).expose(l); var n = e.top, o = e.left, p = j.outerWidth({ margin: !0 }), q = j.outerHeight({ margin: !0 }); typeof n == "string" && (n = n == "center" ? Math.max((h.height() - q) / 2, 0) : parseInt(n, 10) / 100 * h.height()), o == "center" && (o = Math.max((h.width() - p) / 2, 0)), i[0].call(f, { top: n, left: o }, function() { k && (d.type = "onLoad", g.trigger(d)) }), l && e.closeOnClick && a.mask.getMask().one("click", f.close), e.closeOnClick && a(document).bind("click." + m, function(b) { a(b.target).parents(j).length || f.close(b) }), e.closeOnEsc && a(document).bind("keydown." + m, function(a) { a.keyCode == 27 && f.close(a) }); return f }, close: function(b) { if (!f.isOpened()) return f; b = b || a.Event(), b.type = "onBeforeClose", g.trigger(b); if (!b.isDefaultPrevented()) { k = !1, c[e.effect][1].call(f, function() { b.type = "onClose", g.trigger(b) }), a(document).unbind("click." + m).unbind("keydown." + m), l && a.mask.close(); return f } }, getOverlay: function() { return j }, getTrigger: function() { return d }, getClosers: function() { return i }, isOpened: function() { return k }, getConf: function() { return e } }), a.each("onBeforeLoad,onStart,onLoad,onBeforeClose,onClose".split(","), function(b, c) { a.isFunction(e[c]) && a(f).bind(c, e[c]), f[c] = function(b) { b && a(f).bind(c, b); return f } }), i = j.find(e.close || ".close"), !i.length && !e.close && (i = a("<a class=\"close\"></a>"), j.prepend(i)), i.click(function(a) { f.close(a) }), e.load && f.load() } a.fn.overlay = function(c) { var e = this.data("overlay"); if (e) return e; a.isFunction(c) && (c = { onBeforeLoad: c }), c = a.extend(!0, {}, a.tools.overlay.conf, c), this.each(function() { e = new d(a(this), c), b.push(e), a(this).data("overlay", e) }); return c.api ? e : this } })(jQuery);
(function(a) { a.tools = a.tools || { version: "v1.2.6" }, a.tools.scrollable = { conf: { activeClass: "active", circular: !1, clonedClass: "cloned", disabledClass: "disabled", easing: "swing", initialIndex: 0, item: "> *", items: ".items", keyboard: !0, mousewheel: !1, next: ".next", prev: ".prev", size: 1, speed: 400, vertical: !1, touch: !0, wheelSpeed: 0} }; function b(a, b) { var c = parseInt(a.css(b), 10); if (c) return c; var d = a[0].currentStyle; return d && d.width && parseInt(d.width, 10) } function c(b, c) { var d = a(c); return d.length < 2 ? d : b.parent().find(c) } var d; function e(b, e) { var f = this, g = b.add(f), h = b.children(), i = 0, j = e.vertical; d || (d = f), h.length > 1 && (h = a(e.items, b)), e.size > 1 && (e.circular = !1), a.extend(f, { getConf: function() { return e }, getIndex: function() { return i }, getSize: function() { return f.getItems().size() }, getNaviButtons: function() { return n.add(o) }, getRoot: function() { return b }, getItemWrap: function() { return h }, getItems: function() { return h.find(e.item).not("." + e.clonedClass) }, move: function(a, b) { return f.seekTo(i + a, b) }, next: function(a) { return f.move(e.size, a) }, prev: function(a) { return f.move(-e.size, a) }, begin: function(a) { return f.seekTo(0, a) }, end: function(a) { return f.seekTo(f.getSize() - 1, a) }, focus: function() { d = f; return f }, addItem: function(b) { b = a(b), e.circular ? (h.children().last().before(b), h.children().first().replaceWith(b.clone().addClass(e.clonedClass))) : (h.append(b), o.removeClass("disabled")), g.trigger("onAddItem", [b]); return f }, seekTo: function(b, c, k) { b.jquery || (b *= 1); if (e.circular && b === 0 && i == -1 && c !== 0) return f; if (!e.circular && b < 0 || b > f.getSize() || b < -1) return f; var l = b; b.jquery ? b = f.getItems().index(b) : l = f.getItems().eq(b); var m = a.Event("onBeforeSeek"); if (!k) { g.trigger(m, [b, c]); if (m.isDefaultPrevented() || !l.length) return f } var n = j ? { top: -l.position().top} : { left: -l.position().left }; i = b, d = f, c === undefined && (c = e.speed), h.animate(n, c, e.easing, k || function() { g.trigger("onSeek", [b]) }); return f } }), a.each(["onBeforeSeek", "onSeek", "onAddItem"], function(b, c) { a.isFunction(e[c]) && a(f).bind(c, e[c]), f[c] = function(b) { b && a(f).bind(c, b); return f } }); if (e.circular) { var k = f.getItems().slice(-1).clone().prependTo(h), l = f.getItems().eq(1).clone().appendTo(h); k.add(l).addClass(e.clonedClass), f.onBeforeSeek(function(a, b, c) { if (!a.isDefaultPrevented()) { if (b == -1) { f.seekTo(k, c, function() { f.end(0) }); return a.preventDefault() } b == f.getSize() && f.seekTo(l, c, function() { f.begin(0) }) } }); var m = b.parents().add(b).filter(function() { if (a(this).css("display") === "none") return !0 }); m.length ? (m.show(), f.seekTo(0, 0, function() { }), m.hide()) : f.seekTo(0, 0, function() { }) } var n = c(b, e.prev).click(function(a) { a.stopPropagation(), f.prev() }), o = c(b, e.next).click(function(a) { a.stopPropagation(), f.next() }); e.circular || (f.onBeforeSeek(function(a, b) { setTimeout(function() { a.isDefaultPrevented() || (n.toggleClass(e.disabledClass, b <= 0), o.toggleClass(e.disabledClass, b >= f.getSize() - 1)) }, 1) }), e.initialIndex || n.addClass(e.disabledClass)), f.getSize() < 2 && n.add(o).addClass(e.disabledClass), e.mousewheel && a.fn.mousewheel && b.mousewheel(function(a, b) { if (e.mousewheel) { f.move(b < 0 ? 1 : -1, e.wheelSpeed || 50); return !1 } }); if (e.touch) { var p = {}; h[0].ontouchstart = function(a) { var b = a.touches[0]; p.x = b.clientX, p.y = b.clientY }, h[0].ontouchmove = function(a) { if (a.touches.length == 1 && !h.is(":animated")) { var b = a.touches[0], c = p.x - b.clientX, d = p.y - b.clientY; f[j && d > 0 || !j && c > 0 ? "next" : "prev"](), a.preventDefault() } } } e.keyboard && a(document).bind("keydown.scrollable", function(b) { if (!(!e.keyboard || b.altKey || b.ctrlKey || b.metaKey || a(b.target).is(":input"))) { if (e.keyboard != "static" && d != f) return; var c = b.keyCode; if (j && (c == 38 || c == 40)) { f.move(c == 38 ? -1 : 1); return b.preventDefault() } if (!j && (c == 37 || c == 39)) { f.move(c == 37 ? -1 : 1); return b.preventDefault() } } }), e.initialIndex && f.seekTo(e.initialIndex, 0, function() { }) } a.fn.scrollable = function(b) { var c = this.data("scrollable"); if (c) return c; b = a.extend({}, a.tools.scrollable.conf, b), this.each(function() { c = new e(a(this), b), a(this).data("scrollable", c) }); return b.api ? c : this } })(jQuery);
(function(a) { var b = a.tools.scrollable; b.autoscroll = { conf: { autoplay: !0, interval: 3e3, autopause: !0} }, a.fn.autoscroll = function(c) { typeof c == "number" && (c = { interval: c }); var d = a.extend({}, b.autoscroll.conf, c), e; this.each(function() { var b = a(this).data("scrollable"), c = b.getRoot(), f, g = !1; function h() { f = setTimeout(function() { b.next() }, d.interval) } b && (e = b), b.play = function() { f || (g = !1, c.bind("onSeek", h), h()) }, b.pause = function() { f = clearTimeout(f), c.unbind("onSeek", h) }, b.resume = function() { g || b.play() }, b.stop = function() { g = !0, b.pause() }, d.autopause && c.add(b.getNaviButtons()).hover(b.pause, b.resume), d.autoplay && b.play() }); return d.api ? e : this } })(jQuery);
(function(a) { var b = a.tools.scrollable; b.navigator = { conf: { navi: ".navi", naviItem: null, activeClass: "active", indexed: !1, idPrefix: null, history: !1} }; function c(b, c) { var d = a(c); return d.length < 2 ? d : b.parent().find(c) } a.fn.navigator = function(d) { typeof d == "string" && (d = { navi: d }), d = a.extend({}, b.navigator.conf, d); var e; this.each(function() { var b = a(this).data("scrollable"), f = d.navi.jquery ? d.navi : c(b.getRoot(), d.navi), g = b.getNaviButtons(), h = d.activeClass, i = d.history && history.pushState, j = b.getConf().size; b && (e = b), b.getNaviButtons = function() { return g.add(f) }, i && (history.pushState({ i: 0 }), a(window).bind("popstate", function(a) { var c = a.originalEvent.state; c && b.seekTo(c.i) })); function k(a, c, d) { b.seekTo(c), d.preventDefault(), i && history.pushState({ i: c }) } function l() { return f.find(d.naviItem || "> *") } function m(b) { var c = a("<" + (d.naviItem || "a") + "/>").click(function(c) { k(a(this), b, c) }); b === 0 && c.addClass(h), d.indexed && c.text(b + 1), d.idPrefix && c.attr("id", d.idPrefix + b); return c.appendTo(f) } l().length ? l().each(function(b) { a(this).click(function(c) { k(a(this), b, c) }) }) : a.each(b.getItems(), function(a) { a % j == 0 && m(a) }), b.onBeforeSeek(function(a, b) { setTimeout(function() { if (!a.isDefaultPrevented()) { var c = b / j, d = l().eq(c); d.length && l().removeClass(h).eq(c).addClass(h) } }, 1) }), b.onAddItem(function(a, c) { var d = b.getItems().index(c); d % j == 0 && m(d) }) }); return d.api ? e : this } })(jQuery);
(function(a) { a.tools = a.tools || { version: "v1.2.6" }, a.tools.tabs = { conf: { tabs: "a", current: "current", onBeforeClick: null, onClick: null, effect: "default", initialIndex: 0, event: "click", rotate: !1, slideUpSpeed: 400, slideDownSpeed: 400, history: !1 }, addEffect: function(a, c) { b[a] = c } }; var b = { "default": function(a, b) { this.getPanes().hide().eq(a).show(), b.call() }, fade: function(a, b) { var c = this.getConf(), d = c.fadeOutSpeed, e = this.getPanes(); d ? e.fadeOut(d) : e.hide(), e.eq(a).fadeIn(c.fadeInSpeed, b) }, slide: function(a, b) { var c = this.getConf(); this.getPanes().slideUp(c.slideUpSpeed), this.getPanes().eq(a).slideDown(c.slideDownSpeed, b) }, ajax: function(a, b) { this.getPanes().eq(0).load(this.getTabs().eq(a).attr("href"), b) } }, c, d; a.tools.tabs.addEffect("horizontal", function(b, e) { if (!c) { var f = this.getPanes().eq(b), g = this.getCurrentPane(); d || (d = this.getPanes().eq(0).width()), c = !0, f.show(), g.animate({ width: 0 }, { step: function(a) { f.css("width", d - a) }, complete: function() { a(this).hide(), e.call(), c = !1 } }), g.length || (e.call(), c = !1) } }); function e(c, d, e) { var f = this, g = c.add(this), h = c.find(e.tabs), i = d.jquery ? d : c.children(d), j; h.length || (h = c.children()), i.length || (i = c.parent().find(d)), i.length || (i = a(d)), a.extend(this, { click: function(c, d) { var i = h.eq(c); typeof c == "string" && c.replace("#", "") && (i = h.filter("[href*=" + c.replace("#", "") + "]"), c = Math.max(h.index(i), 0)); if (e.rotate) { var k = h.length - 1; if (c < 0) return f.click(k, d); if (c > k) return f.click(0, d) } if (!i.length) { if (j >= 0) return f; c = e.initialIndex, i = h.eq(c) } if (c === j) return f; d = d || a.Event(), d.type = "onBeforeClick", g.trigger(d, [c]); if (!d.isDefaultPrevented()) { b[e.effect].call(f, c, function() { j = c, d.type = "onClick", g.trigger(d, [c]) }), h.removeClass(e.current), i.addClass(e.current); return f } }, getConf: function() { return e }, getTabs: function() { return h }, getPanes: function() { return i }, getCurrentPane: function() { return i.eq(j) }, getCurrentTab: function() { return h.eq(j) }, getIndex: function() { return j }, next: function() { return f.click(j + 1) }, prev: function() { return f.click(j - 1) }, destroy: function() { h.unbind(e.event).removeClass(e.current), i.find("a[href^=#]").unbind("click.T"); return f } }), a.each("onBeforeClick,onClick".split(","), function(b, c) { a.isFunction(e[c]) && a(f).bind(c, e[c]), f[c] = function(b) { b && a(f).bind(c, b); return f } }), e.history && a.fn.history && (a.tools.history.init(h), e.event = "history"), h.each(function(b) { a(this).bind(e.event, function(a) { f.click(b, a); return a.preventDefault() }) }), i.find("a[href^=#]").bind("click.T", function(b) { f.click(a(this).attr("href"), b) }), location.hash && e.tabs == "a" && c.find("[href=" + location.hash + "]").length ? f.click(location.hash) : (e.initialIndex === 0 || e.initialIndex > 0) && f.click(e.initialIndex) } a.fn.tabs = function(b, c) { var d = this.data("tabs"); d && (d.destroy(), this.removeData("tabs")), a.isFunction(c) && (c = { onBeforeClick: c }), c = a.extend({}, a.tools.tabs.conf, c), this.each(function() { d = new e(a(this), b, c), a(this).data("tabs", d) }); return c.api ? d : this } })(jQuery);
(function(a) { a.fn.mousewheel = function(a) { return this[a ? "bind" : "trigger"]("wheel", a) }, a.event.special.wheel = { setup: function() { a.event.add(this, b, c, {}) }, teardown: function() { a.event.remove(this, b, c) } }; var b = a.browser.mozilla ? "DOMMouseScroll" + (a.browser.version < "1.9" ? " mousemove" : "") : "mousewheel"; function c(b) { switch (b.type) { case "mousemove": return a.extend(b.data, { clientX: b.clientX, clientY: b.clientY, pageX: b.pageX, pageY: b.pageY }); case "DOMMouseScroll": a.extend(b, b.data), b.delta = -b.detail / 3; break; case "mousewheel": b.delta = b.wheelDelta / 120 } b.type = "wheel"; return a.event.handle.call(this, b, b.delta) } })(jQuery);
(function(a) { a.tools = a.tools || { version: "v1.2.6" }, a.tools.tooltip = { conf: { effect: "toggle", fadeOutSpeed: "fast", predelay: 0, delay: 30, opacity: 1, tip: 0, fadeIE: !1, position: ["top", "center"], offset: [0, 0], relative: !1, cancelDefault: !0, events: { def: "mouseenter,mouseleave", input: "focus,blur", widget: "focus mouseenter,blur mouseleave", tooltip: "mouseenter,mouseleave" }, layout: "<div/>", tipClass: "tooltip" }, addEffect: function(a, c, d) { b[a] = [c, d] } }; var b = { toggle: [function(a) { var b = this.getConf(), c = this.getTip(), d = b.opacity; d < 1 && c.css({ opacity: d }), c.show(), a.call() }, function(a) { this.getTip().hide(), a.call() } ], fade: [function(b) { var c = this.getConf(); !a.browser.msie || c.fadeIE ? this.getTip().fadeTo(c.fadeInSpeed, c.opacity, b) : (this.getTip().show(), b()) }, function(b) { var c = this.getConf(); !a.browser.msie || c.fadeIE ? this.getTip().fadeOut(c.fadeOutSpeed, b) : (this.getTip().hide(), b()) } ] }; function c(b, c, d) { var e = d.relative ? b.position().top : b.offset().top, f = d.relative ? b.position().left : b.offset().left, g = d.position[0]; e -= c.outerHeight() - d.offset[0], f += b.outerWidth() + d.offset[1], /iPad/i.test(navigator.userAgent) && (e -= a(window).scrollTop()); var h = c.outerHeight() + b.outerHeight(); g == "center" && (e += h / 2), g == "bottom" && (e += h), g = d.position[1]; var i = c.outerWidth() + b.outerWidth(); g == "center" && (f -= i / 2), g == "left" && (f -= i); return { top: e, left: f} } function d(d, e) { var f = this, g = d.add(f), h, i = 0, j = 0, k = d.attr("title"), l = d.attr("data-tooltip"), m = b[e.effect], n, o = d.is(":input"), p = o && d.is(":checkbox, :radio, select, :button, :submit"), q = d.attr("type"), r = e.events[q] || e.events[o ? p ? "widget" : "input" : "def"]; if (!m) throw "Nonexistent effect \"" + e.effect + "\""; r = r.split(/,\s*/); if (r.length != 2) throw "Tooltip: bad events configuration for " + q; d.bind(r[0], function(a) { clearTimeout(i), e.predelay ? j = setTimeout(function() { f.show(a) }, e.predelay) : f.show(a) }).bind(r[1], function(a) { clearTimeout(j), e.delay ? i = setTimeout(function() { f.hide(a) }, e.delay) : f.hide(a) }), k && e.cancelDefault && (d.removeAttr("title"), d.data("title", k)), a.extend(f, { show: function(b) { if (!h) { l ? h = a(l) : e.tip ? h = a(e.tip).eq(0) : k ? h = a(e.layout).addClass(e.tipClass).appendTo(document.body).hide().append(k) : (h = d.next(), h.length || (h = d.parent().next())); if (!h.length) throw "Cannot find tooltip for " + d } if (f.isShown()) return f; h.stop(!0, !0); var o = c(d, h, e); e.tip && h.html(d.data("title")), b = a.Event(), b.type = "onBeforeShow", g.trigger(b, [o]); if (b.isDefaultPrevented()) return f; o = c(d, h, e), h.css({ position: "absolute", top: o.top, left: o.left }), n = !0, m[0].call(f, function() { b.type = "onShow", n = "full", g.trigger(b) }); var p = e.events.tooltip.split(/,\s*/); h.data("__set") || (h.unbind(p[0]).bind(p[0], function() { clearTimeout(i), clearTimeout(j) }), p[1] && !d.is("input:not(:checkbox, :radio), textarea") && h.unbind(p[1]).bind(p[1], function(a) { a.relatedTarget != d[0] && d.trigger(r[1].split(" ")[0]) }), e.tip || h.data("__set", !0)); return f }, hide: function(c) { if (!h || !f.isShown()) return f; c = a.Event(), c.type = "onBeforeHide", g.trigger(c); if (!c.isDefaultPrevented()) { n = !1, b[e.effect][1].call(f, function() { c.type = "onHide", g.trigger(c) }); return f } }, isShown: function(a) { return a ? n == "full" : n }, getConf: function() { return e }, getTip: function() { return h }, getTrigger: function() { return d } }), a.each("onHide,onBeforeShow,onShow,onBeforeHide".split(","), function(b, c) { a.isFunction(e[c]) && a(f).bind(c, e[c]), f[c] = function(b) { b && a(f).bind(c, b); return f } }) } a.fn.tooltip = function(b) { var c = this.data("tooltip"); if (c) return c; b = a.extend(!0, {}, a.tools.tooltip.conf, b), typeof b.position == "string" && (b.position = b.position.split(/,?\s/)), this.each(function() { c = new d(a(this), b), a(this).data("tooltip", c) }); return b.api ? c : this } })(jQuery);
(function(a) { var b = a.tools.tooltip; b.dynamic = { conf: { classNames: "top right bottom left"} }; function c(b) { var c = a(window), d = c.width() + c.scrollLeft(), e = c.height() + c.scrollTop(); return [b.offset().top <= c.scrollTop(), d <= b.offset().left + b.width(), e <= b.offset().top + b.height(), c.scrollLeft() >= b.offset().left] } function d(a) { var b = a.length; while (b--) if (a[b]) return !1; return !0 } a.fn.dynamic = function(e) { typeof e == "number" && (e = { speed: e }), e = a.extend({}, b.dynamic.conf, e); var f = a.extend(!0, {}, e), g = e.classNames.split(/\s/), h; this.each(function() { var b = a(this).tooltip().onBeforeShow(function(b, e) { var i = this.getTip(), j = this.getConf(); h || (h = [j.position[0], j.position[1], j.offset[0], j.offset[1], a.extend({}, j)]), a.extend(j, h[4]), j.position = [h[0], h[1]], j.offset = [h[2], h[3]], i.css({ visibility: "hidden", position: "absolute", top: e.top, left: e.left }).show(); var k = a.extend(!0, {}, f), l = c(i); if (!d(l)) { l[2] && (a.extend(j, k.top), j.position[0] = "top", i.addClass(g[0])), l[3] && (a.extend(j, k.right), j.position[1] = "right", i.addClass(g[1])), l[0] && (a.extend(j, k.bottom), j.position[0] = "bottom", i.addClass(g[2])), l[1] && (a.extend(j, k.left), j.position[1] = "left", i.addClass(g[3])); if (l[0] || l[2]) j.offset[0] *= -1; if (l[1] || l[3]) j.offset[1] *= -1 } i.css({ visibility: "visible" }).hide() }); b.onBeforeShow(function() { var a = this.getConf(), b = this.getTip(); setTimeout(function() { a.position = [h[0], h[1]], a.offset = [h[2], h[3]] }, 0) }), b.onHide(function() { var a = this.getTip(); a.removeClass(e.classNames) }), ret = b }); return e.api ? ret : this } })(jQuery);


(function(b) {
    function q(c, a) {
        var e = c == window, d = a && a.message !== undefined ? a.message : undefined; a = b.extend({}, b.blockUI.defaults, a || {}); a.overlayCSS = b.extend({}, b.blockUI.defaults.overlayCSS, a.overlayCSS || {}); var g = b.extend({}, b.blockUI.defaults.css, a.css || {}), i = b.extend({}, b.blockUI.defaults.themedCSS, a.themedCSS || {}); d = d === undefined ? a.message : d; e && k && n(window, { fadeOut: 0 }); if (d && typeof d != "string" && (d.parentNode || d.jquery)) {
            var h = d.jquery ? d[0] : d, f = {}; b(c).data("blockUI.history", f); f.el = h; f.parent = h.parentNode;
            f.display = h.style.display; f.position = h.style.position; f.parent && f.parent.removeChild(h)
        } f = a.baseZ; var l = b.browser.msie || a.forceIframe ? b('<iframe class="blockUI" style="z-index:' + f++ + ';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" src="' + a.iframeSrc + '"></iframe>') : b('<div class="blockUI" style="display:none"></div>'); h = b('<div class="blockUI blockOverlay" style="z-index:' + f++ + ';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0"></div>');
        f = a.theme && e ? b('<div class="blockUI blockMsg blockPage ui-dialog ui-widget ui-corner-all" style="z-index:' + f + ';display:none;position:fixed"><div class="ui-widget-header ui-dialog-titlebar blockTitle">' + (a.title || "&nbsp;") + '</div><div class="ui-widget-content ui-dialog-content"></div></div>') : e ? b('<div class="blockUI blockMsg blockPage" style="z-index:' + f + ';display:none;position:fixed"></div>') : b('<div class="blockUI blockMsg blockElement" style="z-index:' + f + ';display:none;position:absolute"></div>');
        if (d) if (a.theme) { f.css(i); f.addClass("ui-widget-content") } else f.css(g); if (!a.applyPlatformOpacityRules || !(b.browser.mozilla && /Linux/.test(navigator.platform))) h.css(a.overlayCSS); h.css("position", e ? "fixed" : "absolute"); if (b.browser.msie || a.forceIframe) l.css("opacity", 0); g = [l, h, f]; var y = e ? b("body") : b(c); b.each(g, function() { this.appendTo(y) }); a.theme && a.draggable && b.fn.draggable && f.draggable({ handle: ".ui-dialog-titlebar", cancel: "li" }); g = z && (!b.boxModel || b("object,embed", e ? null : c).length > 0); if (r || g) {
            e &&
a.allowBodyStretch && b.boxModel && b("html,body").css("height", "100%"); if ((r || !b.boxModel) && !e) { g = parseInt(b.css(c, "borderTopWidth")) || 0; i = parseInt(b.css(c, "borderLeftWidth")) || 0; var s = g ? "(0 - " + g + ")" : 0, t = i ? "(0 - " + i + ")" : 0 } b.each([l, h, f], function(A, B) {
    var j = B[0].style; j.position = "absolute"; if (A < 2) {
        e ? j.setExpression("height", "Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.boxModel?0:" + a.quirksmodeOffsetHack + ') + "px"') : j.setExpression("height", 'this.parentNode.offsetHeight + "px"');
        e ? j.setExpression("width", 'jQuery.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"') : j.setExpression("width", 'this.parentNode.offsetWidth + "px"'); t && j.setExpression("left", t); s && j.setExpression("top", s)
    } else if (a.centerY) {
        e && j.setExpression("top", '(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"');
        j.marginTop = 0
    } else if (!a.centerY && e) { var C = "((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + " + (a.css && a.css.top ? parseInt(a.css.top) : 0) + ') + "px"'; j.setExpression("top", C) }
})
        } if (d) { a.theme ? f.find(".ui-widget-content").append(d) : f.append(d); if (d.jquery || d.nodeType) b(d).show() } if ((b.browser.msie || a.forceIframe) && a.showOverlay) l.show(); if (a.fadeIn) {
            g = a.onBlock ? a.onBlock : o; l = a.showOverlay && !d ? g : o; g = d ? g : o; a.showOverlay && h._fadeIn(a.fadeIn, l); d && f._fadeIn(a.fadeIn,
g)
        } else { a.showOverlay && h.show(); d && f.show(); a.onBlock && a.onBlock() } u(1, c, a); if (e) { k = f[0]; m = b(":input:enabled:visible", k); a.focusInput && setTimeout(v, 20) } else D(f[0], a.centerX, a.centerY); if (a.timeout) { d = setTimeout(function() { e ? b.unblockUI(a) : b(c).unblock(a) }, a.timeout); b(c).data("blockUI.timeout", d) }
    } function n(c, a) {
        var e = c == window, d = b(c), g = d.data("blockUI.history"), i = d.data("blockUI.timeout"); if (i) { clearTimeout(i); d.removeData("blockUI.timeout") } a = b.extend({}, b.blockUI.defaults, a || {}); u(0, c, a); var h;
        h = e ? b("body").children().filter(".blockUI").add("body > .blockUI") : b(".blockUI", c); if (e) k = m = null; if (a.fadeOut) { h.fadeOut(a.fadeOut); setTimeout(function() { w(h, g, a, c) }, a.fadeOut) } else w(h, g, a, c)
    } function w(c, a, e, d) { c.each(function() { this.parentNode && this.parentNode.removeChild(this) }); if (a && a.el) { a.el.style.display = a.display; a.el.style.position = a.position; a.parent && a.parent.appendChild(a.el); b(d).removeData("blockUI.history") } typeof e.onUnblock == "function" && e.onUnblock(d, e) } function u(c, a, e) {
        var d =
a == window; a = b(a); if (!(!c && (d && !k || !d && !a.data("blockUI.isBlocked")))) { d || a.data("blockUI.isBlocked", c); !e.bindEvents || c && !e.showOverlay || (c ? b(document).bind("mousedown mouseup keydown keypress", e, x) : b(document).unbind("mousedown mouseup keydown keypress", x)) }
    } function x(c) {
        if (c.keyCode && c.keyCode == 9) if (k && c.data.constrainTabKey) { var a = m, e = c.shiftKey && c.target == a[0]; if (!c.shiftKey && c.target == a[a.length - 1] || e) { setTimeout(function() { v(e) }, 10); return false } } if (b(c.target).parents("div.blockMsg").length >
0) return true; return b(c.target).parents().children().filter("div.blockUI").length == 0
    } function v(c) { if (m) (c = m[c === true ? m.length - 1 : 0]) && c.focus() } function D(c, a, e) { var d = c.parentNode, g = c.style, i = (d.offsetWidth - c.offsetWidth) / 2 - (parseInt(b.css(d, "borderLeftWidth")) || 0); c = (d.offsetHeight - c.offsetHeight) / 2 - (parseInt(b.css(d, "borderTopWidth")) || 0); if (a) g.left = i > 0 ? i + "px" : "0"; if (e) g.top = c > 0 ? c + "px" : "0" } if (/1\.(0|1|2)\.(0|1|2)/.test(b.fn.jquery) || /^1.1/.test(b.fn.jquery)) alert("blockUI requires jQuery v1.2.3 or later!  You are using v" +
b.fn.jquery); else {
        b.fn._fadeIn = b.fn.fadeIn; var o = function() { }, p = document.documentMode || 0, z = b.browser.msie && (b.browser.version < 8 && !p || p < 8), r = b.browser.msie && /MSIE 6.0/.test(navigator.userAgent) && !p; b.blockUI = function(c) { q(window, c) }; b.unblockUI = function(c) { n(window, c) }; b.growlUI = function(c, a, e, d) {
            var g = b('<div class="growlUI"></div>'); c && g.append("<h1>" + c + "</h1>"); a && g.append("<h2>" + a + "</h2>"); if (e == undefined) e = 3E3; b.blockUI({ message: g, fadeIn: 700, fadeOut: 1E3, centerY: false, timeout: e, showOverlay: false,
                onUnblock: d, css: b.blockUI.defaults.growlCSS
            })
        }; b.fn.block = function(c) { return this.unblock({ fadeOut: 0 }).each(function() { if (b.css(this, "position") == "static") this.style.position = "relative"; if (b.browser.msie) this.style.zoom = 1; q(this, c) }) }; b.fn.unblock = function(c) { return this.each(function() { n(this, c) }) }; b.blockUI.version = 2.31; b.blockUI.defaults = { message: "<h1>Please wait...</h1>", title: null, draggable: true, theme: false, css: { padding: 0, margin: 0, width: "30%", top: "40%", left: "35%", textAlign: "center", color: "#000",
            border: "3px solid #aaa", backgroundColor: "#fff", cursor: "wait"
        }, themedCSS: { width: "30%", top: "40%", left: "35%" }, overlayCSS: { backgroundColor: "#000", opacity: 0.6, cursor: "wait" }, growlCSS: { width: "350px", top: "10px", left: "", right: "10px", border: "none", padding: "5px", opacity: 0.6, cursor: "default", color: "#fff", backgroundColor: "#000", "-webkit-border-radius": "10px", "-moz-border-radius": "10px" }, iframeSrc: /^https/i.test(window.location.href || "") ? "javascript:false" : "about:blank", forceIframe: false, baseZ: 1E3, centerX: true,
            centerY: true, allowBodyStretch: true, bindEvents: true, constrainTabKey: true, fadeIn: 200, fadeOut: 400, timeout: 0, showOverlay: true, focusInput: true, applyPlatformOpacityRules: true, onBlock: null, onUnblock: null, quirksmodeOffsetHack: 4
        }; var k = null, m = []
    }
})(jQuery);


(function(d) {
    d.fn.extend({ autocomplete2: function(a, b) { var s = typeof a == "string"; b = d.extend({}, d.autocomplete2r.defaults, { url: s ? a : null, data: s ? null : a, delay: s ? d.autocomplete2r.defaults.delay : 10, max: b && !b.scroll ? 10 : 150 }, b); b.highlight = b.highlight || function(l) { return l }; b.formatMatch = b.formatMatch || b.formatItem; return this.each(function() { new d.autocomplete2r(this, b) }) }, result: function(a) { return this.bind("result", a) }, search: function(a) { return this.trigger("search", [a]) }, flushCache: function() { return this.trigger("flushCache") },
        setOptions: function(a) { return this.trigger("setOptions", [a]) }, unautocomplete2: function() { return this.trigger("unautocomplete2") }
    }); d.autocomplete2r = function(a, b) {
        function s() {
            var c = m.selected(); if (!c) return false; var j = c.result; r = j; if (b.multiple) { var q = x(h.val()); if (q.length > 1) { var y = b.multipleSeparator.length, A = d(a).selection().start, v, u = 0; d.each(q, function(C, B) { u += B.length; if (A <= u) { v = C; return false } u += y }); q[v] = j; j = q.join(b.multipleSeparator) } j += b.multipleSeparator } h.val(j); n(); h.trigger("result",
[c.data, c.value]); return true
        } function l(c, j) { if (f == e.DEL) m.hide(); else { var q = h.val(); if (!(!j && q == r)) { r = q; q = o(q); if (q.length >= b.minChars) { h.addClass(b.loadingClass); b.matchCase || (q = q.toLowerCase()); g(q, i, n) } else { h.removeClass(b.loadingClass); m.hide() } } } } function x(c) { if (!c) return [""]; if (!b.multiple) return [d.trim(c)]; return d.map(c.split(b.multipleSeparator), function(j) { return d.trim(c).length ? d.trim(j) : null }) } function o(c) {
            if (!b.multiple) return c; var j = x(c); if (j.length == 1) return j[0]; j = d(a).selection().start;
            j = j == c.length ? x(c) : x(c.replace(c.substring(j), "")); return j[j.length - 1]
        } function n() { m.visible(); m.hide(); clearTimeout(p); h.removeClass(b.loadingClass); b.mustMatch && h.search(function(c) { if (!c) if (b.multiple) { c = x(h.val()).slice(0, -1); h.val(c.join(b.multipleSeparator) + (c.length ? b.multipleSeparator : "")) } else { h.val(""); h.trigger("result", null) } }) } function i(c, j) {
            if (j && j.length && k) {
                h.removeClass(b.loadingClass); m.display(j, c); var q = j[0].value; if (b.autoFill && o(h.val()).toLowerCase() == c.toLowerCase() && f !=
e.BACKSPACE) { h.val(h.val() + q.substring(o(r).length)); d(a).selection(r.length, r.length + q.length) } m.show()
            } else n()
        } function g(c, j, q) {
            b.matchCase || (c = c.toLowerCase()); var y = t.load(c); if (y && y.length) j(c, y); else if (typeof b.url == "string" && b.url.length > 0) {
                var A = { timestamp: +new Date }; d.each(b.extraParams, function(v, u) { A[v] = typeof u == "function" ? u() : u }); d.ajax({ mode: "abort", port: "autocomplete2" + a.name, dataType: b.dataType, url: b.url, data: d.extend({ q: o(c), limit: b.max }, A), success: function(v) {
                    var u; if (!(u = b.parse &&
b.parse(v))) { u = []; v = v.split("\n"); for (var C = 0; C < v.length; C++) { var B = d.trim(v[C]); if (B) { B = B.split("|"); u[u.length] = { data: B, value: B[0], result: b.formatResult && b.formatResult(B, B[0]) || B[0]} } } u = u } u = u; t.add(c, u); j(c, u)
                }
                })
            } else { m.emptyList(); q(c) }
        } var e = { UP: 38, DOWN: 40, DEL: 46, TAB: 9, RETURN: 13, ESC: 27, COMMA: 188, PAGEUP: 33, PAGEDOWN: 34, BACKSPACE: 8 }, h = d(a).attr("autocomplete2", "off").addClass(b.inputClass), p, r = "", t = d.autocomplete2r.Cache(b), k = 0, f, w = { mouseDownOnSelect: false }, m = d.autocomplete2r.Select(b, a, s, w), z;
        d.browser.opera && d(a.form).bind("submit.autocomplete2", function() { if (z) return z = false }); h.bind((d.browser.opera ? "keypress" : "keydown") + ".autocomplete2", function(c) {
            k = 1; f = c.keyCode; switch (c.keyCode) {
                case e.UP: if (m.visible()) { c.preventDefault(); m.prev() } else l(0, true); break; case e.DOWN: if (m.visible()) { c.preventDefault(); m.next() } else l(0, true); break; case e.PAGEUP: c.preventDefault(); m.visible() ? m.pageUp() : l(0, true); break; case e.PAGEDOWN: c.preventDefault(); m.visible() ? m.pageDown() : l(0, true); break; case b.multiple &&
d.trim(b.multipleSeparator) == "," && e.COMMA: case e.TAB: case e.RETURN: if (s()) { c.preventDefault(); z = true; return false } break; case e.ESC: m.hide(); break; default: clearTimeout(p); p = setTimeout(l, b.delay)
            }
        }).focus(function() { k++ }).blur(function() { k = 0; if (!w.mouseDownOnSelect) { clearTimeout(p); p = setTimeout(n, 200) } }).click(function() { k++ > 1 && !m.visible() && l(0, true) }).bind("search", function() {
            function c(q, y) {
                var A; if (y && y.length) for (var v = 0; v < y.length; v++) if (y[v].result.toLowerCase() == q.toLowerCase()) { A = y[v]; break } typeof j ==
"function" ? j(A) : h.trigger("result", A && [A.data, A.value])
            } var j = arguments.length > 1 ? arguments[1] : null; d.each(x(h.val()), function(q, y) { g(y, c, c) })
        }).bind("flushCache", function() { t.flush() }).bind("setOptions", function(c, j) { d.extend(true, b, j); "data" in j && t.populate() }).bind("unautocomplete2", function() { m.unbind(); h.unbind(); d(a.form).unbind(".autocomplete2") })
    }; d.autocomplete2r.defaults = { inputClass: "ac_input", resultsClass: "ac_results", loadingClass: "ac_loading", minChars: 1, delay: 400, matchCase: false, matchSubset: true,
        matchContains: false, cacheLength: 100, max: 1E3, mustMatch: false, extraParams: {}, selectFirst: true, formatItem: function(a) { return a[0] }, formatMatch: null, autoFill: false, width: 0, multiple: false, multipleSeparator: " ", highlight: function(a, b) { return a.replace(RegExp("(?![^&;]+;)(?!<[^<>]*)(" + b.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>") }, scroll: true, scrollHeight: 180
    }; d.autocomplete2r.Cache = function(a) {
        function b(i, g) {
            a.matchCase || (i = i.toLowerCase());
            var e = i.indexOf(g); if (a.matchContains == "word") e = i.toLowerCase().search("\\b" + g.toLowerCase()); if (e == -1) return false; return e == 0 || a.matchContains
        } function s(i, g) { n > a.cacheLength && x(); o[i] || n++; o[i] = g } function l() {
            if (!a.data) return false; var i = {}, g = 0; if (!a.url) a.cacheLength = 1; i[""] = []; for (var e = 0, h = a.data.length; e < h; e++) {
                var p = a.data[e]; p = typeof p == "string" ? [p] : p; var r = a.formatMatch(p, e + 1, a.data.length); if (r !== false) {
                    var t = r.charAt(0).toLowerCase(); i[t] || (i[t] = []); p = { value: r, data: p, result: a.formatResult &&
a.formatResult(p) || r
                    }; i[t].push(p); g++ < a.max && i[""].push(p)
                }
            } d.each(i, function(k, f) { a.cacheLength++; s(k, f) })
        } function x() { o = {}; n = 0 } var o = {}, n = 0; setTimeout(l, 25); return { flush: x, add: s, populate: l, load: function(i) {
            if (!a.cacheLength || !n) return null; if (!a.url && a.matchContains) { var g = [], e; for (e in o) if (e.length > 0) { var h = o[e]; d.each(h, function(p, r) { b(r.value, i) && g.push(r) }) } return g } else if (o[i]) return o[i]; else if (a.matchSubset) for (e = i.length - 1; e >= a.minChars; e--) if (h = o[i.substr(0, e)]) {
                g = []; d.each(h, function(p,
r) { if (b(r.value, i)) g[g.length] = r }); return g
            } return null
        } 
        }
    }; d.autocomplete2r.Select = function(a, b, s, l) {
        function x() {
            if (r) {
                t = d("<div/>").hide().addClass(a.resultsClass).css("position", "absolute").appendTo(document.body); k = d("<ul/>").appendTo(t).mouseover(function(f) { if (o(f).nodeName && o(f).nodeName.toUpperCase() == "LI") { e = d("li", k).removeClass(i.ACTIVE).index(o(f)); d(o(f)).addClass(i.ACTIVE) } }).click(function(f) { d(o(f)).addClass(i.ACTIVE); s(); b.focus(); return false }).mousedown(function() {
                    l.mouseDownOnSelect =
true
                }).mouseup(function() { l.mouseDownOnSelect = false }); a.width > 0 && t.css("width", a.width); r = false
            }
        } function o(f) { for (f = f.target; f && f.tagName != "LI"; ) f = f.parentNode; if (!f) return []; return f } function n(f) {
            g.slice(e, e + 1).removeClass(i.ACTIVE); e += f; if (e < 0) e = g.size() - 1; else if (e >= g.size()) e = 0; f = g.slice(e, e + 1).addClass(i.ACTIVE); if (a.scroll) {
                var w = 0; g.slice(0, e).each(function() { w += this.offsetHeight }); if (w + f[0].offsetHeight - k.scrollTop() > k[0].clientHeight) k.scrollTop(w + f[0].offsetHeight - k.innerHeight()); else w <
k.scrollTop() && k.scrollTop(w)
            }
        } var i = { ACTIVE: "ac_over" }, g, e = -1, h, p = "", r = true, t, k; return { display: function(f, w) { x(); h = f; p = w; k.empty(); for (var m = a.max && a.max < h.length ? a.max : h.length, z = 0; z < m; z++) if (h[z]) { var c = a.formatItem(h[z].data, z + 1, m, h[z].value, p); if (c !== false) { c = d("<li/>").html(a.highlight(c, p)).addClass(z % 2 == 0 ? "ac_even" : "ac_odd").appendTo(k)[0]; d.data(c, "ac_data", h[z]) } } g = k.find("li"); if (a.selectFirst) { g.slice(0, 1).addClass(i.ACTIVE); e = 0 } d.fn.bgiframe && k.bgiframe() }, next: function() { n(1) }, prev: function() { n(-1) },
            pageUp: function() { e != 0 && e - 8 < 0 ? n(-e) : n(-8) }, pageDown: function() { e != g.size() - 1 && e + 8 > g.size() ? n(g.size() - 1 - e) : n(8) }, hide: function() { t && t.hide(); g && g.removeClass(i.ACTIVE); e = -1 }, visible: function() { return t && t.is(":visible") }, current: function() { return this.visible() && (g.filter("." + i.ACTIVE)[0] || a.selectFirst && g[0]) }, show: function() {
                var f = d(b).offset(); t.css({ width: typeof a.width == "string" || a.width > 0 ? a.width : d(b).width(), top: f.top + b.offsetHeight, left: f.left }).show(); if (a.scroll) {
                    k.scrollTop(0); k.css({ maxHeight: a.scrollHeight,
                        overflow: "auto"
                    }); if (d.browser.msie && typeof document.body.style.maxHeight === "undefined") { var w = 0; g.each(function() { w += this.offsetHeight }); f = w > a.scrollHeight; k.css("height", f ? a.scrollHeight : w); f || g.width(k.width() - parseInt(g.css("padding-left")) - parseInt(g.css("padding-right"))) }
                }
            }, selected: function() { var f = g && g.filter("." + i.ACTIVE).removeClass(i.ACTIVE); return f && f.length && d.data(f[0], "ac_data") }, emptyList: function() { k && k.empty() }, unbind: function() { t && t.remove() } 
        }
    }; d.fn.selection = function(a, b) {
        if (a !==
undefined) return this.each(function() { if (this.createTextRange) { var n = this.createTextRange(); if (b === undefined || a == b) n.move("character", a); else { n.collapse(true); n.moveStart("character", a); n.moveEnd("character", b) } n.select() } else if (this.setSelectionRange) this.setSelectionRange(a, b); else if (this.selectionStart) { this.selectionStart = a; this.selectionEnd = b } }); var s = this[0]; if (s.createTextRange) {
            var l = document.selection.createRange(), x = s.value, o = l.text.length; l.text = "<->"; l = s.value.indexOf("<->"); s.value =
x; this.selection(l, l + o); return { start: l, end: l + o }
        } else if (s.selectionStart !== undefined) return { start: s.selectionStart, end: s.selectionEnd }
    }
})(jQuery);


; var Hashtable = (function() { var p = "function"; var n = (typeof Array.prototype.splice == p) ? function(s, r) { s.splice(r, 1) } : function(u, t) { var s, v, r; if (t === u.length - 1) { u.length = t } else { s = u.slice(t + 1); u.length = t; for (v = 0, r = s.length; v < r; ++v) { u[t + v] = s[v] } } }; function a(t) { var r; if (typeof t == "string") { return t } else { if (typeof t.hashCode == p) { r = t.hashCode(); return (typeof r == "string") ? r : a(r) } else { if (typeof t.toString == p) { return t.toString() } else { try { return String(t) } catch (s) { return Object.prototype.toString.call(t) } } } } } function g(r, s) { return r.equals(s) } function e(r, s) { return (typeof s.equals == p) ? s.equals(r) : (r === s) } function c(r) { return function(s) { if (s === null) { throw new Error("null is not a valid " + r) } else { if (typeof s == "undefined") { throw new Error(r + " must not be undefined") } } } } var q = c("key"), l = c("value"); function d(u, s, t, r) { this[0] = u; this.entries = []; this.addEntry(s, t); if (r !== null) { this.getEqualityFunction = function() { return r } } } var h = 0, j = 1, f = 2; function o(r) { return function(t) { var s = this.entries.length, v, u = this.getEqualityFunction(t); while (s--) { v = this.entries[s]; if (u(t, v[0])) { switch (r) { case h: return true; case j: return v; case f: return [s, v[1]] } } } return false } } function k(r) { return function(u) { var v = u.length; for (var t = 0, s = this.entries.length; t < s; ++t) { u[v + t] = this.entries[t][r] } } } d.prototype = { getEqualityFunction: function(r) { return (typeof r.equals == p) ? g : e }, getEntryForKey: o(j), getEntryAndIndexForKey: o(f), removeEntryForKey: function(s) { var r = this.getEntryAndIndexForKey(s); if (r) { n(this.entries, r[0]); return r[1] } return null }, addEntry: function(r, s) { this.entries[this.entries.length] = [r, s] }, keys: k(0), values: k(1), getEntries: function(s) { var u = s.length; for (var t = 0, r = this.entries.length; t < r; ++t) { s[u + t] = this.entries[t].slice(0) } }, containsKey: o(h), containsValue: function(s) { var r = this.entries.length; while (r--) { if (s === this.entries[r][1]) { return true } } return false } }; function m(s, t) { var r = s.length, u; while (r--) { u = s[r]; if (t === u[0]) { return r } } return null } function i(r, s) { var t = r[s]; return (t && (t instanceof d)) ? t : null } function b(t, r) { var w = this; var v = []; var u = {}; var x = (typeof t == p) ? t : a; var s = (typeof r == p) ? r : null; this.put = function(B, C) { q(B); l(C); var D = x(B), E, A, z = null; E = i(u, D); if (E) { A = E.getEntryForKey(B); if (A) { z = A[1]; A[1] = C } else { E.addEntry(B, C) } } else { E = new d(D, B, C, s); v[v.length] = E; u[D] = E } return z }; this.get = function(A) { q(A); var B = x(A); var C = i(u, B); if (C) { var z = C.getEntryForKey(A); if (z) { return z[1] } } return null }; this.containsKey = function(A) { q(A); var z = x(A); var B = i(u, z); return B ? B.containsKey(A) : false }; this.containsValue = function(A) { l(A); var z = v.length; while (z--) { if (v[z].containsValue(A)) { return true } } return false }; this.clear = function() { v.length = 0; u = {} }; this.isEmpty = function() { return !v.length }; var y = function(z) { return function() { var A = [], B = v.length; while (B--) { v[B][z](A) } return A } }; this.keys = y("keys"); this.values = y("values"); this.entries = y("getEntries"); this.remove = function(B) { q(B); var C = x(B), z, A = null; var D = i(u, C); if (D) { A = D.removeEntryForKey(B); if (A !== null) { if (!D.entries.length) { z = m(v, C); n(v, z); delete u[C] } } } return A }; this.size = function() { var A = 0, z = v.length; while (z--) { A += v[z].entries.length } return A }; this.each = function(C) { var z = w.entries(), A = z.length, B; while (A--) { B = z[A]; C(B[0], B[1]) } }; this.putAll = function(H, C) { var B = H.entries(); var E, F, D, z, A = B.length; var G = (typeof C == p); while (A--) { E = B[A]; F = E[0]; D = E[1]; if (G && (z = w.get(F))) { D = C(F, z, D) } w.put(F, D) } }; this.clone = function() { var z = new b(t, r); z.putAll(w); return z } } return b })(); (function() {
    var initializing = false, fnTest = /xyz/.test(function() { xyz; }) ? /\b_super\b/ : /.*/; this.Class = function() { }; Class.extend = function(prop) {
        var _super = this.prototype; initializing = true; var prototype = new this(); initializing = false; for (var name in prop) { prototype[name] = typeof prop[name] == "function" && typeof _super[name] == "function" && fnTest.test(prop[name]) ? (function(name, fn) { return function() { var tmp = this._super; this._super = _super[name]; var ret = fn.apply(this, arguments); this._super = tmp; return ret; }; })(name, prop[name]) : prop[name]; }
        function Class() {
            if (!initializing && this.init)
                this.init.apply(this, arguments);
        }
        Class.prototype = prototype; Class.constructor = Class; Class.extend = arguments.callee; return Class;
    };
})();

document.createElement("canvas").getContext || function() {
    function W() { return this.context_ || (this.context_ = new D(this)) } function X(a, b) { var c = N.call(arguments, 2); return function() { return a.apply(b, c.concat(N.call(arguments))) } } function O(a) { return String(a).replace(/&/g, "&amp;").replace(/"/g, "&quot;") } function P(a) {
        a.namespaces.g_vml_ || a.namespaces.add("g_vml_", "urn:schemas-microsoft-com:vml", "#default#VML"); a.namespaces.g_o_ || a.namespaces.add("g_o_", "urn:schemas-microsoft-com:office:office", "#default#VML");
        if (!a.styleSheets.ex_canvas_) { a = a.createStyleSheet(); a.owningElement.id = "ex_canvas_"; a.cssText = "canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}" }
    } function Y(a) {
        var b = a.srcElement; switch (a.propertyName) {
            case "width": b.getContext().clearRect(); b.style.width = b.attributes.width.nodeValue + "px"; b.firstChild.style.width = b.clientWidth + "px"; break; case "height": b.getContext().clearRect(); b.style.height = b.attributes.height.nodeValue + "px"; b.firstChild.style.height = b.clientHeight +
"px"
        }
    } function Z(a) { a = a.srcElement; if (a.firstChild) { a.firstChild.style.width = a.clientWidth + "px"; a.firstChild.style.height = a.clientHeight + "px" } } function E() { return [[1, 0, 0], [0, 1, 0], [0, 0, 1]] } function u(a, b) { for (var c = E(), d = 0; d < 3; d++) for (var e = 0; e < 3; e++) { for (var f = 0, h = 0; h < 3; h++) f += a[d][h] * b[h][e]; c[d][e] = f } return c } function Q(a, b) {
        b.fillStyle = a.fillStyle; b.lineCap = a.lineCap; b.lineJoin = a.lineJoin; b.lineWidth = a.lineWidth; b.miterLimit = a.miterLimit; b.shadowBlur = a.shadowBlur; b.shadowColor = a.shadowColor; b.shadowOffsetX =
a.shadowOffsetX; b.shadowOffsetY = a.shadowOffsetY; b.strokeStyle = a.strokeStyle; b.globalAlpha = a.globalAlpha; b.font = a.font; b.textAlign = a.textAlign; b.textBaseline = a.textBaseline; b.arcScaleX_ = a.arcScaleX_; b.arcScaleY_ = a.arcScaleY_; b.lineScale_ = a.lineScale_
    } function R(a) { var b = a.indexOf("(", 3), c = a.indexOf(")", b + 1); b = a.substring(b + 1, c).split(","); if (b.length != 4 || a.charAt(3) != "a") b[3] = 1; return b } function F(a, b, c) { return Math.min(c, Math.max(b, a)) } function G(a, b, c) {
        c < 0 && c++; c > 1 && c--; return 6 * c < 1 ? a + (b - a) * 6 * c :
2 * c < 1 ? b : 3 * c < 2 ? a + (b - a) * (2 / 3 - c) * 6 : a
    } function H(a) {
        if (a in I) return I[a]; var b, c = 1; a = String(a); if (a.charAt(0) == "#") b = a; else if (/^rgb/.test(a)) { c = R(a); b = "#"; for (var d, e = 0; e < 3; e++) { d = c[e].indexOf("%") != -1 ? Math.floor(parseFloat(c[e]) / 100 * 255) : +c[e]; b += v[F(d, 0, 255)] } c = +c[3] } else if (/^hsl/.test(a)) {
            e = c = R(a); b = parseFloat(e[0]) / 360 % 360; b < 0 && b++; d = F(parseFloat(e[1]) / 100, 0, 1); e = F(parseFloat(e[2]) / 100, 0, 1); if (d == 0) d = e = b = e; else { var f = e < 0.5 ? e * (1 + d) : e + d - e * d, h = 2 * e - f; d = G(h, f, b + 1 / 3); e = G(h, f, b); b = G(h, f, b - 1 / 3) } b = "#" +
v[Math.floor(d * 255)] + v[Math.floor(e * 255)] + v[Math.floor(b * 255)]; c = c[3]
        } else b = $[a] || a; return I[a] = { color: b, alpha: c }
    } function D(a) {
        this.m_ = E(); this.mStack_ = []; this.aStack_ = []; this.currentPath_ = []; this.fillStyle = this.strokeStyle = "#000"; this.lineWidth = 1; this.lineJoin = "miter"; this.lineCap = "butt"; this.miterLimit = n * 1; this.globalAlpha = 1; this.font = "10px sans-serif"; this.textAlign = "left"; this.textBaseline = "alphabetic"; this.canvas = a; var b = "width:" + a.clientWidth + "px;height:" + a.clientHeight + "px;overflow:hidden;position:absolute",
c = a.ownerDocument.createElement("div"); c.style.cssText = b; a.appendChild(c); b = c.cloneNode(false); b.style.backgroundColor = "red"; b.style.filter = "alpha(opacity=0)"; a.appendChild(b); this.element_ = c; this.lineScale_ = this.arcScaleY_ = this.arcScaleX_ = 1
    } function S(a, b, c, d) { a.currentPath_.push({ type: "bezierCurveTo", cp1x: b.x, cp1y: b.y, cp2x: c.x, cp2y: c.y, x: d.x, y: d.y }); a.currentX_ = d.x; a.currentY_ = d.y } function T(a, b) {
        var c = H(a.strokeStyle), d = c.color; c = c.alpha * a.globalAlpha; var e = a.lineScale_ * a.lineWidth; if (e < 1) c *= e;
        b.push("<g_vml_:stroke", ' opacity="', c, '"', ' joinstyle="', a.lineJoin, '"', ' miterlimit="', a.miterLimit, '"', ' endcap="', aa[a.lineCap] || "square", '"', ' weight="', e, 'px"', ' color="', d, '" />')
    } function U(a, b, c, d) {
        var e = a.fillStyle, f = a.arcScaleX_, h = a.arcScaleY_, l = d.x - c.x, o = d.y - c.y; if (e instanceof w) {
            var i = 0; d = { x: 0, y: 0 }; var j = 0, q = 1; if (e.type_ == "gradient") { i = e.x1_ / f; c = e.y1_ / h; var m = p(a, e.x0_ / f, e.y0_ / h); i = p(a, i, c); i = Math.atan2(i.x - m.x, i.y - m.y) * 180 / Math.PI; if (i < 0) i += 360; if (i < 1.0E-6) i = 0 } else {
                m = p(a, e.x0_, e.y0_);
                d = { x: (m.x - c.x) / l, y: (m.y - c.y) / o }; l /= f * n; o /= h * n; q = s.max(l, o); j = 2 * e.r0_ / q; q = 2 * e.r1_ / q - j
            } f = e.colors_; f.sort(function(B, ba) { return B.offset - ba.offset }); h = f.length; m = f[0].color; c = f[h - 1].color; l = f[0].alpha * a.globalAlpha; a = f[h - 1].alpha * a.globalAlpha; o = []; for (var r = 0; r < h; r++) { var x = f[r]; o.push(x.offset * q + j + " " + x.color) } b.push('<g_vml_:fill type="', e.type_, '"', ' method="none" focus="100%"', ' color="', m, '"', ' color2="', c, '"', ' colors="', o.join(","), '"', ' opacity="', a, '"', ' g_o_:opacity2="', l, '"', ' angle="',
i, '"', ' focusposition="', d.x, ",", d.y, '" />')
        } else if (e instanceof J) l && o && b.push("<g_vml_:fill", ' position="', -c.x / l * f * f, ",", -c.y / o * h * h, '"', ' type="tile"', ' src="', e.src_, '" />'); else { e = H(a.fillStyle); b.push('<g_vml_:fill color="', e.color, '" opacity="', e.alpha * a.globalAlpha, '" />') }
    } function p(a, b, c) { a = a.m_; return { x: n * (b * a[0][0] + c * a[1][0] + a[2][0]) - t, y: n * (b * a[0][1] + c * a[1][1] + a[2][1]) - t} } function y(a, b, c) {
        if (isFinite(b[0][0]) && isFinite(b[0][1]) && isFinite(b[1][0]) && isFinite(b[1][1]) && isFinite(b[2][0]) &&
isFinite(b[2][1])) { a.m_ = b; if (c) a.lineScale_ = ca(da(b[0][0] * b[1][1] - b[0][1] * b[1][0])) }
    } function w(a) { this.type_ = a; this.r1_ = this.y1_ = this.x1_ = this.r0_ = this.y0_ = this.x0_ = 0; this.colors_ = [] } function J(a, b) {
        if (!a || a.nodeType != 1 || a.tagName != "IMG") throw new z("TYPE_MISMATCH_ERR"); if (a.readyState != "complete") throw new z("INVALID_STATE_ERR"); switch (b) {
            case "repeat": case null: case "": this.repetition_ = "repeat"; break; case "repeat-x": case "repeat-y": case "no-repeat": this.repetition_ = b; break; default: throw new z("SYNTAX_ERR");
        } this.src_ = a.src; this.width_ = a.width; this.height_ = a.height
    } function z(a) { this.code = this[a]; this.message = a + ": DOM Exception " + this.code } var s = Math, k = s.round, K = s.sin, L = s.cos, da = s.abs, ca = s.sqrt, n = 10, t = n / 2; navigator.userAgent.match(/MSIE ([\d.]+)?/); var N = Array.prototype.slice; P(document); var V = { init: function(a) { a = a || document; a.createElement("canvas"); a.attachEvent("onreadystatechange", X(this.init_, this, a)) }, init_: function(a) { a = a.getElementsByTagName("canvas"); for (var b = 0; b < a.length; b++) this.initElement(a[b]) },
        initElement: function(a) { if (!a.getContext) { a.getContext = W; P(a.ownerDocument); a.innerHTML = ""; a.attachEvent("onpropertychange", Y); a.attachEvent("onresize", Z); var b = a.attributes; if (b.width && b.width.specified) a.style.width = b.width.nodeValue + "px"; else a.width = a.clientWidth; if (b.height && b.height.specified) a.style.height = b.height.nodeValue + "px"; else a.height = a.clientHeight } return a }
    }; V.init(); for (var v = [], g = 0; g < 16; g++) for (var C = 0; C < 16; C++) v[g * 16 + C] = g.toString(16) + C.toString(16); var $ = { aliceblue: "#F0F8FF",
        antiquewhite: "#FAEBD7", aquamarine: "#7FFFD4", azure: "#F0FFFF", beige: "#F5F5DC", bisque: "#FFE4C4", black: "#000000", blanchedalmond: "#FFEBCD", blueviolet: "#8A2BE2", brown: "#A52A2A", burlywood: "#DEB887", cadetblue: "#5F9EA0", chartreuse: "#7FFF00", chocolate: "#D2691E", coral: "#FF7F50", cornflowerblue: "#6495ED", cornsilk: "#FFF8DC", crimson: "#DC143C", cyan: "#00FFFF", darkblue: "#00008B", darkcyan: "#008B8B", darkgoldenrod: "#B8860B", darkgray: "#A9A9A9", darkgreen: "#006400", darkgrey: "#A9A9A9", darkkhaki: "#BDB76B", darkmagenta: "#8B008B",
        darkolivegreen: "#556B2F", darkorange: "#FF8C00", darkorchid: "#9932CC", darkred: "#8B0000", darksalmon: "#E9967A", darkseagreen: "#8FBC8F", darkslateblue: "#483D8B", darkslategray: "#2F4F4F", darkslategrey: "#2F4F4F", darkturquoise: "#00CED1", darkviolet: "#9400D3", deeppink: "#FF1493", deepskyblue: "#00BFFF", dimgray: "#696969", dimgrey: "#696969", dodgerblue: "#1E90FF", firebrick: "#B22222", floralwhite: "#FFFAF0", forestgreen: "#228B22", gainsboro: "#DCDCDC", ghostwhite: "#F8F8FF", gold: "#FFD700", goldenrod: "#DAA520", grey: "#808080", greenyellow: "#ADFF2F",
        honeydew: "#F0FFF0", hotpink: "#FF69B4", indianred: "#CD5C5C", indigo: "#4B0082", ivory: "#FFFFF0", khaki: "#F0E68C", lavender: "#E6E6FA", lavenderblush: "#FFF0F5", lawngreen: "#7CFC00", lemonchiffon: "#FFFACD", lightblue: "#ADD8E6", lightcoral: "#F08080", lightcyan: "#E0FFFF", lightgoldenrodyellow: "#FAFAD2", lightgreen: "#90EE90", lightgrey: "#D3D3D3", lightpink: "#FFB6C1", lightsalmon: "#FFA07A", lightseagreen: "#20B2AA", lightskyblue: "#87CEFA", lightslategray: "#778899", lightslategrey: "#778899", lightsteelblue: "#B0C4DE", lightyellow: "#FFFFE0",
        limegreen: "#32CD32", linen: "#FAF0E6", magenta: "#FF00FF", mediumaquamarine: "#66CDAA", mediumblue: "#0000CD", mediumorchid: "#BA55D3", mediumpurple: "#9370DB", mediumseagreen: "#3CB371", mediumslateblue: "#7B68EE", mediumspringgreen: "#00FA9A", mediumturquoise: "#48D1CC", mediumvioletred: "#C71585", midnightblue: "#191970", mintcream: "#F5FFFA", mistyrose: "#FFE4E1", moccasin: "#FFE4B5", navajowhite: "#FFDEAD", oldlace: "#FDF5E6", olivedrab: "#6B8E23", orange: "#FFA500", orangered: "#FF4500", orchid: "#DA70D6", palegoldenrod: "#EEE8AA", palegreen: "#98FB98",
        paleturquoise: "#AFEEEE", palevioletred: "#DB7093", papayawhip: "#FFEFD5", peachpuff: "#FFDAB9", peru: "#CD853F", pink: "#FFC0CB", plum: "#DDA0DD", powderblue: "#B0E0E6", rosybrown: "#BC8F8F", royalblue: "#4169E1", saddlebrown: "#8B4513", salmon: "#FA8072", sandybrown: "#F4A460", seagreen: "#2E8B57", seashell: "#FFF5EE", sienna: "#A0522D", skyblue: "#87CEEB", slateblue: "#6A5ACD", slategray: "#708090", slategrey: "#708090", snow: "#FFFAFA", springgreen: "#00FF7F", steelblue: "#4682B4", tan: "#D2B48C", thistle: "#D8BFD8", tomato: "#FF6347", turquoise: "#40E0D0",
        violet: "#EE82EE", wheat: "#F5DEB3", whitesmoke: "#F5F5F5", yellowgreen: "#9ACD32"
    }, I = {}, A = { style: "normal", variant: "normal", weight: "normal", size: 10, family: "sans-serif" }, M = {}, aa = { butt: "flat", round: "round" }; g = D.prototype; g.clearRect = function() { if (this.textMeasureEl_) { this.textMeasureEl_.removeNode(true); this.textMeasureEl_ = null } this.element_.innerHTML = "" }; g.beginPath = function() { this.currentPath_ = [] }; g.moveTo = function(a, b) {
        var c = p(this, a, b); this.currentPath_.push({ type: "moveTo", x: c.x, y: c.y }); this.currentX_ =
c.x; this.currentY_ = c.y
    }; g.lineTo = function(a, b) { var c = p(this, a, b); this.currentPath_.push({ type: "lineTo", x: c.x, y: c.y }); this.currentX_ = c.x; this.currentY_ = c.y }; g.bezierCurveTo = function(a, b, c, d, e, f) { e = p(this, e, f); a = p(this, a, b); c = p(this, c, d); S(this, a, c, e) }; g.quadraticCurveTo = function(a, b, c, d) { a = p(this, a, b); c = p(this, c, d); d = { x: this.currentX_ + 2 / 3 * (a.x - this.currentX_), y: this.currentY_ + 2 / 3 * (a.y - this.currentY_) }; S(this, d, { x: d.x + (c.x - this.currentX_) / 3, y: d.y + (c.y - this.currentY_) / 3 }, c) }; g.arc = function(a, b, c, d, e,
f) { c *= n; var h = f ? "at" : "wa", l = a + L(d) * c - t, o = b + K(d) * c - t; d = a + L(e) * c - t; e = b + K(e) * c - t; if (l == d && !f) l += 0.125; a = p(this, a, b); l = p(this, l, o); d = p(this, d, e); this.currentPath_.push({ type: h, x: a.x, y: a.y, radius: c, xStart: l.x, yStart: l.y, xEnd: d.x, yEnd: d.y }) }; g.rect = function(a, b, c, d) { this.moveTo(a, b); this.lineTo(a + c, b); this.lineTo(a + c, b + d); this.lineTo(a, b + d); this.closePath() }; g.strokeRect = function(a, b, c, d) {
    var e = this.currentPath_; this.beginPath(); this.moveTo(a, b); this.lineTo(a + c, b); this.lineTo(a + c, b + d); this.lineTo(a, b + d);
    this.closePath(); this.stroke(); this.currentPath_ = e
}; g.fillRect = function(a, b, c, d) { var e = this.currentPath_; this.beginPath(); this.moveTo(a, b); this.lineTo(a + c, b); this.lineTo(a + c, b + d); this.lineTo(a, b + d); this.closePath(); this.fill(); this.currentPath_ = e }; g.createLinearGradient = function(a, b, c, d) { var e = new w("gradient"); e.x0_ = a; e.y0_ = b; e.x1_ = c; e.y1_ = d; return e }; g.createRadialGradient = function(a, b, c, d, e, f) { var h = new w("gradientradial"); h.x0_ = a; h.y0_ = b; h.r0_ = c; h.x1_ = d; h.y1_ = e; h.r1_ = f; return h }; g.drawImage = function(a) {
    var b,
c, d, e, f, h, l, o; d = a.runtimeStyle.width; e = a.runtimeStyle.height; a.runtimeStyle.width = "auto"; a.runtimeStyle.height = "auto"; var i = a.width, j = a.height; a.runtimeStyle.width = d; a.runtimeStyle.height = e; if (arguments.length == 3) { b = arguments[1]; c = arguments[2]; f = h = 0; l = d = i; o = e = j } else if (arguments.length == 5) { b = arguments[1]; c = arguments[2]; d = arguments[3]; e = arguments[4]; f = h = 0; l = i; o = j } else if (arguments.length == 9) {
        f = arguments[1]; h = arguments[2]; l = arguments[3]; o = arguments[4]; b = arguments[5]; c = arguments[6]; d = arguments[7]; e =
arguments[8]
    } else throw Error("Invalid number of arguments"); var q = p(this, b, c), m = []; m.push(" <g_vml_:group", ' coordsize="', n * 10, ",", n * 10, '"', ' coordorigin="0,0"', ' style="width:', 10, "px;height:", 10, "px;position:absolute;"); if (this.m_[0][0] != 1 || this.m_[0][1] || this.m_[1][1] != 1 || this.m_[1][0]) {
        var r = []; r.push("M11=", this.m_[0][0], ",", "M12=", this.m_[1][0], ",", "M21=", this.m_[0][1], ",", "M22=", this.m_[1][1], ",", "Dx=", k(q.x / n), ",", "Dy=", k(q.y / n), ""); var x = p(this, b + d, c), B = p(this, b, c + e); b = p(this, b + d, c + e); q.x =
s.max(q.x, x.x, B.x, b.x); q.y = s.max(q.y, x.y, B.y, b.y); m.push("padding:0 ", k(q.x / n), "px ", k(q.y / n), "px 0;filter:progid:DXImageTransform.Microsoft.Matrix(", r.join(""), ", sizingmethod='clip');")
    } else m.push("top:", k(q.y / n), "px;left:", k(q.x / n), "px;"); m.push(' ">', '<g_vml_:image src="', a.src, '"', ' style="width:', n * d, "px;", " height:", n * e, 'px"', ' cropleft="', f / i, '"', ' croptop="', h / j, '"', ' cropright="', (i - f - l) / i, '"', ' cropbottom="', (j - h - o) / j, '"', " />", "</g_vml_:group>"); this.element_.insertAdjacentHTML("BeforeEnd",
m.join(""))
}; g.stroke = function(a) {
    var b = []; b.push("<g_vml_:shape", ' filled="', !!a, '"', ' style="position:absolute;width:', 10, "px;height:", 10, 'px;"', ' coordorigin="0,0"', ' coordsize="', n * 10, ",", n * 10, '"', ' stroked="', !a, '"', ' path="'); for (var c = { x: null, y: null }, d = { x: null, y: null }, e = 0; e < this.currentPath_.length; e++) {
        var f = this.currentPath_[e]; switch (f.type) {
            case "moveTo": b.push(" m ", k(f.x), ",", k(f.y)); break; case "lineTo": b.push(" l ", k(f.x), ",", k(f.y)); break; case "close": b.push(" x "); f = null; break; case "bezierCurveTo": b.push(" c ",
k(f.cp1x), ",", k(f.cp1y), ",", k(f.cp2x), ",", k(f.cp2y), ",", k(f.x), ",", k(f.y)); break; case "at": case "wa": b.push(" ", f.type, " ", k(f.x - this.arcScaleX_ * f.radius), ",", k(f.y - this.arcScaleY_ * f.radius), " ", k(f.x + this.arcScaleX_ * f.radius), ",", k(f.y + this.arcScaleY_ * f.radius), " ", k(f.xStart), ",", k(f.yStart), " ", k(f.xEnd), ",", k(f.yEnd))
        } if (f) { if (c.x == null || f.x < c.x) c.x = f.x; if (d.x == null || f.x > d.x) d.x = f.x; if (c.y == null || f.y < c.y) c.y = f.y; if (d.y == null || f.y > d.y) d.y = f.y }
    } b.push(' ">'); a ? U(this, b, c, d) : T(this, b); b.push("</g_vml_:shape>");
    this.element_.insertAdjacentHTML("beforeEnd", b.join(""))
}; g.fill = function() { this.stroke(true) }; g.closePath = function() { this.currentPath_.push({ type: "close" }) }; g.save = function() { var a = {}; Q(this, a); this.aStack_.push(a); this.mStack_.push(this.m_); this.m_ = u(E(), this.m_) }; g.restore = function() { if (this.aStack_.length) { Q(this.aStack_.pop(), this); this.m_ = this.mStack_.pop() } }; g.translate = function(a, b) { y(this, u([[1, 0, 0], [0, 1, 0], [a, b, 1]], this.m_), false) }; g.rotate = function(a) {
    var b = L(a); a = K(a); y(this, u([[b, a, 0],
[-a, b, 0], [0, 0, 1]], this.m_), false)
}; g.scale = function(a, b) { this.arcScaleX_ *= a; this.arcScaleY_ *= b; y(this, u([[a, 0, 0], [0, b, 0], [0, 0, 1]], this.m_), true) }; g.transform = function(a, b, c, d, e, f) { y(this, u([[a, b, 0], [c, d, 0], [e, f, 1]], this.m_), true) }; g.setTransform = function(a, b, c, d, e, f) { y(this, [[a, b, 0], [c, d, 0], [e, f, 1]], true) }; g.drawText_ = function(a, b, c, d, e) {
    var f = this.m_; d = 0; var h = 1E3, l = { x: 0, y: 0 }, o = [], i; i = this.font; if (M[i]) i = M[i]; else {
        var j = document.createElement("div").style; try { j.font = i } catch (q) { } i = M[i] = { style: j.fontStyle ||
A.style, variant: j.fontVariant || A.variant, weight: j.fontWeight || A.weight, size: j.fontSize || A.size, family: j.fontFamily || A.family
        }
    } j = i; var m = this.element_; i = {}; for (var r in j) i[r] = j[r]; r = parseFloat(m.currentStyle.fontSize); m = parseFloat(j.size); i.size = typeof j.size == "number" ? j.size : j.size.indexOf("px") != -1 ? m : j.size.indexOf("em") != -1 ? r * m : j.size.indexOf("%") != -1 ? r / 100 * m : j.size.indexOf("pt") != -1 ? m / 0.75 : r; i.size *= 0.981; r = i.style + " " + i.variant + " " + i.weight + " " + i.size + "px " + i.family; m = this.element_.currentStyle;
    j = this.textAlign.toLowerCase(); switch (j) { case "left": case "center": case "right": break; case "end": j = m.direction == "ltr" ? "right" : "left"; break; case "start": j = m.direction == "rtl" ? "right" : "left"; break; default: j = "left" } switch (this.textBaseline) { case "hanging": case "top": l.y = i.size / 1.75; break; case "middle": break; default: case null: case "alphabetic": case "ideographic": case "bottom": l.y = -i.size / 2.25 } switch (j) { case "right": d = 1E3; h = 0.05; break; case "center": d = h = 500 } b = p(this, b + l.x, c + l.y); o.push('<g_vml_:line from="',
-d, ' 0" to="', h, ' 0.05" ', ' coordsize="100 100" coordorigin="0 0"', ' filled="', !e, '" stroked="', !!e, '" style="position:absolute;width:1px;height:1px;">'); e ? T(this, o) : U(this, o, { x: -d, y: 0 }, { x: h, y: i.size }); e = f[0][0].toFixed(3) + "," + f[1][0].toFixed(3) + "," + f[0][1].toFixed(3) + "," + f[1][1].toFixed(3) + ",0,0"; b = k(b.x / n) + "," + k(b.y / n); o.push('<g_vml_:skew on="t" matrix="', e, '" ', ' offset="', b, '" origin="', d, ' 0" />', '<g_vml_:path textpathok="true" />', '<g_vml_:textpath on="true" string="', O(a), '" style="v-text-align:',
j, ";font:", O(r), '" /></g_vml_:line>'); this.element_.insertAdjacentHTML("beforeEnd", o.join(""))
}; g.fillText = function(a, b, c, d) { this.drawText_(a, b, c, d, false) }; g.strokeText = function(a, b, c, d) { this.drawText_(a, b, c, d, true) }; g.measureText = function(a) {
    if (!this.textMeasureEl_) { this.element_.insertAdjacentHTML("beforeEnd", '<span style="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;"></span>'); this.textMeasureEl_ = this.element_.lastChild } var b = this.element_.ownerDocument;
    this.textMeasureEl_.innerHTML = ""; this.textMeasureEl_.style.font = this.font; this.textMeasureEl_.appendChild(b.createTextNode(a)); return { width: this.textMeasureEl_.offsetWidth }
}; g.clip = function() { }; g.arcTo = function() { }; g.createPattern = function(a, b) { return new J(a, b) }; w.prototype.addColorStop = function(a, b) { b = H(b); this.colors_.push({ offset: a, color: b.color, alpha: b.alpha }) }; g = z.prototype = Error(); g.INDEX_SIZE_ERR = 1; g.DOMSTRING_SIZE_ERR = 2; g.HIERARCHY_REQUEST_ERR = 3; g.WRONG_DOCUMENT_ERR = 4; g.INVALID_CHARACTER_ERR =
5; g.NO_DATA_ALLOWED_ERR = 6; g.NO_MODIFICATION_ALLOWED_ERR = 7; g.NOT_FOUND_ERR = 8; g.NOT_SUPPORTED_ERR = 9; g.INUSE_ATTRIBUTE_ERR = 10; g.INVALID_STATE_ERR = 11; g.SYNTAX_ERR = 12; g.INVALID_MODIFICATION_ERR = 13; g.NAMESPACE_ERR = 14; g.INVALID_ACCESS_ERR = 15; g.VALIDATION_ERR = 16; g.TYPE_MISMATCH_ERR = 17; G_vmlCanvasManager = V; CanvasRenderingContext2D = D; CanvasGradient = w; CanvasPattern = J; DOMException = z
} ();

/**
* hoverIntent r6 // 2011.02.26 // jQuery 1.5.1+
* <http://cherne.net/brian/resources/jquery.hoverIntent.html>
* 
* @param  f  onMouseOver function || An object with configuration options
* @param  g  onMouseOut function  || Nothing (use configuration options object)
* @author    Brian Cherne brian(at)cherne(dot)net
*/
(function($) { $.fn.hoverIntent = function(f, g) { var cfg = { sensitivity: 7, interval: 100, timeout: 0 }; cfg = $.extend(cfg, g ? { over: f, out: g} : f); var cX, cY, pX, pY; var track = function(ev) { cX = ev.pageX; cY = ev.pageY }; var compare = function(ev, ob) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); if ((Math.abs(pX - cX) + Math.abs(pY - cY)) < cfg.sensitivity) { $(ob).unbind("mousemove", track); ob.hoverIntent_s = 1; return cfg.over.apply(ob, [ev]) } else { pX = cX; pY = cY; ob.hoverIntent_t = setTimeout(function() { compare(ev, ob) }, cfg.interval) } }; var delay = function(ev, ob) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); ob.hoverIntent_s = 0; return cfg.out.apply(ob, [ev]) }; var handleHover = function(e) { var ev = jQuery.extend({}, e); var ob = this; if (ob.hoverIntent_t) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t) } if (e.type == "mouseenter") { pX = ev.pageX; pY = ev.pageY; $(ob).bind("mousemove", track); if (ob.hoverIntent_s != 1) { ob.hoverIntent_t = setTimeout(function() { compare(ev, ob) }, cfg.interval) } } else { $(ob).unbind("mousemove", track); if (ob.hoverIntent_s == 1) { ob.hoverIntent_t = setTimeout(function() { delay(ev, ob) }, cfg.timeout) } } }; return this.bind('mouseenter', handleHover).bind('mouseleave', handleHover) } })(jQuery);

/* Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net)
* Licensed under the MIT License (LICENSE.txt).
*
* Version 2.1.2
*/
(function(a) { a.fn.bgiframe = (a.browser.msie && /msie 6\.0/i.test(navigator.userAgent) ? function(d) { d = a.extend({ top: "auto", left: "auto", width: "auto", height: "auto", opacity: true, src: "javascript:false;" }, d); var c = '<iframe class="bgiframe"frameborder="0"tabindex="-1"src="' + d.src + '"style="display:block;position:absolute;z-index:-1;' + (d.opacity !== false ? "filter:Alpha(Opacity='0');" : "") + "top:" + (d.top == "auto" ? "expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)||0)*-1)+'px')" : b(d.top)) + ";left:" + (d.left == "auto" ? "expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth)||0)*-1)+'px')" : b(d.left)) + ";width:" + (d.width == "auto" ? "expression(this.parentNode.offsetWidth+'px')" : b(d.width)) + ";height:" + (d.height == "auto" ? "expression(this.parentNode.offsetHeight+'px')" : b(d.height)) + ';"/>'; return this.each(function() { if (a(this).children("iframe.bgiframe").length === 0) { this.insertBefore(document.createElement(c), this.firstChild) } }) } : function() { return this }); a.fn.bgIframe = a.fn.bgiframe; function b(c) { return c && c.constructor === Number ? c + "px" : c } })(jQuery);

/* Javascript plotting library for jQuery, v. 0.7.
*
* Released under the MIT license by IOLA, December 2007.
*
*/
(function(b) { b.color = {}; b.color.make = function(d, e, g, f) { var c = {}; c.r = d || 0; c.g = e || 0; c.b = g || 0; c.a = f != null ? f : 1; c.add = function(h, j) { for (var k = 0; k < h.length; ++k) { c[h.charAt(k)] += j } return c.normalize() }; c.scale = function(h, j) { for (var k = 0; k < h.length; ++k) { c[h.charAt(k)] *= j } return c.normalize() }; c.toString = function() { if (c.a >= 1) { return "rgb(" + [c.r, c.g, c.b].join(",") + ")" } else { return "rgba(" + [c.r, c.g, c.b, c.a].join(",") + ")" } }; c.normalize = function() { function h(k, j, l) { return j < k ? k : (j > l ? l : j) } c.r = h(0, parseInt(c.r), 255); c.g = h(0, parseInt(c.g), 255); c.b = h(0, parseInt(c.b), 255); c.a = h(0, c.a, 1); return c }; c.clone = function() { return b.color.make(c.r, c.b, c.g, c.a) }; return c.normalize() }; b.color.extract = function(d, e) { var c; do { c = d.css(e).toLowerCase(); if (c != "" && c != "transparent") { break } d = d.parent() } while (!b.nodeName(d.get(0), "body")); if (c == "rgba(0, 0, 0, 0)") { c = "transparent" } return b.color.parse(c) }; b.color.parse = function(c) { var d, f = b.color.make; if (d = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c)) { return f(parseInt(d[1], 10), parseInt(d[2], 10), parseInt(d[3], 10)) } if (d = /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(c)) { return f(parseInt(d[1], 10), parseInt(d[2], 10), parseInt(d[3], 10), parseFloat(d[4])) } if (d = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c)) { return f(parseFloat(d[1]) * 2.55, parseFloat(d[2]) * 2.55, parseFloat(d[3]) * 2.55) } if (d = /rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(c)) { return f(parseFloat(d[1]) * 2.55, parseFloat(d[2]) * 2.55, parseFloat(d[3]) * 2.55, parseFloat(d[4])) } if (d = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c)) { return f(parseInt(d[1], 16), parseInt(d[2], 16), parseInt(d[3], 16)) } if (d = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c)) { return f(parseInt(d[1] + d[1], 16), parseInt(d[2] + d[2], 16), parseInt(d[3] + d[3], 16)) } var e = b.trim(c).toLowerCase(); if (e == "transparent") { return f(255, 255, 255, 0) } else { d = a[e] || [0, 0, 0]; return f(d[0], d[1], d[2]) } }; var a = { aqua: [0, 255, 255], azure: [240, 255, 255], beige: [245, 245, 220], black: [0, 0, 0], blue: [0, 0, 255], brown: [165, 42, 42], cyan: [0, 255, 255], darkblue: [0, 0, 139], darkcyan: [0, 139, 139], darkgrey: [169, 169, 169], darkgreen: [0, 100, 0], darkkhaki: [189, 183, 107], darkmagenta: [139, 0, 139], darkolivegreen: [85, 107, 47], darkorange: [255, 140, 0], darkorchid: [153, 50, 204], darkred: [139, 0, 0], darksalmon: [233, 150, 122], darkviolet: [148, 0, 211], fuchsia: [255, 0, 255], gold: [255, 215, 0], green: [0, 128, 0], indigo: [75, 0, 130], khaki: [240, 230, 140], lightblue: [173, 216, 230], lightcyan: [224, 255, 255], lightgreen: [144, 238, 144], lightgrey: [211, 211, 211], lightpink: [255, 182, 193], lightyellow: [255, 255, 224], lime: [0, 255, 0], magenta: [255, 0, 255], maroon: [128, 0, 0], navy: [0, 0, 128], olive: [128, 128, 0], orange: [255, 165, 0], pink: [255, 192, 203], purple: [128, 0, 128], violet: [128, 0, 128], red: [255, 0, 0], silver: [192, 192, 192], white: [255, 255, 255], yellow: [255, 255, 0]} })(jQuery); (function(c) { function b(av, ai, J, af) { var Q = [], O = { colors: ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"], legend: { show: true, noColumns: 1, labelFormatter: null, labelBoxBorderColor: "#ccc", container: null, position: "ne", margin: 5, backgroundColor: null, backgroundOpacity: 0.85 }, xaxis: { show: null, position: "bottom", mode: null, color: null, tickColor: null, transform: null, inverseTransform: null, min: null, max: null, autoscaleMargin: null, ticks: null, tickFormatter: null, labelWidth: null, labelHeight: null, reserveSpace: null, tickLength: null, alignTicksWithAxis: null, tickDecimals: null, tickSize: null, minTickSize: null, monthNames: null, timeformat: null, twelveHourClock: false }, yaxis: { autoscaleMargin: 0.02, position: "left" }, xaxes: [], yaxes: [], series: { points: { show: false, radius: 3, lineWidth: 2, fill: true, fillColor: "#ffffff", symbol: "circle" }, lines: { lineWidth: 2, fill: false, fillColor: null, steps: false }, bars: { show: false, lineWidth: 2, barWidth: 1, fill: true, fillColor: null, align: "left", horizontal: false }, shadowSize: 3 }, grid: { show: true, aboveData: false, color: "#545454", backgroundColor: null, borderColor: null, tickColor: null, labelMargin: 5, axisMargin: 8, borderWidth: 2, minBorderMargin: null, markings: null, markingsColor: "#f4f4f4", markingsLineWidth: 2, clickable: false, hoverable: false, autoHighlight: true, mouseActiveRadius: 10 }, hooks: {} }, az = null, ad = null, y = null, H = null, A = null, p = [], aw = [], q = { left: 0, right: 0, top: 0, bottom: 0 }, G = 0, I = 0, h = 0, w = 0, ak = { processOptions: [], processRawData: [], processDatapoints: [], drawSeries: [], draw: [], bindEvents: [], drawOverlay: [], shutdown: [] }, aq = this; aq.setData = aj; aq.setupGrid = t; aq.draw = W; aq.getPlaceholder = function() { return av }; aq.getCanvas = function() { return az }; aq.getPlotOffset = function() { return q }; aq.width = function() { return h }; aq.height = function() { return w }; aq.offset = function() { var aB = y.offset(); aB.left += q.left; aB.top += q.top; return aB }; aq.getData = function() { return Q }; aq.getAxes = function() { var aC = {}, aB; c.each(p.concat(aw), function(aD, aE) { if (aE) { aC[aE.direction + (aE.n != 1 ? aE.n : "") + "axis"] = aE } }); return aC }; aq.getXAxes = function() { return p }; aq.getYAxes = function() { return aw }; aq.c2p = C; aq.p2c = ar; aq.getOptions = function() { return O }; aq.highlight = x; aq.unhighlight = T; aq.triggerRedrawOverlay = f; aq.pointOffset = function(aB) { return { left: parseInt(p[aA(aB, "x") - 1].p2c(+aB.x) + q.left), top: parseInt(aw[aA(aB, "y") - 1].p2c(+aB.y) + q.top)} }; aq.shutdown = ag; aq.resize = function() { B(); g(az); g(ad) }; aq.hooks = ak; F(aq); Z(J); X(); aj(ai); t(); W(); ah(); function an(aD, aB) { aB = [aq].concat(aB); for (var aC = 0; aC < aD.length; ++aC) { aD[aC].apply(this, aB) } } function F() { for (var aB = 0; aB < af.length; ++aB) { var aC = af[aB]; aC.init(aq); if (aC.options) { c.extend(true, O, aC.options) } } } function Z(aC) { var aB; c.extend(true, O, aC); if (O.xaxis.color == null) { O.xaxis.color = O.grid.color } if (O.yaxis.color == null) { O.yaxis.color = O.grid.color } if (O.xaxis.tickColor == null) { O.xaxis.tickColor = O.grid.tickColor } if (O.yaxis.tickColor == null) { O.yaxis.tickColor = O.grid.tickColor } if (O.grid.borderColor == null) { O.grid.borderColor = O.grid.color } if (O.grid.tickColor == null) { O.grid.tickColor = c.color.parse(O.grid.color).scale("a", 0.22).toString() } for (aB = 0; aB < Math.max(1, O.xaxes.length); ++aB) { O.xaxes[aB] = c.extend(true, {}, O.xaxis, O.xaxes[aB]) } for (aB = 0; aB < Math.max(1, O.yaxes.length); ++aB) { O.yaxes[aB] = c.extend(true, {}, O.yaxis, O.yaxes[aB]) } if (O.xaxis.noTicks && O.xaxis.ticks == null) { O.xaxis.ticks = O.xaxis.noTicks } if (O.yaxis.noTicks && O.yaxis.ticks == null) { O.yaxis.ticks = O.yaxis.noTicks } if (O.x2axis) { O.xaxes[1] = c.extend(true, {}, O.xaxis, O.x2axis); O.xaxes[1].position = "top" } if (O.y2axis) { O.yaxes[1] = c.extend(true, {}, O.yaxis, O.y2axis); O.yaxes[1].position = "right" } if (O.grid.coloredAreas) { O.grid.markings = O.grid.coloredAreas } if (O.grid.coloredAreasColor) { O.grid.markingsColor = O.grid.coloredAreasColor } if (O.lines) { c.extend(true, O.series.lines, O.lines) } if (O.points) { c.extend(true, O.series.points, O.points) } if (O.bars) { c.extend(true, O.series.bars, O.bars) } if (O.shadowSize != null) { O.series.shadowSize = O.shadowSize } for (aB = 0; aB < O.xaxes.length; ++aB) { V(p, aB + 1).options = O.xaxes[aB] } for (aB = 0; aB < O.yaxes.length; ++aB) { V(aw, aB + 1).options = O.yaxes[aB] } for (var aD in ak) { if (O.hooks[aD] && O.hooks[aD].length) { ak[aD] = ak[aD].concat(O.hooks[aD]) } } an(ak.processOptions, [O]) } function aj(aB) { Q = Y(aB); ax(); z() } function Y(aE) { var aC = []; for (var aB = 0; aB < aE.length; ++aB) { var aD = c.extend(true, {}, O.series); if (aE[aB].data != null) { aD.data = aE[aB].data; delete aE[aB].data; c.extend(true, aD, aE[aB]); aE[aB].data = aD.data } else { aD.data = aE[aB] } aC.push(aD) } return aC } function aA(aC, aD) { var aB = aC[aD + "axis"]; if (typeof aB == "object") { aB = aB.n } if (typeof aB != "number") { aB = 1 } return aB } function m() { return c.grep(p.concat(aw), function(aB) { return aB }) } function C(aE) { var aC = {}, aB, aD; for (aB = 0; aB < p.length; ++aB) { aD = p[aB]; if (aD && aD.used) { aC["x" + aD.n] = aD.c2p(aE.left) } } for (aB = 0; aB < aw.length; ++aB) { aD = aw[aB]; if (aD && aD.used) { aC["y" + aD.n] = aD.c2p(aE.top) } } if (aC.x1 !== undefined) { aC.x = aC.x1 } if (aC.y1 !== undefined) { aC.y = aC.y1 } return aC } function ar(aF) { var aD = {}, aC, aE, aB; for (aC = 0; aC < p.length; ++aC) { aE = p[aC]; if (aE && aE.used) { aB = "x" + aE.n; if (aF[aB] == null && aE.n == 1) { aB = "x" } if (aF[aB] != null) { aD.left = aE.p2c(aF[aB]); break } } } for (aC = 0; aC < aw.length; ++aC) { aE = aw[aC]; if (aE && aE.used) { aB = "y" + aE.n; if (aF[aB] == null && aE.n == 1) { aB = "y" } if (aF[aB] != null) { aD.top = aE.p2c(aF[aB]); break } } } return aD } function V(aC, aB) { if (!aC[aB - 1]) { aC[aB - 1] = { n: aB, direction: aC == p ? "x" : "y", options: c.extend(true, {}, aC == p ? O.xaxis : O.yaxis)} } return aC[aB - 1] } function ax() { var aG; var aM = Q.length, aB = [], aE = []; for (aG = 0; aG < Q.length; ++aG) { var aJ = Q[aG].color; if (aJ != null) { --aM; if (typeof aJ == "number") { aE.push(aJ) } else { aB.push(c.color.parse(Q[aG].color)) } } } for (aG = 0; aG < aE.length; ++aG) { aM = Math.max(aM, aE[aG] + 1) } var aC = [], aF = 0; aG = 0; while (aC.length < aM) { var aI; if (O.colors.length == aG) { aI = c.color.make(100, 100, 100) } else { aI = c.color.parse(O.colors[aG]) } var aD = aF % 2 == 1 ? -1 : 1; aI.scale("rgb", 1 + aD * Math.ceil(aF / 2) * 0.2); aC.push(aI); ++aG; if (aG >= O.colors.length) { aG = 0; ++aF } } var aH = 0, aN; for (aG = 0; aG < Q.length; ++aG) { aN = Q[aG]; if (aN.color == null) { aN.color = aC[aH].toString(); ++aH } else { if (typeof aN.color == "number") { aN.color = aC[aN.color].toString() } } if (aN.lines.show == null) { var aL, aK = true; for (aL in aN) { if (aN[aL] && aN[aL].show) { aK = false; break } } if (aK) { aN.lines.show = true } } aN.xaxis = V(p, aA(aN, "x")); aN.yaxis = V(aw, aA(aN, "y")) } } function z() { var aO = Number.POSITIVE_INFINITY, aI = Number.NEGATIVE_INFINITY, aB = Number.MAX_VALUE, aU, aS, aR, aN, aD, aJ, aT, aP, aH, aG, aC, a0, aX, aL; function aF(a3, a2, a1) { if (a2 < a3.datamin && a2 != -aB) { a3.datamin = a2 } if (a1 > a3.datamax && a1 != aB) { a3.datamax = a1 } } c.each(m(), function(a1, a2) { a2.datamin = aO; a2.datamax = aI; a2.used = false }); for (aU = 0; aU < Q.length; ++aU) { aJ = Q[aU]; aJ.datapoints = { points: [] }; an(ak.processRawData, [aJ, aJ.data, aJ.datapoints]) } for (aU = 0; aU < Q.length; ++aU) { aJ = Q[aU]; var aZ = aJ.data, aW = aJ.datapoints.format; if (!aW) { aW = []; aW.push({ x: true, number: true, required: true }); aW.push({ y: true, number: true, required: true }); if (aJ.bars.show || (aJ.lines.show && aJ.lines.fill)) { aW.push({ y: true, number: true, required: false, defaultValue: 0 }); if (aJ.bars.horizontal) { delete aW[aW.length - 1].y; aW[aW.length - 1].x = true } } aJ.datapoints.format = aW } if (aJ.datapoints.pointsize != null) { continue } aJ.datapoints.pointsize = aW.length; aP = aJ.datapoints.pointsize; aT = aJ.datapoints.points; insertSteps = aJ.lines.show && aJ.lines.steps; aJ.xaxis.used = aJ.yaxis.used = true; for (aS = aR = 0; aS < aZ.length; ++aS, aR += aP) { aL = aZ[aS]; var aE = aL == null; if (!aE) { for (aN = 0; aN < aP; ++aN) { a0 = aL[aN]; aX = aW[aN]; if (aX) { if (aX.number && a0 != null) { a0 = +a0; if (isNaN(a0)) { a0 = null } else { if (a0 == Infinity) { a0 = aB } else { if (a0 == -Infinity) { a0 = -aB } } } } if (a0 == null) { if (aX.required) { aE = true } if (aX.defaultValue != null) { a0 = aX.defaultValue } } } aT[aR + aN] = a0 } } if (aE) { for (aN = 0; aN < aP; ++aN) { a0 = aT[aR + aN]; if (a0 != null) { aX = aW[aN]; if (aX.x) { aF(aJ.xaxis, a0, a0) } if (aX.y) { aF(aJ.yaxis, a0, a0) } } aT[aR + aN] = null } } else { if (insertSteps && aR > 0 && aT[aR - aP] != null && aT[aR - aP] != aT[aR] && aT[aR - aP + 1] != aT[aR + 1]) { for (aN = 0; aN < aP; ++aN) { aT[aR + aP + aN] = aT[aR + aN] } aT[aR + 1] = aT[aR - aP + 1]; aR += aP } } } } for (aU = 0; aU < Q.length; ++aU) { aJ = Q[aU]; an(ak.processDatapoints, [aJ, aJ.datapoints]) } for (aU = 0; aU < Q.length; ++aU) { aJ = Q[aU]; aT = aJ.datapoints.points, aP = aJ.datapoints.pointsize; var aK = aO, aQ = aO, aM = aI, aV = aI; for (aS = 0; aS < aT.length; aS += aP) { if (aT[aS] == null) { continue } for (aN = 0; aN < aP; ++aN) { a0 = aT[aS + aN]; aX = aW[aN]; if (!aX || a0 == aB || a0 == -aB) { continue } if (aX.x) { if (a0 < aK) { aK = a0 } if (a0 > aM) { aM = a0 } } if (aX.y) { if (a0 < aQ) { aQ = a0 } if (a0 > aV) { aV = a0 } } } } if (aJ.bars.show) { var aY = aJ.bars.align == "left" ? 0 : -aJ.bars.barWidth / 2; if (aJ.bars.horizontal) { aQ += aY; aV += aY + aJ.bars.barWidth } else { aK += aY; aM += aY + aJ.bars.barWidth } } aF(aJ.xaxis, aK, aM); aF(aJ.yaxis, aQ, aV) } c.each(m(), function(a1, a2) { if (a2.datamin == aO) { a2.datamin = null } if (a2.datamax == aI) { a2.datamax = null } }) } function j(aB, aC) { var aD = document.createElement("canvas"); aD.className = aC; aD.width = G; aD.height = I; if (!aB) { c(aD).css({ position: "absolute", left: 0, top: 0 }) } c(aD).appendTo(av); if (!aD.getContext) { aD = window.G_vmlCanvasManager.initElement(aD) } aD.getContext("2d").save(); return aD } function B() { G = av.width(); I = av.height(); if (G <= 0 || I <= 0) { throw "Invalid dimensions for plot, width = " + G + ", height = " + I } } function g(aC) { if (aC.width != G) { aC.width = G } if (aC.height != I) { aC.height = I } var aB = aC.getContext("2d"); aB.restore(); aB.save() } function X() { var aC, aB = av.children("canvas.base"), aD = av.children("canvas.overlay"); if (aB.length == 0 || aD == 0) { av.html(""); av.css({ padding: 0 }); if (av.css("position") == "static") { av.css("position", "relative") } B(); az = j(true, "base"); ad = j(false, "overlay"); aC = false } else { az = aB.get(0); ad = aD.get(0); aC = true } H = az.getContext("2d"); A = ad.getContext("2d"); y = c([ad, az]); if (aC) { av.data("plot").shutdown(); aq.resize(); A.clearRect(0, 0, G, I); y.unbind(); av.children().not([az, ad]).remove() } av.data("plot", aq) } function ah() { if (O.grid.hoverable) { y.mousemove(aa); y.mouseleave(l) } if (O.grid.clickable) { y.click(R) } an(ak.bindEvents, [y]) } function ag() { if (M) { clearTimeout(M) } y.unbind("mousemove", aa); y.unbind("mouseleave", l); y.unbind("click", R); an(ak.shutdown, [y]) } function r(aG) { function aC(aH) { return aH } var aF, aB, aD = aG.options.transform || aC, aE = aG.options.inverseTransform; if (aG.direction == "x") { aF = aG.scale = h / Math.abs(aD(aG.max) - aD(aG.min)); aB = Math.min(aD(aG.max), aD(aG.min)) } else { aF = aG.scale = w / Math.abs(aD(aG.max) - aD(aG.min)); aF = -aF; aB = Math.max(aD(aG.max), aD(aG.min)) } if (aD == aC) { aG.p2c = function(aH) { return (aH - aB) * aF } } else { aG.p2c = function(aH) { return (aD(aH) - aB) * aF } } if (!aE) { aG.c2p = function(aH) { return aB + aH / aF } } else { aG.c2p = function(aH) { return aE(aB + aH / aF) } } } function L(aD) { var aB = aD.options, aF, aJ = aD.ticks || [], aI = [], aE, aK = aB.labelWidth, aG = aB.labelHeight, aC; function aH(aM, aL) { return c('<div style="position:absolute;top:-10000px;' + aL + 'font-size:smaller"><div class="' + aD.direction + "Axis " + aD.direction + aD.n + 'Axis">' + aM.join("") + "</div></div>").appendTo(av) } if (aD.direction == "x") { if (aK == null) { aK = Math.floor(G / (aJ.length > 0 ? aJ.length : 1)) } if (aG == null) { aI = []; for (aF = 0; aF < aJ.length; ++aF) { aE = aJ[aF].label; if (aE) { aI.push('<div class="tickLabel" style="float:left;width:' + aK + 'px">' + aE + "</div>") } } if (aI.length > 0) { aI.push('<div style="clear:left"></div>'); aC = aH(aI, "width:10000px;"); aG = aC.height(); aC.remove() } } } else { if (aK == null || aG == null) { for (aF = 0; aF < aJ.length; ++aF) { aE = aJ[aF].label; if (aE) { aI.push('<div class="tickLabel">' + aE + "</div>") } } if (aI.length > 0) { aC = aH(aI, ""); if (aK == null) { aK = aC.children().width() } if (aG == null) { aG = aC.find("div.tickLabel").height() } aC.remove() } } } if (aK == null) { aK = 0 } if (aG == null) { aG = 0 } aD.labelWidth = aK; aD.labelHeight = aG } function au(aD) { var aC = aD.labelWidth, aL = aD.labelHeight, aH = aD.options.position, aF = aD.options.tickLength, aG = O.grid.axisMargin, aJ = O.grid.labelMargin, aK = aD.direction == "x" ? p : aw, aE; var aB = c.grep(aK, function(aN) { return aN && aN.options.position == aH && aN.reserveSpace }); if (c.inArray(aD, aB) == aB.length - 1) { aG = 0 } if (aF == null) { aF = "full" } var aI = c.grep(aK, function(aN) { return aN && aN.reserveSpace }); var aM = c.inArray(aD, aI) == 0; if (!aM && aF == "full") { aF = 5 } if (!isNaN(+aF)) { aJ += +aF } if (aD.direction == "x") { aL += aJ; if (aH == "bottom") { q.bottom += aL + aG; aD.box = { top: I - q.bottom, height: aL} } else { aD.box = { top: q.top + aG, height: aL }; q.top += aL + aG } } else { aC += aJ; if (aH == "left") { aD.box = { left: q.left + aG, width: aC }; q.left += aC + aG } else { q.right += aC + aG; aD.box = { left: G - q.right, width: aC} } } aD.position = aH; aD.tickLength = aF; aD.box.padding = aJ; aD.innermost = aM } function U(aB) { if (aB.direction == "x") { aB.box.left = q.left; aB.box.width = h } else { aB.box.top = q.top; aB.box.height = w } } function t() { var aC, aE = m(); c.each(aE, function(aF, aG) { aG.show = aG.options.show; if (aG.show == null) { aG.show = aG.used } aG.reserveSpace = aG.show || aG.options.reserveSpace; n(aG) }); allocatedAxes = c.grep(aE, function(aF) { return aF.reserveSpace }); q.left = q.right = q.top = q.bottom = 0; if (O.grid.show) { c.each(allocatedAxes, function(aF, aG) { S(aG); P(aG); ap(aG, aG.ticks); L(aG) }); for (aC = allocatedAxes.length - 1; aC >= 0; --aC) { au(allocatedAxes[aC]) } var aD = O.grid.minBorderMargin; if (aD == null) { aD = 0; for (aC = 0; aC < Q.length; ++aC) { aD = Math.max(aD, Q[aC].points.radius + Q[aC].points.lineWidth / 2) } } for (var aB in q) { q[aB] += O.grid.borderWidth; q[aB] = Math.max(aD, q[aB]) } } h = G - q.left - q.right; w = I - q.bottom - q.top; c.each(aE, function(aF, aG) { r(aG) }); if (O.grid.show) { c.each(allocatedAxes, function(aF, aG) { U(aG) }); k() } o() } function n(aE) { var aF = aE.options, aD = +(aF.min != null ? aF.min : aE.datamin), aB = +(aF.max != null ? aF.max : aE.datamax), aH = aB - aD; if (aH == 0) { var aC = aB == 0 ? 1 : 0.01; if (aF.min == null) { aD -= aC } if (aF.max == null || aF.min != null) { aB += aC } } else { var aG = aF.autoscaleMargin; if (aG != null) { if (aF.min == null) { aD -= aH * aG; if (aD < 0 && aE.datamin != null && aE.datamin >= 0) { aD = 0 } } if (aF.max == null) { aB += aH * aG; if (aB > 0 && aE.datamax != null && aE.datamax <= 0) { aB = 0 } } } } aE.min = aD; aE.max = aB } function S(aG) { var aM = aG.options; var aH; if (typeof aM.ticks == "number" && aM.ticks > 0) { aH = aM.ticks } else { aH = 0.3 * Math.sqrt(aG.direction == "x" ? G : I) } var aT = (aG.max - aG.min) / aH, aO, aB, aN, aR, aS, aQ, aI; if (aM.mode == "time") { var aJ = { second: 1000, minute: 60 * 1000, hour: 60 * 60 * 1000, day: 24 * 60 * 60 * 1000, month: 30 * 24 * 60 * 60 * 1000, year: 365.2425 * 24 * 60 * 60 * 1000 }; var aK = [[1, "second"], [2, "second"], [5, "second"], [10, "second"], [30, "second"], [1, "minute"], [2, "minute"], [5, "minute"], [10, "minute"], [30, "minute"], [1, "hour"], [2, "hour"], [4, "hour"], [8, "hour"], [12, "hour"], [1, "day"], [2, "day"], [3, "day"], [0.25, "month"], [0.5, "month"], [1, "month"], [2, "month"], [3, "month"], [6, "month"], [1, "year"]]; var aC = 0; if (aM.minTickSize != null) { if (typeof aM.tickSize == "number") { aC = aM.tickSize } else { aC = aM.minTickSize[0] * aJ[aM.minTickSize[1]] } } for (var aS = 0; aS < aK.length - 1; ++aS) { if (aT < (aK[aS][0] * aJ[aK[aS][1]] + aK[aS + 1][0] * aJ[aK[aS + 1][1]]) / 2 && aK[aS][0] * aJ[aK[aS][1]] >= aC) { break } } aO = aK[aS][0]; aN = aK[aS][1]; if (aN == "year") { aQ = Math.pow(10, Math.floor(Math.log(aT / aJ.year) / Math.LN10)); aI = (aT / aJ.year) / aQ; if (aI < 1.5) { aO = 1 } else { if (aI < 3) { aO = 2 } else { if (aI < 7.5) { aO = 5 } else { aO = 10 } } } aO *= aQ } aG.tickSize = aM.tickSize || [aO, aN]; aB = function(aX) { var a2 = [], a0 = aX.tickSize[0], a3 = aX.tickSize[1], a1 = new Date(aX.min); var aW = a0 * aJ[a3]; if (a3 == "second") { a1.setUTCSeconds(a(a1.getUTCSeconds(), a0)) } if (a3 == "minute") { a1.setUTCMinutes(a(a1.getUTCMinutes(), a0)) } if (a3 == "hour") { a1.setUTCHours(a(a1.getUTCHours(), a0)) } if (a3 == "month") { a1.setUTCMonth(a(a1.getUTCMonth(), a0)) } if (a3 == "year") { a1.setUTCFullYear(a(a1.getUTCFullYear(), a0)) } a1.setUTCMilliseconds(0); if (aW >= aJ.minute) { a1.setUTCSeconds(0) } if (aW >= aJ.hour) { a1.setUTCMinutes(0) } if (aW >= aJ.day) { a1.setUTCHours(0) } if (aW >= aJ.day * 4) { a1.setUTCDate(1) } if (aW >= aJ.year) { a1.setUTCMonth(0) } var a5 = 0, a4 = Number.NaN, aY; do { aY = a4; a4 = a1.getTime(); a2.push(a4); if (a3 == "month") { if (a0 < 1) { a1.setUTCDate(1); var aV = a1.getTime(); a1.setUTCMonth(a1.getUTCMonth() + 1); var aZ = a1.getTime(); a1.setTime(a4 + a5 * aJ.hour + (aZ - aV) * a0); a5 = a1.getUTCHours(); a1.setUTCHours(0) } else { a1.setUTCMonth(a1.getUTCMonth() + a0) } } else { if (a3 == "year") { a1.setUTCFullYear(a1.getUTCFullYear() + a0) } else { a1.setTime(a4 + aW) } } } while (a4 < aX.max && a4 != aY); return a2 }; aR = function(aV, aY) { var a0 = new Date(aV); if (aM.timeformat != null) { return c.plot.formatDate(a0, aM.timeformat, aM.monthNames) } var aW = aY.tickSize[0] * aJ[aY.tickSize[1]]; var aX = aY.max - aY.min; var aZ = (aM.twelveHourClock) ? " %p" : ""; if (aW < aJ.minute) { fmt = "%h:%M:%S" + aZ } else { if (aW < aJ.day) { if (aX < 2 * aJ.day) { fmt = "%h:%M" + aZ } else { fmt = "%b %d %h:%M" + aZ } } else { if (aW < aJ.month) { fmt = "%b %d" } else { if (aW < aJ.year) { if (aX < aJ.year) { fmt = "%b" } else { fmt = "%b %y" } } else { fmt = "%y" } } } } return c.plot.formatDate(a0, fmt, aM.monthNames) } } else { var aU = aM.tickDecimals; var aP = -Math.floor(Math.log(aT) / Math.LN10); if (aU != null && aP > aU) { aP = aU } aQ = Math.pow(10, -aP); aI = aT / aQ; if (aI < 1.5) { aO = 1 } else { if (aI < 3) { aO = 2; if (aI > 2.25 && (aU == null || aP + 1 <= aU)) { aO = 2.5; ++aP } } else { if (aI < 7.5) { aO = 5 } else { aO = 10 } } } aO *= aQ; if (aM.minTickSize != null && aO < aM.minTickSize) { aO = aM.minTickSize } aG.tickDecimals = Math.max(0, aU != null ? aU : aP); aG.tickSize = aM.tickSize || aO; aB = function(aX) { var aZ = []; var a0 = a(aX.min, aX.tickSize), aW = 0, aV = Number.NaN, aY; do { aY = aV; aV = a0 + aW * aX.tickSize; aZ.push(aV); ++aW } while (aV < aX.max && aV != aY); return aZ }; aR = function(aV, aW) { return aV.toFixed(aW.tickDecimals) } } if (aM.alignTicksWithAxis != null) { var aF = (aG.direction == "x" ? p : aw)[aM.alignTicksWithAxis - 1]; if (aF && aF.used && aF != aG) { var aL = aB(aG); if (aL.length > 0) { if (aM.min == null) { aG.min = Math.min(aG.min, aL[0]) } if (aM.max == null && aL.length > 1) { aG.max = Math.max(aG.max, aL[aL.length - 1]) } } aB = function(aX) { var aY = [], aV, aW; for (aW = 0; aW < aF.ticks.length; ++aW) { aV = (aF.ticks[aW].v - aF.min) / (aF.max - aF.min); aV = aX.min + aV * (aX.max - aX.min); aY.push(aV) } return aY }; if (aG.mode != "time" && aM.tickDecimals == null) { var aE = Math.max(0, -Math.floor(Math.log(aT) / Math.LN10) + 1), aD = aB(aG); if (!(aD.length > 1 && /\..*0$/.test((aD[1] - aD[0]).toFixed(aE)))) { aG.tickDecimals = aE } } } } aG.tickGenerator = aB; if (c.isFunction(aM.tickFormatter)) { aG.tickFormatter = function(aV, aW) { return "" + aM.tickFormatter(aV, aW) } } else { aG.tickFormatter = aR } } function P(aF) { var aH = aF.options.ticks, aG = []; if (aH == null || (typeof aH == "number" && aH > 0)) { aG = aF.tickGenerator(aF) } else { if (aH) { if (c.isFunction(aH)) { aG = aH({ min: aF.min, max: aF.max }) } else { aG = aH } } } var aE, aB; aF.ticks = []; for (aE = 0; aE < aG.length; ++aE) { var aC = null; var aD = aG[aE]; if (typeof aD == "object") { aB = +aD[0]; if (aD.length > 1) { aC = aD[1] } } else { aB = +aD } if (aC == null) { aC = aF.tickFormatter(aB, aF) } if (!isNaN(aB)) { aF.ticks.push({ v: aB, label: aC }) } } } function ap(aB, aC) { if (aB.options.autoscaleMargin && aC.length > 0) { if (aB.options.min == null) { aB.min = Math.min(aB.min, aC[0].v) } if (aB.options.max == null && aC.length > 1) { aB.max = Math.max(aB.max, aC[aC.length - 1].v) } } } function W() { H.clearRect(0, 0, G, I); var aC = O.grid; if (aC.show && aC.backgroundColor) { N() } if (aC.show && !aC.aboveData) { ac() } for (var aB = 0; aB < Q.length; ++aB) { an(ak.drawSeries, [H, Q[aB]]); d(Q[aB]) } an(ak.draw, [H]); if (aC.show && aC.aboveData) { ac() } } function D(aB, aI) { var aE, aH, aG, aD, aF = m(); for (i = 0; i < aF.length; ++i) { aE = aF[i]; if (aE.direction == aI) { aD = aI + aE.n + "axis"; if (!aB[aD] && aE.n == 1) { aD = aI + "axis" } if (aB[aD]) { aH = aB[aD].from; aG = aB[aD].to; break } } } if (!aB[aD]) { aE = aI == "x" ? p[0] : aw[0]; aH = aB[aI + "1"]; aG = aB[aI + "2"] } if (aH != null && aG != null && aH > aG) { var aC = aH; aH = aG; aG = aC } return { from: aH, to: aG, axis: aE} } function N() { H.save(); H.translate(q.left, q.top); H.fillStyle = am(O.grid.backgroundColor, w, 0, "rgba(255, 255, 255, 0)"); H.fillRect(0, 0, h, w); H.restore() } function ac() { var aF; H.save(); H.translate(q.left, q.top); var aH = O.grid.markings; if (aH) { if (c.isFunction(aH)) { var aK = aq.getAxes(); aK.xmin = aK.xaxis.min; aK.xmax = aK.xaxis.max; aK.ymin = aK.yaxis.min; aK.ymax = aK.yaxis.max; aH = aH(aK) } for (aF = 0; aF < aH.length; ++aF) { var aD = aH[aF], aC = D(aD, "x"), aI = D(aD, "y"); if (aC.from == null) { aC.from = aC.axis.min } if (aC.to == null) { aC.to = aC.axis.max } if (aI.from == null) { aI.from = aI.axis.min } if (aI.to == null) { aI.to = aI.axis.max } if (aC.to < aC.axis.min || aC.from > aC.axis.max || aI.to < aI.axis.min || aI.from > aI.axis.max) { continue } aC.from = Math.max(aC.from, aC.axis.min); aC.to = Math.min(aC.to, aC.axis.max); aI.from = Math.max(aI.from, aI.axis.min); aI.to = Math.min(aI.to, aI.axis.max); if (aC.from == aC.to && aI.from == aI.to) { continue } aC.from = aC.axis.p2c(aC.from); aC.to = aC.axis.p2c(aC.to); aI.from = aI.axis.p2c(aI.from); aI.to = aI.axis.p2c(aI.to); if (aC.from == aC.to || aI.from == aI.to) { H.beginPath(); H.strokeStyle = aD.color || O.grid.markingsColor; H.lineWidth = aD.lineWidth || O.grid.markingsLineWidth; H.moveTo(aC.from, aI.from); H.lineTo(aC.to, aI.to); H.stroke() } else { H.fillStyle = aD.color || O.grid.markingsColor; H.fillRect(aC.from, aI.to, aC.to - aC.from, aI.from - aI.to) } } } var aK = m(), aM = O.grid.borderWidth; for (var aE = 0; aE < aK.length; ++aE) { var aB = aK[aE], aG = aB.box, aQ = aB.tickLength, aN, aL, aP, aJ; if (!aB.show || aB.ticks.length == 0) { continue } H.strokeStyle = aB.options.tickColor || c.color.parse(aB.options.color).scale("a", 0.22).toString(); H.lineWidth = 1; if (aB.direction == "x") { aN = 0; if (aQ == "full") { aL = (aB.position == "top" ? 0 : w) } else { aL = aG.top - q.top + (aB.position == "top" ? aG.height : 0) } } else { aL = 0; if (aQ == "full") { aN = (aB.position == "left" ? 0 : h) } else { aN = aG.left - q.left + (aB.position == "left" ? aG.width : 0) } } if (!aB.innermost) { H.beginPath(); aP = aJ = 0; if (aB.direction == "x") { aP = h } else { aJ = w } if (H.lineWidth == 1) { aN = Math.floor(aN) + 0.5; aL = Math.floor(aL) + 0.5 } H.moveTo(aN, aL); H.lineTo(aN + aP, aL + aJ); H.stroke() } H.beginPath(); for (aF = 0; aF < aB.ticks.length; ++aF) { var aO = aB.ticks[aF].v; aP = aJ = 0; if (aO < aB.min || aO > aB.max || (aQ == "full" && aM > 0 && (aO == aB.min || aO == aB.max))) { continue } if (aB.direction == "x") { aN = aB.p2c(aO); aJ = aQ == "full" ? -w : aQ; if (aB.position == "top") { aJ = -aJ } } else { aL = aB.p2c(aO); aP = aQ == "full" ? -h : aQ; if (aB.position == "left") { aP = -aP } } if (H.lineWidth == 1) { if (aB.direction == "x") { aN = Math.floor(aN) + 0.5 } else { aL = Math.floor(aL) + 0.5 } } H.moveTo(aN, aL); H.lineTo(aN + aP, aL + aJ) } H.stroke() } if (aM) { H.lineWidth = aM; H.strokeStyle = O.grid.borderColor; H.strokeRect(-aM / 2, -aM / 2, h + aM, w + aM) } H.restore() } function k() { av.find(".tickLabels").remove(); var aG = ['<div class="tickLabels" style="font-size:smaller">']; var aJ = m(); for (var aD = 0; aD < aJ.length; ++aD) { var aC = aJ[aD], aF = aC.box; if (!aC.show) { continue } aG.push('<div class="' + aC.direction + "Axis " + aC.direction + aC.n + 'Axis" style="color:' + aC.options.color + '">'); for (var aE = 0; aE < aC.ticks.length; ++aE) { var aH = aC.ticks[aE]; if (!aH.label || aH.v < aC.min || aH.v > aC.max) { continue } var aK = {}, aI; if (aC.direction == "x") { aI = "center"; aK.left = Math.round(q.left + aC.p2c(aH.v) - aC.labelWidth / 2); if (aC.position == "bottom") { aK.top = aF.top + aF.padding } else { aK.bottom = I - (aF.top + aF.height - aF.padding) } } else { aK.top = Math.round(q.top + aC.p2c(aH.v) - aC.labelHeight / 2); if (aC.position == "left") { aK.right = G - (aF.left + aF.width - aF.padding); aI = "right" } else { aK.left = aF.left + aF.padding; aI = "left" } } aK.width = aC.labelWidth; var aB = ["position:absolute", "text-align:" + aI]; for (var aL in aK) { aB.push(aL + ":" + aK[aL] + "px") } aG.push('<div class="tickLabel" style="' + aB.join(";") + '">' + aH.label + "</div>") } aG.push("</div>") } aG.push("</div>"); av.append(aG.join("")) } function d(aB) { if (aB.lines.show) { at(aB) } if (aB.bars.show) { e(aB) } if (aB.points.show) { ao(aB) } } function at(aE) { function aD(aP, aQ, aI, aU, aT) { var aV = aP.points, aJ = aP.pointsize, aN = null, aM = null; H.beginPath(); for (var aO = aJ; aO < aV.length; aO += aJ) { var aL = aV[aO - aJ], aS = aV[aO - aJ + 1], aK = aV[aO], aR = aV[aO + 1]; if (aL == null || aK == null) { continue } if (aS <= aR && aS < aT.min) { if (aR < aT.min) { continue } aL = (aT.min - aS) / (aR - aS) * (aK - aL) + aL; aS = aT.min } else { if (aR <= aS && aR < aT.min) { if (aS < aT.min) { continue } aK = (aT.min - aS) / (aR - aS) * (aK - aL) + aL; aR = aT.min } } if (aS >= aR && aS > aT.max) { if (aR > aT.max) { continue } aL = (aT.max - aS) / (aR - aS) * (aK - aL) + aL; aS = aT.max } else { if (aR >= aS && aR > aT.max) { if (aS > aT.max) { continue } aK = (aT.max - aS) / (aR - aS) * (aK - aL) + aL; aR = aT.max } } if (aL <= aK && aL < aU.min) { if (aK < aU.min) { continue } aS = (aU.min - aL) / (aK - aL) * (aR - aS) + aS; aL = aU.min } else { if (aK <= aL && aK < aU.min) { if (aL < aU.min) { continue } aR = (aU.min - aL) / (aK - aL) * (aR - aS) + aS; aK = aU.min } } if (aL >= aK && aL > aU.max) { if (aK > aU.max) { continue } aS = (aU.max - aL) / (aK - aL) * (aR - aS) + aS; aL = aU.max } else { if (aK >= aL && aK > aU.max) { if (aL > aU.max) { continue } aR = (aU.max - aL) / (aK - aL) * (aR - aS) + aS; aK = aU.max } } if (aL != aN || aS != aM) { H.moveTo(aU.p2c(aL) + aQ, aT.p2c(aS) + aI) } aN = aK; aM = aR; H.lineTo(aU.p2c(aK) + aQ, aT.p2c(aR) + aI) } H.stroke() } function aF(aI, aQ, aP) { var aW = aI.points, aV = aI.pointsize, aN = Math.min(Math.max(0, aP.min), aP.max), aX = 0, aU, aT = false, aM = 1, aL = 0, aR = 0; while (true) { if (aV > 0 && aX > aW.length + aV) { break } aX += aV; var aZ = aW[aX - aV], aK = aW[aX - aV + aM], aY = aW[aX], aJ = aW[aX + aM]; if (aT) { if (aV > 0 && aZ != null && aY == null) { aR = aX; aV = -aV; aM = 2; continue } if (aV < 0 && aX == aL + aV) { H.fill(); aT = false; aV = -aV; aM = 1; aX = aL = aR + aV; continue } } if (aZ == null || aY == null) { continue } if (aZ <= aY && aZ < aQ.min) { if (aY < aQ.min) { continue } aK = (aQ.min - aZ) / (aY - aZ) * (aJ - aK) + aK; aZ = aQ.min } else { if (aY <= aZ && aY < aQ.min) { if (aZ < aQ.min) { continue } aJ = (aQ.min - aZ) / (aY - aZ) * (aJ - aK) + aK; aY = aQ.min } } if (aZ >= aY && aZ > aQ.max) { if (aY > aQ.max) { continue } aK = (aQ.max - aZ) / (aY - aZ) * (aJ - aK) + aK; aZ = aQ.max } else { if (aY >= aZ && aY > aQ.max) { if (aZ > aQ.max) { continue } aJ = (aQ.max - aZ) / (aY - aZ) * (aJ - aK) + aK; aY = aQ.max } } if (!aT) { H.beginPath(); H.moveTo(aQ.p2c(aZ), aP.p2c(aN)); aT = true } if (aK >= aP.max && aJ >= aP.max) { H.lineTo(aQ.p2c(aZ), aP.p2c(aP.max)); H.lineTo(aQ.p2c(aY), aP.p2c(aP.max)); continue } else { if (aK <= aP.min && aJ <= aP.min) { H.lineTo(aQ.p2c(aZ), aP.p2c(aP.min)); H.lineTo(aQ.p2c(aY), aP.p2c(aP.min)); continue } } var aO = aZ, aS = aY; if (aK <= aJ && aK < aP.min && aJ >= aP.min) { aZ = (aP.min - aK) / (aJ - aK) * (aY - aZ) + aZ; aK = aP.min } else { if (aJ <= aK && aJ < aP.min && aK >= aP.min) { aY = (aP.min - aK) / (aJ - aK) * (aY - aZ) + aZ; aJ = aP.min } } if (aK >= aJ && aK > aP.max && aJ <= aP.max) { aZ = (aP.max - aK) / (aJ - aK) * (aY - aZ) + aZ; aK = aP.max } else { if (aJ >= aK && aJ > aP.max && aK <= aP.max) { aY = (aP.max - aK) / (aJ - aK) * (aY - aZ) + aZ; aJ = aP.max } } if (aZ != aO) { H.lineTo(aQ.p2c(aO), aP.p2c(aK)) } H.lineTo(aQ.p2c(aZ), aP.p2c(aK)); H.lineTo(aQ.p2c(aY), aP.p2c(aJ)); if (aY != aS) { H.lineTo(aQ.p2c(aY), aP.p2c(aJ)); H.lineTo(aQ.p2c(aS), aP.p2c(aJ)) } } } H.save(); H.translate(q.left, q.top); H.lineJoin = "round"; var aG = aE.lines.lineWidth, aB = aE.shadowSize; if (aG > 0 && aB > 0) { H.lineWidth = aB; H.strokeStyle = "rgba(0,0,0,0.1)"; var aH = Math.PI / 18; aD(aE.datapoints, Math.sin(aH) * (aG / 2 + aB / 2), Math.cos(aH) * (aG / 2 + aB / 2), aE.xaxis, aE.yaxis); H.lineWidth = aB / 2; aD(aE.datapoints, Math.sin(aH) * (aG / 2 + aB / 4), Math.cos(aH) * (aG / 2 + aB / 4), aE.xaxis, aE.yaxis) } H.lineWidth = aG; H.strokeStyle = aE.color; var aC = ae(aE.lines, aE.color, 0, w); if (aC) { H.fillStyle = aC; aF(aE.datapoints, aE.xaxis, aE.yaxis) } if (aG > 0) { aD(aE.datapoints, 0, 0, aE.xaxis, aE.yaxis) } H.restore() } function ao(aE) { function aH(aN, aM, aU, aK, aS, aT, aQ, aJ) { var aR = aN.points, aI = aN.pointsize; for (var aL = 0; aL < aR.length; aL += aI) { var aP = aR[aL], aO = aR[aL + 1]; if (aP == null || aP < aT.min || aP > aT.max || aO < aQ.min || aO > aQ.max) { continue } H.beginPath(); aP = aT.p2c(aP); aO = aQ.p2c(aO) + aK; if (aJ == "circle") { H.arc(aP, aO, aM, 0, aS ? Math.PI : Math.PI * 2, false) } else { aJ(H, aP, aO, aM, aS) } H.closePath(); if (aU) { H.fillStyle = aU; H.fill() } H.stroke() } } H.save(); H.translate(q.left, q.top); var aG = aE.points.lineWidth, aC = aE.shadowSize, aB = aE.points.radius, aF = aE.points.symbol; if (aG > 0 && aC > 0) { var aD = aC / 2; H.lineWidth = aD; H.strokeStyle = "rgba(0,0,0,0.1)"; aH(aE.datapoints, aB, null, aD + aD / 2, true, aE.xaxis, aE.yaxis, aF); H.strokeStyle = "rgba(0,0,0,0.2)"; aH(aE.datapoints, aB, null, aD / 2, true, aE.xaxis, aE.yaxis, aF) } H.lineWidth = aG; H.strokeStyle = aE.color; aH(aE.datapoints, aB, ae(aE.points, aE.color), 0, false, aE.xaxis, aE.yaxis, aF); H.restore() } function E(aN, aM, aV, aI, aQ, aF, aD, aL, aK, aU, aR, aC) { var aE, aT, aJ, aP, aG, aB, aO, aH, aS; if (aR) { aH = aB = aO = true; aG = false; aE = aV; aT = aN; aP = aM + aI; aJ = aM + aQ; if (aT < aE) { aS = aT; aT = aE; aE = aS; aG = true; aB = false } } else { aG = aB = aO = true; aH = false; aE = aN + aI; aT = aN + aQ; aJ = aV; aP = aM; if (aP < aJ) { aS = aP; aP = aJ; aJ = aS; aH = true; aO = false } } if (aT < aL.min || aE > aL.max || aP < aK.min || aJ > aK.max) { return } if (aE < aL.min) { aE = aL.min; aG = false } if (aT > aL.max) { aT = aL.max; aB = false } if (aJ < aK.min) { aJ = aK.min; aH = false } if (aP > aK.max) { aP = aK.max; aO = false } aE = aL.p2c(aE); aJ = aK.p2c(aJ); aT = aL.p2c(aT); aP = aK.p2c(aP); if (aD) { aU.beginPath(); aU.moveTo(aE, aJ); aU.lineTo(aE, aP); aU.lineTo(aT, aP); aU.lineTo(aT, aJ); aU.fillStyle = aD(aJ, aP); aU.fill() } if (aC > 0 && (aG || aB || aO || aH)) { aU.beginPath(); aU.moveTo(aE, aJ + aF); if (aG) { aU.lineTo(aE, aP + aF) } else { aU.moveTo(aE, aP + aF) } if (aO) { aU.lineTo(aT, aP + aF) } else { aU.moveTo(aT, aP + aF) } if (aB) { aU.lineTo(aT, aJ + aF) } else { aU.moveTo(aT, aJ + aF) } if (aH) { aU.lineTo(aE, aJ + aF) } else { aU.moveTo(aE, aJ + aF) } aU.stroke() } } function e(aD) { function aC(aJ, aI, aL, aG, aK, aN, aM) { var aO = aJ.points, aF = aJ.pointsize; for (var aH = 0; aH < aO.length; aH += aF) { if (aO[aH] == null) { continue } E(aO[aH], aO[aH + 1], aO[aH + 2], aI, aL, aG, aK, aN, aM, H, aD.bars.horizontal, aD.bars.lineWidth) } } H.save(); H.translate(q.left, q.top); H.lineWidth = aD.bars.lineWidth; H.strokeStyle = aD.color; var aB = aD.bars.align == "left" ? 0 : -aD.bars.barWidth / 2; var aE = aD.bars.fill ? function(aF, aG) { return ae(aD.bars, aD.color, aF, aG) } : null; aC(aD.datapoints, aB, aB + aD.bars.barWidth, 0, aE, aD.xaxis, aD.yaxis); H.restore() } function ae(aD, aB, aC, aF) { var aE = aD.fill; if (!aE) { return null } if (aD.fillColor) { return am(aD.fillColor, aC, aF, aB) } var aG = c.color.parse(aB); aG.a = typeof aE == "number" ? aE : 0.4; aG.normalize(); return aG.toString() } function o() { av.find(".legend").remove(); if (!O.legend.show) { return } var aH = [], aF = false, aN = O.legend.labelFormatter, aM, aJ; for (var aE = 0; aE < Q.length; ++aE) { aM = Q[aE]; aJ = aM.label; if (!aJ) { continue } if (aE % O.legend.noColumns == 0) { if (aF) { aH.push("</tr>") } aH.push("<tr>"); aF = true } if (aN) { aJ = aN(aJ, aM) } aH.push('<td class="legendColorBox"><div style="border:1px solid ' + O.legend.labelBoxBorderColor + ';padding:1px"><div style="width:4px;height:0;border:5px solid ' + aM.color + ';overflow:hidden"></div></div></td><td class="legendLabel">' + aJ + "</td>") } if (aF) { aH.push("</tr>") } if (aH.length == 0) { return } var aL = '<table style="font-size:smaller;color:' + O.grid.color + '">' + aH.join("") + "</table>"; if (O.legend.container != null) { c(O.legend.container).html(aL) } else { var aI = "", aC = O.legend.position, aD = O.legend.margin; if (aD[0] == null) { aD = [aD, aD] } if (aC.charAt(0) == "n") { aI += "top:" + (aD[1] + q.top) + "px;" } else { if (aC.charAt(0) == "s") { aI += "bottom:" + (aD[1] + q.bottom) + "px;" } } if (aC.charAt(1) == "e") { aI += "right:" + (aD[0] + q.right) + "px;" } else { if (aC.charAt(1) == "w") { aI += "left:" + (aD[0] + q.left) + "px;" } } var aK = c('<div class="legend">' + aL.replace('style="', 'style="position:absolute;' + aI + ";") + "</div>").appendTo(av); if (O.legend.backgroundOpacity != 0) { var aG = O.legend.backgroundColor; if (aG == null) { aG = O.grid.backgroundColor; if (aG && typeof aG == "string") { aG = c.color.parse(aG) } else { aG = c.color.extract(aK, "background-color") } aG.a = 1; aG = aG.toString() } var aB = aK.children(); c('<div style="position:absolute;width:' + aB.width() + "px;height:" + aB.height() + "px;" + aI + "background-color:" + aG + ';"> </div>').prependTo(aK).css("opacity", O.legend.backgroundOpacity) } } } var ab = [], M = null; function K(aI, aG, aD) { var aO = O.grid.mouseActiveRadius, a0 = aO * aO + 1, aY = null, aR = false, aW, aU; for (aW = Q.length - 1; aW >= 0; --aW) { if (!aD(Q[aW])) { continue } var aP = Q[aW], aH = aP.xaxis, aF = aP.yaxis, aV = aP.datapoints.points, aT = aP.datapoints.pointsize, aQ = aH.c2p(aI), aN = aF.c2p(aG), aC = aO / aH.scale, aB = aO / aF.scale; if (aH.options.inverseTransform) { aC = Number.MAX_VALUE } if (aF.options.inverseTransform) { aB = Number.MAX_VALUE } if (aP.lines.show || aP.points.show) { for (aU = 0; aU < aV.length; aU += aT) { var aK = aV[aU], aJ = aV[aU + 1]; if (aK == null) { continue } if (aK - aQ > aC || aK - aQ < -aC || aJ - aN > aB || aJ - aN < -aB) { continue } var aM = Math.abs(aH.p2c(aK) - aI), aL = Math.abs(aF.p2c(aJ) - aG), aS = aM * aM + aL * aL; if (aS < a0) { a0 = aS; aY = [aW, aU / aT] } } } if (aP.bars.show && !aY) { var aE = aP.bars.align == "left" ? 0 : -aP.bars.barWidth / 2, aX = aE + aP.bars.barWidth; for (aU = 0; aU < aV.length; aU += aT) { var aK = aV[aU], aJ = aV[aU + 1], aZ = aV[aU + 2]; if (aK == null) { continue } if (Q[aW].bars.horizontal ? (aQ <= Math.max(aZ, aK) && aQ >= Math.min(aZ, aK) && aN >= aJ + aE && aN <= aJ + aX) : (aQ >= aK + aE && aQ <= aK + aX && aN >= Math.min(aZ, aJ) && aN <= Math.max(aZ, aJ))) { aY = [aW, aU / aT] } } } } if (aY) { aW = aY[0]; aU = aY[1]; aT = Q[aW].datapoints.pointsize; return { datapoint: Q[aW].datapoints.points.slice(aU * aT, (aU + 1) * aT), dataIndex: aU, series: Q[aW], seriesIndex: aW} } return null } function aa(aB) { if (O.grid.hoverable) { u("plothover", aB, function(aC) { return aC.hoverable != false }) } } function l(aB) { if (O.grid.hoverable) { u("plothover", aB, function(aC) { return false }) } } function R(aB) { u("plotclick", aB, function(aC) { return aC.clickable != false }) } function u(aC, aB, aD) { var aE = y.offset(), aH = aB.pageX - aE.left - q.left, aF = aB.pageY - aE.top - q.top, aJ = C({ left: aH, top: aF }); aJ.pageX = aB.pageX; aJ.pageY = aB.pageY; var aK = K(aH, aF, aD); if (aK) { aK.pageX = parseInt(aK.series.xaxis.p2c(aK.datapoint[0]) + aE.left + q.left); aK.pageY = parseInt(aK.series.yaxis.p2c(aK.datapoint[1]) + aE.top + q.top) } if (O.grid.autoHighlight) { for (var aG = 0; aG < ab.length; ++aG) { var aI = ab[aG]; if (aI.auto == aC && !(aK && aI.series == aK.series && aI.point[0] == aK.datapoint[0] && aI.point[1] == aK.datapoint[1])) { T(aI.series, aI.point) } } if (aK) { x(aK.series, aK.datapoint, aC) } } av.trigger(aC, [aJ, aK]) } function f() { if (!M) { M = setTimeout(s, 30) } } function s() { M = null; A.save(); A.clearRect(0, 0, G, I); A.translate(q.left, q.top); var aC, aB; for (aC = 0; aC < ab.length; ++aC) { aB = ab[aC]; if (aB.series.bars.show) { v(aB.series, aB.point) } else { ay(aB.series, aB.point) } } A.restore(); an(ak.drawOverlay, [A]) } function x(aD, aB, aF) { if (typeof aD == "number") { aD = Q[aD] } if (typeof aB == "number") { var aE = aD.datapoints.pointsize; aB = aD.datapoints.points.slice(aE * aB, aE * (aB + 1)) } var aC = al(aD, aB); if (aC == -1) { ab.push({ series: aD, point: aB, auto: aF }); f() } else { if (!aF) { ab[aC].auto = false } } } function T(aD, aB) { if (aD == null && aB == null) { ab = []; f() } if (typeof aD == "number") { aD = Q[aD] } if (typeof aB == "number") { aB = aD.data[aB] } var aC = al(aD, aB); if (aC != -1) { ab.splice(aC, 1); f() } } function al(aD, aE) { for (var aB = 0; aB < ab.length; ++aB) { var aC = ab[aB]; if (aC.series == aD && aC.point[0] == aE[0] && aC.point[1] == aE[1]) { return aB } } return -1 } function ay(aE, aD) { var aC = aD[0], aI = aD[1], aH = aE.xaxis, aG = aE.yaxis; if (aC < aH.min || aC > aH.max || aI < aG.min || aI > aG.max) { return } var aF = aE.points.radius + aE.points.lineWidth / 2; A.lineWidth = aF; A.strokeStyle = c.color.parse(aE.color).scale("a", 0.5).toString(); var aB = 1.5 * aF, aC = aH.p2c(aC), aI = aG.p2c(aI); A.beginPath(); if (aE.points.symbol == "circle") { A.arc(aC, aI, aB, 0, 2 * Math.PI, false) } else { aE.points.symbol(A, aC, aI, aB, false) } A.closePath(); A.stroke() } function v(aE, aB) { A.lineWidth = aE.bars.lineWidth; A.strokeStyle = c.color.parse(aE.color).scale("a", 0.5).toString(); var aD = c.color.parse(aE.color).scale("a", 0.5).toString(); var aC = aE.bars.align == "left" ? 0 : -aE.bars.barWidth / 2; E(aB[0], aB[1], aB[2] || 0, aC, aC + aE.bars.barWidth, 0, function() { return aD }, aE.xaxis, aE.yaxis, A, aE.bars.horizontal, aE.bars.lineWidth) } function am(aJ, aB, aH, aC) { if (typeof aJ == "string") { return aJ } else { var aI = H.createLinearGradient(0, aH, 0, aB); for (var aE = 0, aD = aJ.colors.length; aE < aD; ++aE) { var aF = aJ.colors[aE]; if (typeof aF != "string") { var aG = c.color.parse(aC); if (aF.brightness != null) { aG = aG.scale("rgb", aF.brightness) } if (aF.opacity != null) { aG.a *= aF.opacity } aF = aG.toString() } aI.addColorStop(aE / (aD - 1), aF) } return aI } } } c.plot = function(g, e, d) { var f = new b(c(g), e, d, c.plot.plugins); return f }; c.plot.version = "0.7"; c.plot.plugins = []; c.plot.formatDate = function(l, f, h) { var o = function(d) { d = "" + d; return d.length == 1 ? "0" + d : d }; var e = []; var p = false, j = false; var n = l.getUTCHours(); var k = n < 12; if (h == null) { h = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] } if (f.search(/%p|%P/) != -1) { if (n > 12) { n = n - 12 } else { if (n == 0) { n = 12 } } } for (var g = 0; g < f.length; ++g) { var m = f.charAt(g); if (p) { switch (m) { case "h": m = "" + n; break; case "H": m = o(n); break; case "M": m = o(l.getUTCMinutes()); break; case "S": m = o(l.getUTCSeconds()); break; case "d": m = "" + l.getUTCDate(); break; case "m": m = "" + (l.getUTCMonth() + 1); break; case "y": m = "" + l.getUTCFullYear(); break; case "b": m = "" + h[l.getUTCMonth()]; break; case "p": m = (k) ? ("am") : ("pm"); break; case "P": m = (k) ? ("AM") : ("PM"); break; case "0": m = ""; j = true; break } if (m && j) { m = o(m); j = false } e.push(m); if (!j) { p = false } } else { if (m == "%") { p = true } else { e.push(m) } } } return e.join("") }; function a(e, d) { return d * Math.floor(e / d) } })(jQuery);
