Skip to content

Instantly share code, notes, and snippets.

@eglassman
Forked from hkim00/basic.html
Created January 18, 2021 21:20
Show Gist options
  • Save eglassman/61a3648b1e3b8455ce30aff3adb5b5f4 to your computer and use it in GitHub Desktop.
Save eglassman/61a3648b1e3b8455ce30aff3adb5b5f4 to your computer and use it in GitHub Desktop.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Basic Example</title>
<script src="../traviz-min.js"></script>
<link rel="stylesheet" type="text/css" href="../../traviz.css">
</link>
</head>
<body>
<div id="containerDiv"></div>
<div id="containerDiv2"></div>
<script type="text/javascript">
var traviz = new TRAViz("containerDiv", {
lineBreaks: true,
normalize: true,
curveRadius: 2,
fontSizeMin: 15,
edgeGap: 10,
editDistance: 0.1,
vertexBackground: false
});
// Psalm 51:5
traviz.align([{
edition: "JUB",
text: "Judge rejects GOP bid to toss 127,000 drive-thru ballots in Harris County, Texas"
}, {
edition: "ASV",
text: "Federal judge rejects GOP challenge to invalidate nearly 127,000 votes in Democratic-leaning Houston"
}, {
edition: "BBE",
text: "Federal court to hear Republican bid to toss 127,000 ballots in Texas"
}, {
edition: "CEB",
text: "Federal judge allows Texas’s Harris County to count ballots cast via drive-through voting"
}]);
traviz.visualize();
// Psalm 51:6
var traviz2 = new TRAViz("containerDiv2", {
lineBreaks: true,
normalize: true,
curveRadius: 2,
fontSizeMin: 15,
edgeGap: 10,
editDistance: 0.1,
vertexBackground: false
});
traviz2.align([{
edition: "JUB",
text: "Behold, thou dost desire truth in the inward parts, and in the secret things thou hast made me to know wisdom."
}, {
edition: "ASV",
text: "Behold, thou desirest truth in the inward parts; And in the hidden part thou wilt make me to know wisdom."
}, {
edition: "BBE",
text: "Your desire is for what is true in the inner parts: in the secrets of my soul you will give me knowledge of wisdom."
}, {
edition: "CEB",
text: "And yes, you want truth in the most hidden places; you teach me wisdom in the most secret space."
}, {
edition: "NCV",
text: "You want me to be completely truthful, so teach me wisdom."
}]);
traviz2.visualize();
</script>
</body>
</html>
/* jQuery v1.7.2 jquery.com | jquery.org/license */
(function(a, b) {
function cy(a) { return f.isWindow(a) ? a : a.nodeType === 9 ? a.defaultView || a.parentWindow : !1 }
function cu(a) {
if (!cj[a]) {
var b = c.body,
d = f("<" + a + ">").appendTo(b),
e = d.css("display");
d.remove();
if (e === "none" || e === "") { ck || (ck = c.createElement("iframe"), ck.frameBorder = ck.width = ck.height = 0), b.appendChild(ck); if (!cl || !ck.createElement) { cl = (ck.contentWindow || ck.contentDocument).document, cl.write((f.support.boxModel ? "<!doctype html>" : "") + "<html><body>"), cl.close() } d = cl.createElement(a), cl.body.appendChild(d), e = f.css(d, "display"), b.removeChild(ck) } cj[a] = e
}
return cj[a]
}
function ct(a, b) {
var c = {};
f.each(cp.concat.apply([], cp.slice(0, b)), function() { c[this] = a });
return c
}
function cs() { cq = b }
function cr() { setTimeout(cs, 0); return cq = f.now() }
function ci() { try { return new a.ActiveXObject("Microsoft.XMLHTTP") } catch (b) {} }
function ch() { try { return new a.XMLHttpRequest } catch (b) {} }
function cb(a, c) {
a.dataFilter && (c = a.dataFilter(c, a.dataType));
var d = a.dataTypes,
e = {},
g, h, i = d.length,
j, k = d[0],
l, m, n, o, p;
for (g = 1; g < i; g++) { if (g === 1) { for (h in a.converters) { typeof h == "string" && (e[h.toLowerCase()] = a.converters[h]) } } l = k, k = d[g]; if (k === "*") { k = l } else { if (l !== "*" && l !== k) { m = l + " " + k, n = e[m] || e["* " + k]; if (!n) { p = b; for (o in e) { j = o.split(" "); if (j[0] === l || j[0] === "*") { p = e[j[1] + " " + k]; if (p) { o = e[o], o === !0 ? n = p : p === !0 && (n = o); break } } } }!n && !p && f.error("No conversion from " + m.replace(" ", " to ")), n !== !0 && (c = n ? n(c) : p(o(c))) } } }
return c
}
function ca(a, c, d) {
var e = a.contents,
f = a.dataTypes,
g = a.responseFields,
h, i, j, k;
for (i in g) { i in d && (c[g[i]] = d[i]) }
while (f[0] === "*") { f.shift(), h === b && (h = a.mimeType || c.getResponseHeader("content-type")) }
if (h) { for (i in e) { if (e[i] && e[i].test(h)) { f.unshift(i); break } } }
if (f[0] in d) { j = f[0] } else { for (i in d) { if (!f[0] || a.converters[i + " " + f[0]]) { j = i; break } k || (k = i) } j = j || k }
if (j) { j !== f[0] && f.unshift(j); return d[j] }
}
function b_(a, b, c, d) { if (f.isArray(b)) { f.each(b, function(b, e) { c || bD.test(a) ? d(a, e) : b_(a + "[" + (typeof e == "object" ? b : "") + "]", e, c, d) }) } else { if (!c && f.type(b) === "object") { for (var e in b) { b_(a + "[" + e + "]", b[e], c, d) } } else { d(a, b) } } }
function b$(a, c) { var d, e, g = f.ajaxSettings.flatOptions || {}; for (d in c) { c[d] !== b && ((g[d] ? a : e || (e = {}))[d] = c[d]) } e && f.extend(!0, a, e) }
function bZ(a, c, d, e, f, g) {
f = f || c.dataTypes[0], g = g || {}, g[f] = !0;
var h = a[f],
i = 0,
j = h ? h.length : 0,
k = a === bS,
l;
for (; i < j && (k || !l); i++) { l = h[i](c, d, e), typeof l == "string" && (!k || g[l] ? l = b : (c.dataTypes.unshift(l), l = bZ(a, c, d, e, l, g))) }(k || !l) && !g["*"] && (l = bZ(a, c, d, e, "*", g));
return l
}
function bY(a) {
return function(b, c) {
typeof b != "string" && (c = b, b = "*");
if (f.isFunction(c)) {
var d = b.toLowerCase().split(bO),
e = 0,
g = d.length,
h, i, j;
for (; e < g; e++) { h = d[e], j = /^\+/.test(h), j && (h = h.substr(1) || "*"), i = a[h] = a[h] || [], i[j ? "unshift" : "push"](c) }
}
}
}
function bB(a, b, c) {
var d = b === "width" ? a.offsetWidth : a.offsetHeight,
e = b === "width" ? 1 : 0,
g = 4;
if (d > 0) { if (c !== "border") { for (; e < g; e += 2) { c || (d -= parseFloat(f.css(a, "padding" + bx[e])) || 0), c === "margin" ? d += parseFloat(f.css(a, c + bx[e])) || 0 : d -= parseFloat(f.css(a, "border" + bx[e] + "Width")) || 0 } } return d + "px" } d = by(a, b);
if (d < 0 || d == null) { d = a.style[b] }
if (bt.test(d)) { return d } d = parseFloat(d) || 0;
if (c) { for (; e < g; e += 2) { d += parseFloat(f.css(a, "padding" + bx[e])) || 0, c !== "padding" && (d += parseFloat(f.css(a, "border" + bx[e] + "Width")) || 0), c === "margin" && (d += parseFloat(f.css(a, c + bx[e])) || 0) } }
return d + "px"
}
function bo(a) {
var b = c.createElement("div");
bh.appendChild(b), b.innerHTML = a.outerHTML;
return b.firstChild
}
function bn(a) {
var b = (a.nodeName || "").toLowerCase();
b === "input" ? bm(a) : b !== "script" && typeof a.getElementsByTagName != "undefined" && f.grep(a.getElementsByTagName("input"), bm)
}
function bm(a) { if (a.type === "checkbox" || a.type === "radio") { a.defaultChecked = a.checked } }
function bl(a) { return typeof a.getElementsByTagName != "undefined" ? a.getElementsByTagName("*") : typeof a.querySelectorAll != "undefined" ? a.querySelectorAll("*") : [] }
function bk(a, b) {
var c;
b.nodeType === 1 && (b.clearAttributes && b.clearAttributes(), b.mergeAttributes && b.mergeAttributes(a), c = b.nodeName.toLowerCase(), c === "object" ? b.outerHTML = a.outerHTML : c !== "input" || a.type !== "checkbox" && a.type !== "radio" ? c === "option" ? b.selected = a.defaultSelected : c === "input" || c === "textarea" ? b.defaultValue = a.defaultValue : c === "script" && b.text !== a.text && (b.text = a.text) : (a.checked && (b.defaultChecked = b.checked = a.checked), b.value !== a.value && (b.value = a.value)), b.removeAttribute(f.expando), b.removeAttribute("_submit_attached"), b.removeAttribute("_change_attached"))
}
function bj(a, b) {
if (b.nodeType === 1 && !!f.hasData(a)) {
var c, d, e, g = f._data(a),
h = f._data(b, g),
i = g.events;
if (i) { delete h.handle, h.events = {}; for (c in i) { for (d = 0, e = i[c].length; d < e; d++) { f.event.add(b, c, i[c][d]) } } } h.data && (h.data = f.extend({}, h.data))
}
}
function bi(a, b) { return f.nodeName(a, "table") ? a.getElementsByTagName("tbody")[0] || a.appendChild(a.ownerDocument.createElement("tbody")) : a }
function U(a) {
var b = V.split("|"),
c = a.createDocumentFragment();
if (c.createElement) { while (b.length) { c.createElement(b.pop()) } }
return c
}
function T(a, b, c) { b = b || 0; if (f.isFunction(b)) { return f.grep(a, function(a, d) { var e = !!b.call(a, d, a); return e === c }) } if (b.nodeType) { return f.grep(a, function(a, d) { return a === b === c }) } if (typeof b == "string") { var d = f.grep(a, function(a) { return a.nodeType === 1 }); if (O.test(b)) { return f.filter(b, d, !c) } b = f.filter(b, d) } return f.grep(a, function(a, d) { return f.inArray(a, b) >= 0 === c }) }
function S(a) { return !a || !a.parentNode || a.parentNode.nodeType === 11 }
function K() { return !0 }
function J() { return !1 }
function n(a, b, c) {
var d = b + "defer",
e = b + "queue",
g = b + "mark",
h = f._data(a, d);
h && (c === "queue" || !f._data(a, e)) && (c === "mark" || !f._data(a, g)) && setTimeout(function() {!f._data(a, e) && !f._data(a, g) && (f.removeData(a, d, !0), h.fire()) }, 0)
}
function m(a) { for (var b in a) { if (b === "data" && f.isEmptyObject(a[b])) { continue } if (b !== "toJSON") { return !1 } } return !0 }
function l(a, c, d) {
if (d === b && a.nodeType === 1) {
var e = "data-" + c.replace(k, "-$1").toLowerCase();
d = a.getAttribute(e);
if (typeof d == "string") { try { d = d === "true" ? !0 : d === "false" ? !1 : d === "null" ? null : f.isNumeric(d) ? +d : j.test(d) ? f.parseJSON(d) : d } catch (g) {} f.data(a, c, d) } else { d = b }
}
return d
}
function h(a) {
var b = g[a] = {},
c, d;
a = a.split(/\s+/);
for (c = 0, d = a.length; c < d; c++) { b[a[c]] = !0 }
return b
}
var c = a.document,
d = a.navigator,
e = a.location,
f = function() {
function J() { if (!e.isReady) { try { c.documentElement.doScroll("left") } catch (a) { setTimeout(J, 1); return } e.ready() } }
var e = function(a, b) { return new e.fn.init(a, b, h) },
f = a.jQuery,
g = a.$,
h, i = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
j = /\S/,
k = /^\s+/,
l = /\s+$/,
m = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
n = /^[\],:{}\s]*$/,
o = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
p = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
q = /(?:^|:|,)(?:\s*\[)+/g,
r = /(webkit)[ \/]([\w.]+)/,
s = /(opera)(?:.*version)?[ \/]([\w.]+)/,
t = /(msie) ([\w.]+)/,
u = /(mozilla)(?:.*? rv:([\w.]+))?/,
v = /-([a-z]|[0-9])/ig,
w = /^-ms-/,
x = function(a, b) { return (b + "").toUpperCase() },
y = d.userAgent,
z, A, B, C = Object.prototype.toString,
D = Object.prototype.hasOwnProperty,
E = Array.prototype.push,
F = Array.prototype.slice,
G = String.prototype.trim,
H = Array.prototype.indexOf,
I = {};
e.fn = e.prototype = {
constructor: e,
init: function(a, d, f) { var g, h, j, k; if (!a) { return this } if (a.nodeType) { this.context = this[0] = a, this.length = 1; return this } if (a === "body" && !d && c.body) { this.context = c, this[0] = c.body, this.selector = a, this.length = 1; return this } if (typeof a == "string") { a.charAt(0) !== "<" || a.charAt(a.length - 1) !== ">" || a.length < 3 ? g = i.exec(a) : g = [null, a, null]; if (g && (g[1] || !d)) { if (g[1]) { d = d instanceof e ? d[0] : d, k = d ? d.ownerDocument || d : c, j = m.exec(a), j ? e.isPlainObject(d) ? (a = [c.createElement(j[1])], e.fn.attr.call(a, d, !0)) : a = [k.createElement(j[1])] : (j = e.buildFragment([g[1]], [k]), a = (j.cacheable ? e.clone(j.fragment) : j.fragment).childNodes); return e.merge(this, a) } h = c.getElementById(g[2]); if (h && h.parentNode) { if (h.id !== g[2]) { return f.find(a) } this.length = 1, this[0] = h } this.context = c, this.selector = a; return this } return !d || d.jquery ? (d || f).find(a) : this.constructor(d).find(a) } if (e.isFunction(a)) { return f.ready(a) } a.selector !== b && (this.selector = a.selector, this.context = a.context); return e.makeArray(a, this) },
selector: "",
jquery: "1.7.2",
length: 0,
size: function() { return this.length },
toArray: function() { return F.call(this, 0) },
get: function(a) { return a == null ? this.toArray() : a < 0 ? this[this.length + a] : this[a] },
pushStack: function(a, b, c) {
var d = this.constructor();
e.isArray(a) ? E.apply(d, a) : e.merge(d, a), d.prevObject = this, d.context = this.context, b === "find" ? d.selector = this.selector + (this.selector ? " " : "") + c : b && (d.selector = this.selector + "." + b + "(" + c + ")");
return d
},
each: function(a, b) { return e.each(this, a, b) },
ready: function(a) { e.bindReady(), A.add(a); return this },
eq: function(a) { a = +a; return a === -1 ? this.slice(a) : this.slice(a, a + 1) },
first: function() { return this.eq(0) },
last: function() { return this.eq(-1) },
slice: function() { return this.pushStack(F.apply(this, arguments), "slice", F.call(arguments).join(",")) },
map: function(a) { return this.pushStack(e.map(this, function(b, c) { return a.call(b, c, b) })) },
end: function() { return this.prevObject || this.constructor(null) },
push: E,
sort: [].sort,
splice: [].splice
}, e.fn.init.prototype = e.fn, e.extend = e.fn.extend = function() {
var a, c, d, f, g, h, i = arguments[0] || {},
j = 1,
k = arguments.length,
l = !1;
typeof i == "boolean" && (l = i, i = arguments[1] || {}, j = 2), typeof i != "object" && !e.isFunction(i) && (i = {}), k === j && (i = this, --j);
for (; j < k; j++) { if ((a = arguments[j]) != null) { for (c in a) { d = i[c], f = a[c]; if (i === f) { continue } l && f && (e.isPlainObject(f) || (g = e.isArray(f))) ? (g ? (g = !1, h = d && e.isArray(d) ? d : []) : h = d && e.isPlainObject(d) ? d : {}, i[c] = e.extend(l, h, f)) : f !== b && (i[c] = f) } } }
return i
}, e.extend({
noConflict: function(b) { a.$ === e && (a.$ = g), b && a.jQuery === e && (a.jQuery = f); return e },
isReady: !1,
readyWait: 1,
holdReady: function(a) { a ? e.readyWait++ : e.ready(!0) },
ready: function(a) { if (a === !0 && !--e.readyWait || a !== !0 && !e.isReady) { if (!c.body) { return setTimeout(e.ready, 1) } e.isReady = !0; if (a !== !0 && --e.readyWait > 0) { return } A.fireWith(c, [e]), e.fn.trigger && e(c).trigger("ready").off("ready") } },
bindReady: function() { if (!A) { A = e.Callbacks("once memory"); if (c.readyState === "complete") { return setTimeout(e.ready, 1) } if (c.addEventListener) { c.addEventListener("DOMContentLoaded", B, !1), a.addEventListener("load", e.ready, !1) } else { if (c.attachEvent) { c.attachEvent("onreadystatechange", B), a.attachEvent("onload", e.ready); var b = !1; try { b = a.frameElement == null } catch (d) {} c.documentElement.doScroll && b && J() } } } },
isFunction: function(a) { return e.type(a) === "function" },
isArray: Array.isArray || function(a) { return e.type(a) === "array" },
isWindow: function(a) { return a != null && a == a.window },
isNumeric: function(a) { return !isNaN(parseFloat(a)) && isFinite(a) },
type: function(a) { return a == null ? String(a) : I[C.call(a)] || "object" },
isPlainObject: function(a) { if (!a || e.type(a) !== "object" || a.nodeType || e.isWindow(a)) { return !1 } try { if (a.constructor && !D.call(a, "constructor") && !D.call(a.constructor.prototype, "isPrototypeOf")) { return !1 } } catch (c) { return !1 } var d; for (d in a) {} return d === b || D.call(a, d) },
isEmptyObject: function(a) { for (var b in a) { return !1 } return !0 },
error: function(a) { throw new Error(a) },
parseJSON: function(b) { if (typeof b != "string" || !b) { return null } b = e.trim(b); if (a.JSON && a.JSON.parse) { return a.JSON.parse(b) } if (n.test(b.replace(o, "@").replace(p, "]").replace(q, ""))) { return (new Function("return " + b))() } e.error("Invalid JSON: " + b) },
parseXML: function(c) { if (typeof c != "string" || !c) { return null } var d, f; try { a.DOMParser ? (f = new DOMParser, d = f.parseFromString(c, "text/xml")) : (d = new ActiveXObject("Microsoft.XMLDOM"), d.async = "false", d.loadXML(c)) } catch (g) { d = b }(!d || !d.documentElement || d.getElementsByTagName("parsererror").length) && e.error("Invalid XML: " + c); return d },
noop: function() {},
globalEval: function(b) { b && j.test(b) && (a.execScript || function(b) { a.eval.call(a, b) })(b) },
camelCase: function(a) { return a.replace(w, "ms-").replace(v, x) },
nodeName: function(a, b) { return a.nodeName && a.nodeName.toUpperCase() === b.toUpperCase() },
each: function(a, c, d) {
var f, g = 0,
h = a.length,
i = h === b || e.isFunction(a);
if (d) { if (i) { for (f in a) { if (c.apply(a[f], d) === !1) { break } } } else { for (; g < h;) { if (c.apply(a[g++], d) === !1) { break } } } } else { if (i) { for (f in a) { if (c.call(a[f], f, a[f]) === !1) { break } } } else { for (; g < h;) { if (c.call(a[g], g, a[g++]) === !1) { break } } } }
return a
},
trim: G ? function(a) { return a == null ? "" : G.call(a) } : function(a) { return a == null ? "" : (a + "").replace(k, "").replace(l, "") },
makeArray: function(a, b) {
var c = b || [];
if (a != null) {
var d = e.type(a);
a.length == null || d === "string" || d === "function" || d === "regexp" || e.isWindow(a) ? E.call(c, a) : e.merge(c, a)
}
return c
},
inArray: function(a, b, c) { var d; if (b) { if (H) { return H.call(b, a, c) } d = b.length, c = c ? c < 0 ? Math.max(0, d + c) : c : 0; for (; c < d; c++) { if (c in b && b[c] === a) { return c } } } return -1 },
merge: function(a, c) {
var d = a.length,
e = 0;
if (typeof c.length == "number") { for (var f = c.length; e < f; e++) { a[d++] = c[e] } } else { while (c[e] !== b) { a[d++] = c[e++] } } a.length = d;
return a
},
grep: function(a, b, c) {
var d = [],
e;
c = !!c;
for (var f = 0, g = a.length; f < g; f++) { e = !!b(a[f], f), c !== e && d.push(a[f]) }
return d
},
map: function(a, c, d) {
var f, g, h = [],
i = 0,
j = a.length,
k = a instanceof e || j !== b && typeof j == "number" && (j > 0 && a[0] && a[j - 1] || j === 0 || e.isArray(a));
if (k) { for (; i < j; i++) { f = c(a[i], i, d), f != null && (h[h.length] = f) } } else { for (g in a) { f = c(a[g], g, d), f != null && (h[h.length] = f) } }
return h.concat.apply([], h)
},
guid: 1,
proxy: function(a, c) {
if (typeof c == "string") {
var d = a[c];
c = a, a = d
}
if (!e.isFunction(a)) { return b }
var f = F.call(arguments, 2),
g = function() { return a.apply(c, f.concat(F.call(arguments))) };
g.guid = a.guid = a.guid || g.guid || e.guid++;
return g
},
access: function(a, c, d, f, g, h, i) {
var j, k = d == null,
l = 0,
m = a.length;
if (d && typeof d == "object") { for (l in d) { e.access(a, c, l, d[l], 1, h, f) } g = 1 } else { if (f !== b) { j = i === b && e.isFunction(f), k && (j ? (j = c, c = function(a, b, c) { return j.call(e(a), c) }) : (c.call(a, f), c = null)); if (c) { for (; l < m; l++) { c(a[l], d, j ? f.call(a[l], l, c(a[l], d)) : f, i) } } g = 1 } }
return g ? a : k ? c.call(a) : m ? c(a[0], d) : h
},
now: function() { return (new Date).getTime() },
uaMatch: function(a) { a = a.toLowerCase(); var b = r.exec(a) || s.exec(a) || t.exec(a) || a.indexOf("compatible") < 0 && u.exec(a) || []; return { browser: b[1] || "", version: b[2] || "0" } },
sub: function() {
function a(b, c) { return new a.fn.init(b, c) } e.extend(!0, a, this), a.superclass = this, a.fn = a.prototype = this(), a.fn.constructor = a, a.sub = this.sub, a.fn.init = function(d, f) { f && f instanceof e && !(f instanceof a) && (f = a(f)); return e.fn.init.call(this, d, f, b) }, a.fn.init.prototype = a.fn;
var b = a(c);
return a
},
browser: {}
}), e.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(a, b) { I["[object " + b + "]"] = b.toLowerCase() }), z = e.uaMatch(y), z.browser && (e.browser[z.browser] = !0, e.browser.version = z.version), e.browser.webkit && (e.browser.safari = !0), j.test(" ") && (k = /^[\s\xA0]+/, l = /[\s\xA0]+$/), h = e(c), c.addEventListener ? B = function() { c.removeEventListener("DOMContentLoaded", B, !1), e.ready() } : c.attachEvent && (B = function() { c.readyState === "complete" && (c.detachEvent("onreadystatechange", B), e.ready()) });
return e
}(),
g = {};
f.Callbacks = function(a) {
a = a ? g[a] || h(a) : {};
var c = [],
d = [],
e, i, j, k, l, m, n = function(b) { var d, e, g, h, i; for (d = 0, e = b.length; d < e; d++) { g = b[d], h = f.type(g), h === "array" ? n(g) : h === "function" && (!a.unique || !p.has(g)) && c.push(g) } },
o = function(b, f) { f = f || [], e = !a.memory || [b, f], i = !0, j = !0, m = k || 0, k = 0, l = c.length; for (; c && m < l; m++) { if (c[m].apply(b, f) === !1 && a.stopOnFalse) { e = !0; break } } j = !1, c && (a.once ? e === !0 ? p.disable() : c = [] : d && d.length && (e = d.shift(), p.fireWith(e[0], e[1]))) },
p = {
add: function() {
if (c) {
var a = c.length;
n(arguments), j ? l = c.length : e && e !== !0 && (k = a, o(e[0], e[1]))
}
return this
},
remove: function() {
if (c) {
var b = arguments,
d = 0,
e = b.length;
for (; d < e; d++) { for (var f = 0; f < c.length; f++) { if (b[d] === c[f]) { j && f <= l && (l--, f <= m && m--), c.splice(f--, 1); if (a.unique) { break } } } }
}
return this
},
has: function(a) {
if (c) {
var b = 0,
d = c.length;
for (; b < d; b++) { if (a === c[b]) { return !0 } }
}
return !1
},
empty: function() { c = []; return this },
disable: function() { c = d = e = b; return this },
disabled: function() { return !c },
lock: function() { d = b, (!e || e === !0) && p.disable(); return this },
locked: function() { return !d },
fireWith: function(b, c) { d && (j ? a.once || d.push([b, c]) : (!a.once || !e) && o(b, c)); return this },
fire: function() { p.fireWith(this, arguments); return this },
fired: function() { return !!i }
};
return p
};
var i = [].slice;
f.extend({
Deferred: function(a) {
var b = f.Callbacks("once memory"),
c = f.Callbacks("once memory"),
d = f.Callbacks("memory"),
e = "pending",
g = { resolve: b, reject: c, notify: d },
h = {
done: b.add,
fail: c.add,
progress: d.add,
state: function() { return e },
isResolved: b.fired,
isRejected: c.fired,
then: function(a, b, c) { i.done(a).fail(b).progress(c); return this },
always: function() { i.done.apply(i, arguments).fail.apply(i, arguments); return this },
pipe: function(a, b, c) {
return f.Deferred(function(d) {
f.each({ done: [a, "resolve"], fail: [b, "reject"], progress: [c, "notify"] }, function(a, b) {
var c = b[0],
e = b[1],
g;
f.isFunction(c) ? i[a](function() { g = c.apply(this, arguments), g && f.isFunction(g.promise) ? g.promise().then(d.resolve, d.reject, d.notify) : d[e + "With"](this === i ? d : this, [g]) }) : i[a](d[e])
})
}).promise()
},
promise: function(a) { if (a == null) { a = h } else { for (var b in h) { a[b] = h[b] } } return a }
},
i = h.promise({}),
j;
for (j in g) { i[j] = g[j].fire, i[j + "With"] = g[j].fireWith } i.done(function() { e = "resolved" }, c.disable, d.lock).fail(function() { e = "rejected" }, b.disable, d.lock), a && a.call(i, i);
return i
},
when: function(a) {
function m(a) { return function(b) { e[a] = arguments.length > 1 ? i.call(arguments, 0) : b, j.notifyWith(k, e) } }
function l(a) { return function(c) { b[a] = arguments.length > 1 ? i.call(arguments, 0) : c, --g || j.resolveWith(j, b) } }
var b = i.call(arguments, 0),
c = 0,
d = b.length,
e = Array(d),
g = d,
h = d,
j = d <= 1 && a && f.isFunction(a.promise) ? a : f.Deferred(),
k = j.promise();
if (d > 1) { for (; c < d; c++) { b[c] && b[c].promise && f.isFunction(b[c].promise) ? b[c].promise().then(l(c), j.reject, m(c)) : --g } g || j.resolveWith(j, b) } else { j !== a && j.resolveWith(j, d ? [a] : []) }
return k
}
}), f.support = function() {
var b, d, e, g, h, i, j, k, l, m, n, o, p = c.createElement("div"),
q = c.documentElement;
p.setAttribute("className", "t"), p.innerHTML = " <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>", d = p.getElementsByTagName("*"), e = p.getElementsByTagName("a")[0];
if (!d || !d.length || !e) { return {} } g = c.createElement("select"), h = g.appendChild(c.createElement("option")), i = p.getElementsByTagName("input")[0], b = { leadingWhitespace: p.firstChild.nodeType === 3, tbody: !p.getElementsByTagName("tbody").length, htmlSerialize: !!p.getElementsByTagName("link").length, style: /top/.test(e.getAttribute("style")), hrefNormalized: e.getAttribute("href") === "/a", opacity: /^0.55/.test(e.style.opacity), cssFloat: !!e.style.cssFloat, checkOn: i.value === "on", optSelected: h.selected, getSetAttribute: p.className !== "t", enctype: !!c.createElement("form").enctype, html5Clone: c.createElement("nav").cloneNode(!0).outerHTML !== "<:nav></:nav>", submitBubbles: !0, changeBubbles: !0, focusinBubbles: !1, deleteExpando: !0, noCloneEvent: !0, inlineBlockNeedsLayout: !1, shrinkWrapBlocks: !1, reliableMarginRight: !0, pixelMargin: !0 }, f.boxModel = b.boxModel = c.compatMode === "CSS1Compat", i.checked = !0, b.noCloneChecked = i.cloneNode(!0).checked, g.disabled = !0, b.optDisabled = !h.disabled;
try { delete p.test } catch (r) { b.deleteExpando = !1 }!p.addEventListener && p.attachEvent && p.fireEvent && (p.attachEvent("onclick", function() { b.noCloneEvent = !1 }), p.cloneNode(!0).fireEvent("onclick")), i = c.createElement("input"), i.value = "t", i.setAttribute("type", "radio"), b.radioValue = i.value === "t", i.setAttribute("checked", "checked"), i.setAttribute("name", "t"), p.appendChild(i), j = c.createDocumentFragment(), j.appendChild(p.lastChild), b.checkClone = j.cloneNode(!0).cloneNode(!0).lastChild.checked, b.appendChecked = i.checked, j.removeChild(i), j.appendChild(p);
if (p.attachEvent) { for (n in { submit: 1, change: 1, focusin: 1 }) { m = "on" + n, o = m in p, o || (p.setAttribute(m, "return;"), o = typeof p[m] == "function"), b[n + "Bubbles"] = o } } j.removeChild(p), j = g = h = p = i = null, f(function() { var d, e, g, h, i, j, l, m, n, q, r, s, t, u = c.getElementsByTagName("body")[0];!u || (m = 1, t = "padding:0;margin:0;border:", r = "position:absolute;top:0;left:0;width:1px;height:1px;", s = t + "0;visibility:hidden;", n = "style='" + r + t + "5px solid #000;", q = "<div " + n + "display:block;'><div style='" + t + "0;display:block;overflow:hidden;'></div></div><table " + n + "' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>", d = c.createElement("div"), d.style.cssText = s + "width:0;height:0;position:static;top:0;margin-top:" + m + "px", u.insertBefore(d, u.firstChild), p = c.createElement("div"), d.appendChild(p), p.innerHTML = "<table><tr><td style='" + t + "0;display:none'></td><td>t</td></tr></table>", k = p.getElementsByTagName("td"), o = k[0].offsetHeight === 0, k[0].style.display = "", k[1].style.display = "none", b.reliableHiddenOffsets = o && k[0].offsetHeight === 0, a.getComputedStyle && (p.innerHTML = "", l = c.createElement("div"), l.style.width = "0", l.style.marginRight = "0", p.style.width = "2px", p.appendChild(l), b.reliableMarginRight = (parseInt((a.getComputedStyle(l, null) || { marginRight: 0 }).marginRight, 10) || 0) === 0), typeof p.style.zoom != "undefined" && (p.innerHTML = "", p.style.width = p.style.padding = "1px", p.style.border = 0, p.style.overflow = "hidden", p.style.display = "inline", p.style.zoom = 1, b.inlineBlockNeedsLayout = p.offsetWidth === 3, p.style.display = "block", p.style.overflow = "visible", p.innerHTML = "<div style='width:5px;'></div>", b.shrinkWrapBlocks = p.offsetWidth !== 3), p.style.cssText = r + s, p.innerHTML = q, e = p.firstChild, g = e.firstChild, i = e.nextSibling.firstChild.firstChild, j = { doesNotAddBorder: g.offsetTop !== 5, doesAddBorderForTableAndCells: i.offsetTop === 5 }, g.style.position = "fixed", g.style.top = "20px", j.fixedPosition = g.offsetTop === 20 || g.offsetTop === 15, g.style.position = g.style.top = "", e.style.overflow = "hidden", e.style.position = "relative", j.subtractsBorderForOverflowNotVisible = g.offsetTop === -5, j.doesNotIncludeMarginInBodyOffset = u.offsetTop !== m, a.getComputedStyle && (p.style.marginTop = "1%", b.pixelMargin = (a.getComputedStyle(p, null) || { marginTop: 0 }).marginTop !== "1%"), typeof d.style.zoom != "undefined" && (d.style.zoom = 1), u.removeChild(d), l = p = d = null, f.extend(b, j)) });
return b
}();
var j = /^(?:\{.*\}|\[.*\])$/,
k = /([A-Z])/g;
f.extend({
cache: {},
uuid: 0,
expando: "jQuery" + (f.fn.jquery + Math.random()).replace(/\D/g, ""),
noData: { embed: !0, object: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", applet: !0 },
hasData: function(a) { a = a.nodeType ? f.cache[a[f.expando]] : a[f.expando]; return !!a && !m(a) },
data: function(a, c, d, e) {
if (!!f.acceptData(a)) {
var g, h, i, j = f.expando,
k = typeof c == "string",
l = a.nodeType,
m = l ? f.cache : a,
n = l ? a[j] : a[j] && j,
o = c === "events";
if ((!n || !m[n] || !o && !e && !m[n].data) && k && d === b) { return } n || (l ? a[j] = n = ++f.uuid : n = j), m[n] || (m[n] = {}, l || (m[n].toJSON = f.noop));
if (typeof c == "object" || typeof c == "function") { e ? m[n] = f.extend(m[n], c) : m[n].data = f.extend(m[n].data, c) } g = h = m[n], e || (h.data || (h.data = {}), h = h.data), d !== b && (h[f.camelCase(c)] = d);
if (o && !h[c]) { return g.events } k ? (i = h[c], i == null && (i = h[f.camelCase(c)])) : i = h;
return i
}
},
removeData: function(a, b, c) {
if (!!f.acceptData(a)) {
var d, e, g, h = f.expando,
i = a.nodeType,
j = i ? f.cache : a,
k = i ? a[h] : h;
if (!j[k]) { return }
if (b) { d = c ? j[k] : j[k].data; if (d) { f.isArray(b) || (b in d ? b = [b] : (b = f.camelCase(b), b in d ? b = [b] : b = b.split(" "))); for (e = 0, g = b.length; e < g; e++) { delete d[b[e]] } if (!(c ? m : f.isEmptyObject)(d)) { return } } }
if (!c) { delete j[k].data; if (!m(j[k])) { return } } f.support.deleteExpando || !j.setInterval ? delete j[k] : j[k] = null, i && (f.support.deleteExpando ? delete a[h] : a.removeAttribute ? a.removeAttribute(h) : a[h] = null)
}
},
_data: function(a, b, c) { return f.data(a, b, c, !0) },
acceptData: function(a) { if (a.nodeName) { var b = f.noData[a.nodeName.toLowerCase()]; if (b) { return b !== !0 && a.getAttribute("classid") === b } } return !0 }
}), f.fn.extend({
data: function(a, c) {
var d, e, g, h, i, j = this[0],
k = 0,
m = null;
if (a === b) { if (this.length) { m = f.data(j); if (j.nodeType === 1 && !f._data(j, "parsedAttrs")) { g = j.attributes; for (i = g.length; k < i; k++) { h = g[k].name, h.indexOf("data-") === 0 && (h = f.camelCase(h.substring(5)), l(j, h, m[h])) } f._data(j, "parsedAttrs", !0) } } return m }
if (typeof a == "object") { return this.each(function() { f.data(this, a) }) } d = a.split(".", 2), d[1] = d[1] ? "." + d[1] : "", e = d[1] + "!";
return f.access(this, function(c) {
if (c === b) { m = this.triggerHandler("getData" + e, [d[0]]), m === b && j && (m = f.data(j, a), m = l(j, a, m)); return m === b && d[1] ? this.data(d[0]) : m } d[1] = c, this.each(function() {
var b = f(this);
b.triggerHandler("setData" + e, d), f.data(this, a, c), b.triggerHandler("changeData" + e, d)
})
}, null, c, arguments.length > 1, null, !1)
},
removeData: function(a) { return this.each(function() { f.removeData(this, a) }) }
}), f.extend({
_mark: function(a, b) { a && (b = (b || "fx") + "mark", f._data(a, b, (f._data(a, b) || 0) + 1)) },
_unmark: function(a, b, c) {
a !== !0 && (c = b, b = a, a = !1);
if (b) {
c = c || "fx";
var d = c + "mark",
e = a ? 0 : (f._data(b, d) || 1) - 1;
e ? f._data(b, d, e) : (f.removeData(b, d, !0), n(b, c, "mark"))
}
},
queue: function(a, b, c) { var d; if (a) { b = (b || "fx") + "queue", d = f._data(a, b), c && (!d || f.isArray(c) ? d = f._data(a, b, f.makeArray(c)) : d.push(c)); return d || [] } },
dequeue: function(a, b) {
b = b || "fx";
var c = f.queue(a, b),
d = c.shift(),
e = {};
d === "inprogress" && (d = c.shift()), d && (b === "fx" && c.unshift("inprogress"), f._data(a, b + ".run", e), d.call(a, function() { f.dequeue(a, b) }, e)), c.length || (f.removeData(a, b + "queue " + b + ".run", !0), n(a, b, "queue"))
}
}), f.fn.extend({
queue: function(a, c) {
var d = 2;
typeof a != "string" && (c = a, a = "fx", d--);
if (arguments.length < d) { return f.queue(this[0], a) }
return c === b ? this : this.each(function() {
var b = f.queue(this, a, c);
a === "fx" && b[0] !== "inprogress" && f.dequeue(this, a)
})
},
dequeue: function(a) { return this.each(function() { f.dequeue(this, a) }) },
delay: function(a, b) {
a = f.fx ? f.fx.speeds[a] || a : a, b = b || "fx";
return this.queue(b, function(b, c) {
var d = setTimeout(b, a);
c.stop = function() { clearTimeout(d) }
})
},
clearQueue: function(a) { return this.queue(a || "fx", []) },
promise: function(a, c) {
function m() {--h || d.resolveWith(e, [e]) } typeof a != "string" && (c = a, a = b), a = a || "fx";
var d = f.Deferred(),
e = this,
g = e.length,
h = 1,
i = a + "defer",
j = a + "queue",
k = a + "mark",
l;
while (g--) { if (l = f.data(e[g], i, b, !0) || (f.data(e[g], j, b, !0) || f.data(e[g], k, b, !0)) && f.data(e[g], i, f.Callbacks("once memory"), !0)) { h++, l.add(m) } } m();
return d.promise(c)
}
});
var o = /[\n\t\r]/g,
p = /\s+/,
q = /\r/g,
r = /^(?:button|input)$/i,
s = /^(?:button|input|object|select|textarea)$/i,
t = /^a(?:rea)?$/i,
u = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
v = f.support.getSetAttribute,
w, x, y;
f.fn.extend({
attr: function(a, b) { return f.access(this, f.attr, a, b, arguments.length > 1) },
removeAttr: function(a) { return this.each(function() { f.removeAttr(this, a) }) },
prop: function(a, b) { return f.access(this, f.prop, a, b, arguments.length > 1) },
removeProp: function(a) { a = f.propFix[a] || a; return this.each(function() { try { this[a] = b, delete this[a] } catch (c) {} }) },
addClass: function(a) { var b, c, d, e, g, h, i; if (f.isFunction(a)) { return this.each(function(b) { f(this).addClass(a.call(this, b, this.className)) }) } if (a && typeof a == "string") { b = a.split(p); for (c = 0, d = this.length; c < d; c++) { e = this[c]; if (e.nodeType === 1) { if (!e.className && b.length === 1) { e.className = a } else { g = " " + e.className + " "; for (h = 0, i = b.length; h < i; h++) {~g.indexOf(" " + b[h] + " ") || (g += b[h] + " ") } e.className = f.trim(g) } } } } return this },
removeClass: function(a) { var c, d, e, g, h, i, j; if (f.isFunction(a)) { return this.each(function(b) { f(this).removeClass(a.call(this, b, this.className)) }) } if (a && typeof a == "string" || a === b) { c = (a || "").split(p); for (d = 0, e = this.length; d < e; d++) { g = this[d]; if (g.nodeType === 1 && g.className) { if (a) { h = (" " + g.className + " ").replace(o, " "); for (i = 0, j = c.length; i < j; i++) { h = h.replace(" " + c[i] + " ", " ") } g.className = f.trim(h) } else { g.className = "" } } } } return this },
toggleClass: function(a, b) {
var c = typeof a,
d = typeof b == "boolean";
if (f.isFunction(a)) { return this.each(function(c) { f(this).toggleClass(a.call(this, c, this.className, b), b) }) }
return this.each(function() {
if (c === "string") {
var e, g = 0,
h = f(this),
i = b,
j = a.split(p);
while (e = j[g++]) { i = d ? i : !h.hasClass(e), h[i ? "addClass" : "removeClass"](e) }
} else { if (c === "undefined" || c === "boolean") { this.className && f._data(this, "__className__", this.className), this.className = this.className || a === !1 ? "" : f._data(this, "__className__") || "" } }
})
},
hasClass: function(a) {
var b = " " + a + " ",
c = 0,
d = this.length;
for (; c < d; c++) { if (this[c].nodeType === 1 && (" " + this[c].className + " ").replace(o, " ").indexOf(b) > -1) { return !0 } }
return !1
},
val: function(a) {
var c, d, e, g = this[0];
if (!!arguments.length) {
e = f.isFunction(a);
return this.each(function(d) {
var g = f(this),
h;
if (this.nodeType === 1) { e ? h = a.call(this, d, g.val()) : h = a, h == null ? h = "" : typeof h == "number" ? h += "" : f.isArray(h) && (h = f.map(h, function(a) { return a == null ? "" : a + "" })), c = f.valHooks[this.type] || f.valHooks[this.nodeName.toLowerCase()]; if (!c || !("set" in c) || c.set(this, h, "value") === b) { this.value = h } }
})
}
if (g) { c = f.valHooks[g.type] || f.valHooks[g.nodeName.toLowerCase()]; if (c && "get" in c && (d = c.get(g, "value")) !== b) { return d } d = g.value; return typeof d == "string" ? d.replace(q, "") : d == null ? "" : d }
}
}), f.extend({
valHooks: {
option: { get: function(a) { var b = a.attributes.value; return !b || b.specified ? a.value : a.text } },
select: {
get: function(a) {
var b, c, d, e, g = a.selectedIndex,
h = [],
i = a.options,
j = a.type === "select-one";
if (g < 0) { return null } c = j ? g : 0, d = j ? g + 1 : i.length;
for (; c < d; c++) { e = i[c]; if (e.selected && (f.support.optDisabled ? !e.disabled : e.getAttribute("disabled") === null) && (!e.parentNode.disabled || !f.nodeName(e.parentNode, "optgroup"))) { b = f(e).val(); if (j) { return b } h.push(b) } }
if (j && !h.length && i.length) { return f(i[g]).val() }
return h
},
set: function(a, b) {
var c = f.makeArray(b);
f(a).find("option").each(function() { this.selected = f.inArray(f(this).val(), c) >= 0 }), c.length || (a.selectedIndex = -1);
return c
}
}
},
attrFn: { val: !0, css: !0, html: !0, text: !0, data: !0, width: !0, height: !0, offset: !0 },
attr: function(a, c, d, e) { var g, h, i, j = a.nodeType; if (!!a && j !== 3 && j !== 8 && j !== 2) { if (e && c in f.attrFn) { return f(a)[c](d) } if (typeof a.getAttribute == "undefined") { return f.prop(a, c, d) } i = j !== 1 || !f.isXMLDoc(a), i && (c = c.toLowerCase(), h = f.attrHooks[c] || (u.test(c) ? x : w)); if (d !== b) { if (d === null) { f.removeAttr(a, c); return } if (h && "set" in h && i && (g = h.set(a, d, c)) !== b) { return g } a.setAttribute(c, "" + d); return d } if (h && "get" in h && i && (g = h.get(a, c)) !== null) { return g } g = a.getAttribute(c); return g === null ? b : g } },
removeAttr: function(a, b) { var c, d, e, g, h, i = 0; if (b && a.nodeType === 1) { d = b.toLowerCase().split(p), g = d.length; for (; i < g; i++) { e = d[i], e && (c = f.propFix[e] || e, h = u.test(e), h || f.attr(a, e, ""), a.removeAttribute(v ? e : c), h && c in a && (a[c] = !1)) } } },
attrHooks: {
type: {
set: function(a, b) {
if (r.test(a.nodeName) && a.parentNode) { f.error("type property can't be changed") } else {
if (!f.support.radioValue && b === "radio" && f.nodeName(a, "input")) {
var c = a.value;
a.setAttribute("type", b), c && (a.value = c);
return b
}
}
}
},
value: { get: function(a, b) { if (w && f.nodeName(a, "button")) { return w.get(a, b) } return b in a ? a.value : null }, set: function(a, b, c) { if (w && f.nodeName(a, "button")) { return w.set(a, b, c) } a.value = b } }
},
propFix: { tabindex: "tabIndex", readonly: "readOnly", "for": "htmlFor", "class": "className", maxlength: "maxLength", cellspacing: "cellSpacing", cellpadding: "cellPadding", rowspan: "rowSpan", colspan: "colSpan", usemap: "useMap", frameborder: "frameBorder", contenteditable: "contentEditable" },
prop: function(a, c, d) { var e, g, h, i = a.nodeType; if (!!a && i !== 3 && i !== 8 && i !== 2) { h = i !== 1 || !f.isXMLDoc(a), h && (c = f.propFix[c] || c, g = f.propHooks[c]); return d !== b ? g && "set" in g && (e = g.set(a, d, c)) !== b ? e : a[c] = d : g && "get" in g && (e = g.get(a, c)) !== null ? e : a[c] } },
propHooks: { tabIndex: { get: function(a) { var c = a.getAttributeNode("tabindex"); return c && c.specified ? parseInt(c.value, 10) : s.test(a.nodeName) || t.test(a.nodeName) && a.href ? 0 : b } } }
}), f.attrHooks.tabindex = f.propHooks.tabIndex, x = {
get: function(a, c) { var d, e = f.prop(a, c); return e === !0 || typeof e != "boolean" && (d = a.getAttributeNode(c)) && d.nodeValue !== !1 ? c.toLowerCase() : b },
set: function(a, b, c) {
var d;
b === !1 ? f.removeAttr(a, c) : (d = f.propFix[c] || c, d in a && (a[d] = !0), a.setAttribute(c, c.toLowerCase()));
return c
}
}, v || (y = { name: !0, id: !0, coords: !0 }, w = f.valHooks.button = {
get: function(a, c) {
var d;
d = a.getAttributeNode(c);
return d && (y[c] ? d.nodeValue !== "" : d.specified) ? d.nodeValue : b
},
set: function(a, b, d) {
var e = a.getAttributeNode(d);
e || (e = c.createAttribute(d), a.setAttributeNode(e));
return e.nodeValue = b + ""
}
}, f.attrHooks.tabindex.set = w.set, f.each(["width", "height"], function(a, b) { f.attrHooks[b] = f.extend(f.attrHooks[b], { set: function(a, c) { if (c === "") { a.setAttribute(b, "auto"); return c } } }) }), f.attrHooks.contenteditable = { get: w.get, set: function(a, b, c) { b === "" && (b = "false"), w.set(a, b, c) } }), f.support.hrefNormalized || f.each(["href", "src", "width", "height"], function(a, c) { f.attrHooks[c] = f.extend(f.attrHooks[c], { get: function(a) { var d = a.getAttribute(c, 2); return d === null ? b : d } }) }), f.support.style || (f.attrHooks.style = { get: function(a) { return a.style.cssText.toLowerCase() || b }, set: function(a, b) { return a.style.cssText = "" + b } }), f.support.optSelected || (f.propHooks.selected = f.extend(f.propHooks.selected, {
get: function(a) {
var b = a.parentNode;
b && (b.selectedIndex, b.parentNode && b.parentNode.selectedIndex);
return null
}
})), f.support.enctype || (f.propFix.enctype = "encoding"), f.support.checkOn || f.each(["radio", "checkbox"], function() { f.valHooks[this] = { get: function(a) { return a.getAttribute("value") === null ? "on" : a.value } } }), f.each(["radio", "checkbox"], function() { f.valHooks[this] = f.extend(f.valHooks[this], { set: function(a, b) { if (f.isArray(b)) { return a.checked = f.inArray(f(a).val(), b) >= 0 } } }) });
var z = /^(?:textarea|input|select)$/i,
A = /^([^\.]*)?(?:\.(.+))?$/,
B = /(?:^|\s)hover(\.\S+)?\b/,
C = /^key/,
D = /^(?:mouse|contextmenu)|click/,
E = /^(?:focusinfocus|focusoutblur)$/,
F = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
G = function(a) {
var b = F.exec(a);
b && (b[1] = (b[1] || "").toLowerCase(), b[3] = b[3] && new RegExp("(?:^|\\s)" + b[3] + "(?:\\s|$)"));
return b
},
H = function(a, b) { var c = a.attributes || {}; return (!b[1] || a.nodeName.toLowerCase() === b[1]) && (!b[2] || (c.id || {}).value === b[2]) && (!b[3] || b[3].test((c["class"] || {}).value)) },
I = function(a) { return f.event.special.hover ? a : a.replace(B, "mouseenter$1 mouseleave$1") };
f.event = {
add: function(a, c, d, e, g) { var h, i, j, k, l, m, n, o, p, q, r, s; if (!(a.nodeType === 3 || a.nodeType === 8 || !c || !d || !(h = f._data(a)))) { d.handler && (p = d, d = p.handler, g = p.selector), d.guid || (d.guid = f.guid++), j = h.events, j || (h.events = j = {}), i = h.handle, i || (h.handle = i = function(a) { return typeof f != "undefined" && (!a || f.event.triggered !== a.type) ? f.event.dispatch.apply(i.elem, arguments) : b }, i.elem = a), c = f.trim(I(c)).split(" "); for (k = 0; k < c.length; k++) { l = A.exec(c[k]) || [], m = l[1], n = (l[2] || "").split(".").sort(), s = f.event.special[m] || {}, m = (g ? s.delegateType : s.bindType) || m, s = f.event.special[m] || {}, o = f.extend({ type: m, origType: l[1], data: e, handler: d, guid: d.guid, selector: g, quick: g && G(g), namespace: n.join(".") }, p), r = j[m]; if (!r) { r = j[m] = [], r.delegateCount = 0; if (!s.setup || s.setup.call(a, e, n, i) === !1) { a.addEventListener ? a.addEventListener(m, i, !1) : a.attachEvent && a.attachEvent("on" + m, i) } } s.add && (s.add.call(a, o), o.handler.guid || (o.handler.guid = d.guid)), g ? r.splice(r.delegateCount++, 0, o) : r.push(o), f.event.global[m] = !0 } a = null } },
global: {},
remove: function(a, b, c, d, e) {
var g = f.hasData(a) && f._data(a),
h, i, j, k, l, m, n, o, p, q, r, s;
if (!!g && !!(o = g.events)) { b = f.trim(I(b || "")).split(" "); for (h = 0; h < b.length; h++) { i = A.exec(b[h]) || [], j = k = i[1], l = i[2]; if (!j) { for (j in o) { f.event.remove(a, j + b[h], c, d, !0) } continue } p = f.event.special[j] || {}, j = (d ? p.delegateType : p.bindType) || j, r = o[j] || [], m = r.length, l = l ? new RegExp("(^|\\.)" + l.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null; for (n = 0; n < r.length; n++) { s = r[n], (e || k === s.origType) && (!c || c.guid === s.guid) && (!l || l.test(s.namespace)) && (!d || d === s.selector || d === "**" && s.selector) && (r.splice(n--, 1), s.selector && r.delegateCount--, p.remove && p.remove.call(a, s)) } r.length === 0 && m !== r.length && ((!p.teardown || p.teardown.call(a, l) === !1) && f.removeEvent(a, j, g.handle), delete o[j]) } f.isEmptyObject(o) && (q = g.handle, q && (q.elem = null), f.removeData(a, ["events", "handle"], !0)) }
},
customEvent: { getData: !0, setData: !0, changeData: !0 },
trigger: function(c, d, e, g) {
if (!e || e.nodeType !== 3 && e.nodeType !== 8) {
var h = c.type || c,
i = [],
j, k, l, m, n, o, p, q, r, s;
if (E.test(h + f.event.triggered)) { return } h.indexOf("!") >= 0 && (h = h.slice(0, -1), k = !0), h.indexOf(".") >= 0 && (i = h.split("."), h = i.shift(), i.sort());
if ((!e || f.event.customEvent[h]) && !f.event.global[h]) { return } c = typeof c == "object" ? c[f.expando] ? c : new f.Event(h, c) : new f.Event(h), c.type = h, c.isTrigger = !0, c.exclusive = k, c.namespace = i.join("."), c.namespace_re = c.namespace ? new RegExp("(^|\\.)" + i.join("\\.(?:.*\\.)?") + "(\\.|$)") : null, o = h.indexOf(":") < 0 ? "on" + h : "";
if (!e) { j = f.cache; for (l in j) { j[l].events && j[l].events[h] && f.event.trigger(c, d, j[l].handle.elem, !0) } return } c.result = b, c.target || (c.target = e), d = d != null ? f.makeArray(d) : [], d.unshift(c), p = f.event.special[h] || {};
if (p.trigger && p.trigger.apply(e, d) === !1) { return } r = [
[e, p.bindType || h]
];
if (!g && !p.noBubble && !f.isWindow(e)) { s = p.delegateType || h, m = E.test(s + h) ? e : e.parentNode, n = null; for (; m; m = m.parentNode) { r.push([m, s]), n = m } n && n === e.ownerDocument && r.push([n.defaultView || n.parentWindow || a, s]) }
for (l = 0; l < r.length && !c.isPropagationStopped(); l++) { m = r[l][0], c.type = r[l][1], q = (f._data(m, "events") || {})[c.type] && f._data(m, "handle"), q && q.apply(m, d), q = o && m[o], q && f.acceptData(m) && q.apply(m, d) === !1 && c.preventDefault() } c.type = h, !g && !c.isDefaultPrevented() && (!p._default || p._default.apply(e.ownerDocument, d) === !1) && (h !== "click" || !f.nodeName(e, "a")) && f.acceptData(e) && o && e[h] && (h !== "focus" && h !== "blur" || c.target.offsetWidth !== 0) && !f.isWindow(e) && (n = e[o], n && (e[o] = null), f.event.triggered = h, e[h](), f.event.triggered = b, n && (e[o] = n));
return c.result
}
},
dispatch: function(c) {
c = f.event.fix(c || a.event);
var d = (f._data(this, "events") || {})[c.type] || [],
e = d.delegateCount,
g = [].slice.call(arguments, 0),
h = !c.exclusive && !c.namespace,
i = f.event.special[c.type] || {},
j = [],
k, l, m, n, o, p, q, r, s, t, u;
g[0] = c, c.delegateTarget = this;
if (!i.preDispatch || i.preDispatch.call(this, c) !== !1) { if (e && (!c.button || c.type !== "click")) { n = f(this), n.context = this.ownerDocument || this; for (m = c.target; m != this; m = m.parentNode || this) { if (m.disabled !== !0) { p = {}, r = [], n[0] = m; for (k = 0; k < e; k++) { s = d[k], t = s.selector, p[t] === b && (p[t] = s.quick ? H(m, s.quick) : n.is(t)), p[t] && r.push(s) } r.length && j.push({ elem: m, matches: r }) } } } d.length > e && j.push({ elem: this, matches: d.slice(e) }); for (k = 0; k < j.length && !c.isPropagationStopped(); k++) { q = j[k], c.currentTarget = q.elem; for (l = 0; l < q.matches.length && !c.isImmediatePropagationStopped(); l++) { s = q.matches[l]; if (h || !c.namespace && !s.namespace || c.namespace_re && c.namespace_re.test(s.namespace)) { c.data = s.data, c.handleObj = s, o = ((f.event.special[s.origType] || {}).handle || s.handler).apply(q.elem, g), o !== b && (c.result = o, o === !1 && (c.preventDefault(), c.stopPropagation())) } } } i.postDispatch && i.postDispatch.call(this, c); return c.result }
},
props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
fixHooks: {},
keyHooks: { props: "char charCode key keyCode".split(" "), filter: function(a, b) { a.which == null && (a.which = b.charCode != null ? b.charCode : b.keyCode); return a } },
mouseHooks: {
props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
filter: function(a, d) {
var e, f, g, h = d.button,
i = d.fromElement;
a.pageX == null && d.clientX != null && (e = a.target.ownerDocument || c, f = e.documentElement, g = e.body, a.pageX = d.clientX + (f && f.scrollLeft || g && g.scrollLeft || 0) - (f && f.clientLeft || g && g.clientLeft || 0), a.pageY = d.clientY + (f && f.scrollTop || g && g.scrollTop || 0) - (f && f.clientTop || g && g.clientTop || 0)), !a.relatedTarget && i && (a.relatedTarget = i === a.target ? d.toElement : i), !a.which && h !== b && (a.which = h & 1 ? 1 : h & 2 ? 3 : h & 4 ? 2 : 0);
return a
}
},
fix: function(a) {
if (a[f.expando]) { return a }
var d, e, g = a,
h = f.event.fixHooks[a.type] || {},
i = h.props ? this.props.concat(h.props) : this.props;
a = f.Event(g);
for (d = i.length; d;) { e = i[--d], a[e] = g[e] } a.target || (a.target = g.srcElement || c), a.target.nodeType === 3 && (a.target = a.target.parentNode), a.metaKey === b && (a.metaKey = a.ctrlKey);
return h.filter ? h.filter(a, g) : a
},
special: { ready: { setup: f.bindReady }, load: { noBubble: !0 }, focus: { delegateType: "focusin" }, blur: { delegateType: "focusout" }, beforeunload: { setup: function(a, b, c) { f.isWindow(this) && (this.onbeforeunload = c) }, teardown: function(a, b) { this.onbeforeunload === b && (this.onbeforeunload = null) } } },
simulate: function(a, b, c, d) {
var e = f.extend(new f.Event, c, { type: a, isSimulated: !0, originalEvent: {} });
d ? f.event.trigger(e, null, b) : f.event.dispatch.call(b, e), e.isDefaultPrevented() && c.preventDefault()
}
}, f.event.handle = f.event.dispatch, f.removeEvent = c.removeEventListener ? function(a, b, c) { a.removeEventListener && a.removeEventListener(b, c, !1) } : function(a, b, c) { a.detachEvent && a.detachEvent("on" + b, c) }, f.Event = function(a, b) { if (!(this instanceof f.Event)) { return new f.Event(a, b) } a && a.type ? (this.originalEvent = a, this.type = a.type, this.isDefaultPrevented = a.defaultPrevented || a.returnValue === !1 || a.getPreventDefault && a.getPreventDefault() ? K : J) : this.type = a, b && f.extend(this, b), this.timeStamp = a && a.timeStamp || f.now(), this[f.expando] = !0 }, f.Event.prototype = { preventDefault: function() { this.isDefaultPrevented = K; var a = this.originalEvent;!a || (a.preventDefault ? a.preventDefault() : a.returnValue = !1) }, stopPropagation: function() { this.isPropagationStopped = K; var a = this.originalEvent;!a || (a.stopPropagation && a.stopPropagation(), a.cancelBubble = !0) }, stopImmediatePropagation: function() { this.isImmediatePropagationStopped = K, this.stopPropagation() }, isDefaultPrevented: J, isPropagationStopped: J, isImmediatePropagationStopped: J }, f.each({ mouseenter: "mouseover", mouseleave: "mouseout" }, function(a, b) {
f.event.special[a] = {
delegateType: b,
bindType: b,
handle: function(a) {
var c = this,
d = a.relatedTarget,
e = a.handleObj,
g = e.selector,
h;
if (!d || d !== c && !f.contains(c, d)) { a.type = e.origType, h = e.handler.apply(this, arguments), a.type = b }
return h
}
}
}), f.support.submitBubbles || (f.event.special.submit = {
setup: function() {
if (f.nodeName(this, "form")) { return !1 } f.event.add(this, "click._submit keypress._submit", function(a) {
var c = a.target,
d = f.nodeName(c, "input") || f.nodeName(c, "button") ? c.form : b;
d && !d._submit_attached && (f.event.add(d, "submit._submit", function(a) { a._submit_bubble = !0 }), d._submit_attached = !0)
})
},
postDispatch: function(a) { a._submit_bubble && (delete a._submit_bubble, this.parentNode && !a.isTrigger && f.event.simulate("submit", this.parentNode, a, !0)) },
teardown: function() { if (f.nodeName(this, "form")) { return !1 } f.event.remove(this, "._submit") }
}), f.support.changeBubbles || (f.event.special.change = {
setup: function() {
if (z.test(this.nodeName)) { if (this.type === "checkbox" || this.type === "radio") { f.event.add(this, "propertychange._change", function(a) { a.originalEvent.propertyName === "checked" && (this._just_changed = !0) }), f.event.add(this, "click._change", function(a) { this._just_changed && !a.isTrigger && (this._just_changed = !1, f.event.simulate("change", this, a, !0)) }) } return !1 } f.event.add(this, "beforeactivate._change", function(a) {
var b = a.target;
z.test(b.nodeName) && !b._change_attached && (f.event.add(b, "change._change", function(a) { this.parentNode && !a.isSimulated && !a.isTrigger && f.event.simulate("change", this.parentNode, a, !0) }), b._change_attached = !0)
})
},
handle: function(a) { var b = a.target; if (this !== b || a.isSimulated || a.isTrigger || b.type !== "radio" && b.type !== "checkbox") { return a.handleObj.handler.apply(this, arguments) } },
teardown: function() { f.event.remove(this, "._change"); return z.test(this.nodeName) }
}), f.support.focusinBubbles || f.each({ focus: "focusin", blur: "focusout" }, function(a, b) {
var d = 0,
e = function(a) { f.event.simulate(b, a.target, f.event.fix(a), !0) };
f.event.special[b] = { setup: function() { d++ === 0 && c.addEventListener(a, e, !0) }, teardown: function() {--d === 0 && c.removeEventListener(a, e, !0) } }
}), f.fn.extend({
on: function(a, c, d, e, g) { var h, i; if (typeof a == "object") { typeof c != "string" && (d = d || c, c = b); for (i in a) { this.on(i, c, d, a[i], g) } return this } d == null && e == null ? (e = c, d = c = b) : e == null && (typeof c == "string" ? (e = d, d = b) : (e = d, d = c, c = b)); if (e === !1) { e = J } else { if (!e) { return this } } g === 1 && (h = e, e = function(a) { f().off(a); return h.apply(this, arguments) }, e.guid = h.guid || (h.guid = f.guid++)); return this.each(function() { f.event.add(this, a, e, d, c) }) },
one: function(a, b, c, d) { return this.on(a, b, c, d, 1) },
off: function(a, c, d) {
if (a && a.preventDefault && a.handleObj) {
var e = a.handleObj;
f(a.delegateTarget).off(e.namespace ? e.origType + "." + e.namespace : e.origType, e.selector, e.handler);
return this
}
if (typeof a == "object") { for (var g in a) { this.off(g, c, a[g]) } return this }
if (c === !1 || typeof c == "function") { d = c, c = b } d === !1 && (d = J);
return this.each(function() { f.event.remove(this, a, d, c) })
},
bind: function(a, b, c) { return this.on(a, null, b, c) },
unbind: function(a, b) { return this.off(a, null, b) },
live: function(a, b, c) { f(this.context).on(a, this.selector, b, c); return this },
die: function(a, b) { f(this.context).off(a, this.selector || "**", b); return this },
delegate: function(a, b, c, d) { return this.on(b, a, c, d) },
undelegate: function(a, b, c) { return arguments.length == 1 ? this.off(a, "**") : this.off(b, a, c) },
trigger: function(a, b) { return this.each(function() { f.event.trigger(a, b, this) }) },
triggerHandler: function(a, b) { if (this[0]) { return f.event.trigger(a, b, this[0], !0) } },
toggle: function(a) {
var b = arguments,
c = a.guid || f.guid++,
d = 0,
e = function(c) {
var e = (f._data(this, "lastToggle" + a.guid) || 0) % d;
f._data(this, "lastToggle" + a.guid, e + 1), c.preventDefault();
return b[e].apply(this, arguments) || !1
};
e.guid = c;
while (d < b.length) { b[d++].guid = c }
return this.click(e)
},
hover: function(a, b) { return this.mouseenter(a).mouseleave(b || a) }
}), f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function(a, b) { f.fn[b] = function(a, c) { c == null && (c = a, a = null); return arguments.length > 0 ? this.on(b, null, a, c) : this.trigger(b) }, f.attrFn && (f.attrFn[b] = !0), C.test(b) && (f.event.fixHooks[b] = f.event.keyHooks), D.test(b) && (f.event.fixHooks[b] = f.event.mouseHooks) }),
function() {
function x(a, b, c, e, f, g) {
for (var h = 0, i = e.length; h < i; h++) {
var j = e[h];
if (j) {
var k = !1;
j = j[a];
while (j) { if (j[d] === c) { k = e[j.sizset]; break } if (j.nodeType === 1) { g || (j[d] = c, j.sizset = h); if (typeof b != "string") { if (j === b) { k = !0; break } } else { if (m.filter(b, [j]).length > 0) { k = j; break } } } j = j[a] } e[h] = k
}
}
}
function w(a, b, c, e, f, g) {
for (var h = 0, i = e.length; h < i; h++) {
var j = e[h];
if (j) {
var k = !1;
j = j[a];
while (j) { if (j[d] === c) { k = e[j.sizset]; break } j.nodeType === 1 && !g && (j[d] = c, j.sizset = h); if (j.nodeName.toLowerCase() === b) { k = j; break } j = j[a] } e[h] = k
}
}
}
var a = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
d = "sizcache" + (Math.random() + "").replace(".", ""),
e = 0,
g = Object.prototype.toString,
h = !1,
i = !0,
j = /\\/g,
k = /\r\n/g,
l = /\W/;
[0, 0].sort(function() { i = !1; return 0 });
var m = function(b, d, e, f) {
e = e || [], d = d || c;
var h = d;
if (d.nodeType !== 1 && d.nodeType !== 9) { return [] }
if (!b || typeof b != "string") { return e }
var i, j, k, l, n, q, r, t, u = !0,
v = m.isXML(d),
w = [],
x = b;
do { a.exec(""), i = a.exec(x); if (i) { x = i[3], w.push(i[1]); if (i[2]) { l = i[3]; break } } } while (i);
if (w.length > 1 && p.exec(b)) { if (w.length === 2 && o.relative[w[0]]) { j = y(w[0] + w[1], d, f) } else { j = o.relative[w[0]] ? [d] : m(w.shift(), d); while (w.length) { b = w.shift(), o.relative[b] && (b += w.shift()), j = y(b, j, f) } } } else {!f && w.length > 1 && d.nodeType === 9 && !v && o.match.ID.test(w[0]) && !o.match.ID.test(w[w.length - 1]) && (n = m.find(w.shift(), d, v), d = n.expr ? m.filter(n.expr, n.set)[0] : n.set[0]); if (d) { n = f ? { expr: w.pop(), set: s(f) } : m.find(w.pop(), w.length === 1 && (w[0] === "~" || w[0] === "+") && d.parentNode ? d.parentNode : d, v), j = n.expr ? m.filter(n.expr, n.set) : n.set, w.length > 0 ? k = s(j) : u = !1; while (w.length) { q = w.pop(), r = q, o.relative[q] ? r = w.pop() : q = "", r == null && (r = d), o.relative[q](k, r, v) } } else { k = w = [] } } k || (k = j), k || m.error(q || b);
if (g.call(k) === "[object Array]") { if (!u) { e.push.apply(e, k) } else { if (d && d.nodeType === 1) { for (t = 0; k[t] != null; t++) { k[t] && (k[t] === !0 || k[t].nodeType === 1 && m.contains(d, k[t])) && e.push(j[t]) } } else { for (t = 0; k[t] != null; t++) { k[t] && k[t].nodeType === 1 && e.push(j[t]) } } } } else { s(k, e) } l && (m(l, h, e, f), m.uniqueSort(e));
return e
};
m.uniqueSort = function(a) { if (u) { h = i, a.sort(u); if (h) { for (var b = 1; b < a.length; b++) { a[b] === a[b - 1] && a.splice(b--, 1) } } } return a }, m.matches = function(a, b) { return m(a, null, null, b) }, m.matchesSelector = function(a, b) { return m(b, null, null, [a]).length > 0 }, m.find = function(a, b, c) { var d, e, f, g, h, i; if (!a) { return [] } for (e = 0, f = o.order.length; e < f; e++) { h = o.order[e]; if (g = o.leftMatch[h].exec(a)) { i = g[1], g.splice(1, 1); if (i.substr(i.length - 1) !== "\\") { g[1] = (g[1] || "").replace(j, ""), d = o.find[h](g, b, c); if (d != null) { a = a.replace(o.match[h], ""); break } } } } d || (d = typeof b.getElementsByTagName != "undefined" ? b.getElementsByTagName("*") : []); return { set: d, expr: a } }, m.filter = function(a, c, d, e) {
var f, g, h, i, j, k, l, n, p, q = a,
r = [],
s = c,
t = c && c[0] && m.isXML(c[0]);
while (a && c.length) {
for (h in o.filter) {
if ((f = o.leftMatch[h].exec(a)) != null && f[2]) {
k = o.filter[h], l = f[1], g = !1, f.splice(1, 1);
if (l.substr(l.length - 1) === "\\") { continue } s === r && (r = []);
if (o.preFilter[h]) { f = o.preFilter[h](f, s, d, r, e, t); if (!f) { g = i = !0 } else { if (f === !0) { continue } } }
if (f) {
for (n = 0;
(j = s[n]) != null; n++) { j && (i = k(j, f, n, s), p = e ^ i, d && i != null ? p ? g = !0 : s[n] = !1 : p && (r.push(j), g = !0)) }
}
if (i !== b) { d || (s = r), a = a.replace(o.match[h], ""); if (!g) { return [] } break }
}
}
if (a === q) { if (g == null) { m.error(a) } else { break } } q = a
}
return s
}, m.error = function(a) { throw new Error("Syntax error, unrecognized expression: " + a) };
var n = m.getText = function(a) {
var b, c, d = a.nodeType,
e = "";
if (d) { if (d === 1 || d === 9 || d === 11) { if (typeof a.textContent == "string") { return a.textContent } if (typeof a.innerText == "string") { return a.innerText.replace(k, "") } for (a = a.firstChild; a; a = a.nextSibling) { e += n(a) } } else { if (d === 3 || d === 4) { return a.nodeValue } } } else { for (b = 0; c = a[b]; b++) { c.nodeType !== 8 && (e += n(c)) } }
return e
},
o = m.selectors = {
order: ["ID", "NAME", "TAG"],
match: { ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ },
leftMatch: {},
attrMap: { "class": "className", "for": "htmlFor" },
attrHandle: { href: function(a) { return a.getAttribute("href") }, type: function(a) { return a.getAttribute("type") } },
relative: {
"+": function(a, b) {
var c = typeof b == "string",
d = c && !l.test(b),
e = c && !d;
d && (b = b.toLowerCase());
for (var f = 0, g = a.length, h; f < g; f++) { if (h = a[f]) { while ((h = h.previousSibling) && h.nodeType !== 1) {} a[f] = e || h && h.nodeName.toLowerCase() === b ? h || !1 : h === b } } e && m.filter(b, a, !0)
},
">": function(a, b) {
var c, d = typeof b == "string",
e = 0,
f = a.length;
if (d && !l.test(b)) {
b = b.toLowerCase();
for (; e < f; e++) {
c = a[e];
if (c) {
var g = c.parentNode;
a[e] = g.nodeName.toLowerCase() === b ? g : !1
}
}
} else { for (; e < f; e++) { c = a[e], c && (a[e] = d ? c.parentNode : c.parentNode === b) } d && m.filter(b, a, !0) }
},
"": function(a, b, c) {
var d, f = e++,
g = x;
typeof b == "string" && !l.test(b) && (b = b.toLowerCase(), d = b, g = w), g("parentNode", b, f, a, d, c)
},
"~": function(a, b, c) {
var d, f = e++,
g = x;
typeof b == "string" && !l.test(b) && (b = b.toLowerCase(), d = b, g = w), g("previousSibling", b, f, a, d, c)
}
},
find: {
ID: function(a, b, c) { if (typeof b.getElementById != "undefined" && !c) { var d = b.getElementById(a[1]); return d && d.parentNode ? [d] : [] } },
NAME: function(a, b) {
if (typeof b.getElementsByName != "undefined") {
var c = [],
d = b.getElementsByName(a[1]);
for (var e = 0, f = d.length; e < f; e++) { d[e].getAttribute("name") === a[1] && c.push(d[e]) }
return c.length === 0 ? null : c
}
},
TAG: function(a, b) { if (typeof b.getElementsByTagName != "undefined") { return b.getElementsByTagName(a[1]) } }
},
preFilter: {
CLASS: function(a, b, c, d, e, f) {
a = " " + a[1].replace(j, "") + " ";
if (f) { return a }
for (var g = 0, h;
(h = b[g]) != null; g++) { h && (e ^ (h.className && (" " + h.className + " ").replace(/[\t\n\r]/g, " ").indexOf(a) >= 0) ? c || d.push(h) : c && (b[g] = !1)) }
return !1
},
ID: function(a) { return a[1].replace(j, "") },
TAG: function(a, b) { return a[1].replace(j, "").toLowerCase() },
CHILD: function(a) {
if (a[1] === "nth") {
a[2] || m.error(a[0]), a[2] = a[2].replace(/^\+|\s*/g, "");
var b = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2] === "even" && "2n" || a[2] === "odd" && "2n+1" || !/\D/.test(a[2]) && "0n+" + a[2] || a[2]);
a[2] = b[1] + (b[2] || 1) - 0, a[3] = b[3] - 0
} else { a[2] && m.error(a[0]) } a[0] = e++;
return a
},
ATTR: function(a, b, c, d, e, f) { var g = a[1] = a[1].replace(j, "");!f && o.attrMap[g] && (a[1] = o.attrMap[g]), a[4] = (a[4] || a[5] || "").replace(j, ""), a[2] === "~=" && (a[4] = " " + a[4] + " "); return a },
PSEUDO: function(b, c, d, e, f) {
if (b[1] === "not") {
if ((a.exec(b[3]) || "").length > 1 || /^\w/.test(b[3])) { b[3] = m(b[3], null, null, c) } else {
var g = m.filter(b[3], c, d, !0 ^ f);
d || e.push.apply(e, g);
return !1
}
} else { if (o.match.POS.test(b[0]) || o.match.CHILD.test(b[0])) { return !0 } }
return b
},
POS: function(a) { a.unshift(!0); return a }
},
filters: {
enabled: function(a) { return a.disabled === !1 && a.type !== "hidden" },
disabled: function(a) { return a.disabled === !0 },
checked: function(a) { return a.checked === !0 },
selected: function(a) { a.parentNode && a.parentNode.selectedIndex; return a.selected === !0 },
parent: function(a) { return !!a.firstChild },
empty: function(a) { return !a.firstChild },
has: function(a, b, c) { return !!m(c[3], a).length },
header: function(a) { return /h\d/i.test(a.nodeName) },
text: function(a) {
var b = a.getAttribute("type"),
c = a.type;
return a.nodeName.toLowerCase() === "input" && "text" === c && (b === c || b === null)
},
radio: function(a) { return a.nodeName.toLowerCase() === "input" && "radio" === a.type },
checkbox: function(a) { return a.nodeName.toLowerCase() === "input" && "checkbox" === a.type },
file: function(a) { return a.nodeName.toLowerCase() === "input" && "file" === a.type },
password: function(a) { return a.nodeName.toLowerCase() === "input" && "password" === a.type },
submit: function(a) { var b = a.nodeName.toLowerCase(); return (b === "input" || b === "button") && "submit" === a.type },
image: function(a) { return a.nodeName.toLowerCase() === "input" && "image" === a.type },
reset: function(a) { var b = a.nodeName.toLowerCase(); return (b === "input" || b === "button") && "reset" === a.type },
button: function(a) { var b = a.nodeName.toLowerCase(); return b === "input" && "button" === a.type || b === "button" },
input: function(a) { return /input|select|textarea|button/i.test(a.nodeName) },
focus: function(a) { return a === a.ownerDocument.activeElement }
},
setFilters: { first: function(a, b) { return b === 0 }, last: function(a, b, c, d) { return b === d.length - 1 }, even: function(a, b) { return b % 2 === 0 }, odd: function(a, b) { return b % 2 === 1 }, lt: function(a, b, c) { return b < c[3] - 0 }, gt: function(a, b, c) { return b > c[3] - 0 }, nth: function(a, b, c) { return c[3] - 0 === b }, eq: function(a, b, c) { return c[3] - 0 === b } },
filter: {
PSEUDO: function(a, b, c, d) {
var e = b[1],
f = o.filters[e];
if (f) { return f(a, c, b, d) }
if (e === "contains") { return (a.textContent || a.innerText || n([a]) || "").indexOf(b[3]) >= 0 }
if (e === "not") { var g = b[3]; for (var h = 0, i = g.length; h < i; h++) { if (g[h] === a) { return !1 } } return !0 } m.error(e)
},
CHILD: function(a, b) {
var c, e, f, g, h, i, j, k = b[1],
l = a;
switch (k) {
case "only":
case "first":
while (l = l.previousSibling) { if (l.nodeType === 1) { return !1 } }
if (k === "first") { return !0 } l = a;
case "last":
while (l = l.nextSibling) { if (l.nodeType === 1) { return !1 } }
return !0;
case "nth":
c = b[2], e = b[3];
if (c === 1 && e === 0) { return !0 } f = b[0], g = a.parentNode;
if (g && (g[d] !== f || !a.nodeIndex)) { i = 0; for (l = g.firstChild; l; l = l.nextSibling) { l.nodeType === 1 && (l.nodeIndex = ++i) } g[d] = f } j = a.nodeIndex - e;
return c === 0 ? j === 0 : j % c === 0 && j / c >= 0
}
},
ID: function(a, b) { return a.nodeType === 1 && a.getAttribute("id") === b },
TAG: function(a, b) { return b === "*" && a.nodeType === 1 || !!a.nodeName && a.nodeName.toLowerCase() === b },
CLASS: function(a, b) { return (" " + (a.className || a.getAttribute("class")) + " ").indexOf(b) > -1 },
ATTR: function(a, b) {
var c = b[1],
d = m.attr ? m.attr(a, c) : o.attrHandle[c] ? o.attrHandle[c](a) : a[c] != null ? a[c] : a.getAttribute(c),
e = d + "",
f = b[2],
g = b[4];
return d == null ? f === "!=" : !f && m.attr ? d != null : f === "=" ? e === g : f === "*=" ? e.indexOf(g) >= 0 : f === "~=" ? (" " + e + " ").indexOf(g) >= 0 : g ? f === "!=" ? e !== g : f === "^=" ? e.indexOf(g) === 0 : f === "$=" ? e.substr(e.length - g.length) === g : f === "|=" ? e === g || e.substr(0, g.length + 1) === g + "-" : !1 : e && d !== !1
},
POS: function(a, b, c, d) {
var e = b[2],
f = o.setFilters[e];
if (f) { return f(a, c, b, d) }
}
}
},
p = o.match.POS,
q = function(a, b) { return "\\" + (b - 0 + 1) };
for (var r in o.match) { o.match[r] = new RegExp(o.match[r].source + /(?![^\[]*\])(?![^\(]*\))/.source), o.leftMatch[r] = new RegExp(/(^(?:.|\r|\n)*?)/.source + o.match[r].source.replace(/\\(\d+)/g, q)) } o.match.globalPOS = p;
var s = function(a, b) { a = Array.prototype.slice.call(a, 0); if (b) { b.push.apply(b, a); return b } return a };
try { Array.prototype.slice.call(c.documentElement.childNodes, 0)[0].nodeType } catch (t) {
s = function(a, b) {
var c = 0,
d = b || [];
if (g.call(a) === "[object Array]") { Array.prototype.push.apply(d, a) } else { if (typeof a.length == "number") { for (var e = a.length; c < e; c++) { d.push(a[c]) } } else { for (; a[c]; c++) { d.push(a[c]) } } }
return d
}
}
var u, v;
c.documentElement.compareDocumentPosition ? u = function(a, b) { if (a === b) { h = !0; return 0 } if (!a.compareDocumentPosition || !b.compareDocumentPosition) { return a.compareDocumentPosition ? -1 : 1 } return a.compareDocumentPosition(b) & 4 ? -1 : 1 } : (u = function(a, b) {
if (a === b) { h = !0; return 0 }
if (a.sourceIndex && b.sourceIndex) { return a.sourceIndex - b.sourceIndex }
var c, d, e = [],
f = [],
g = a.parentNode,
i = b.parentNode,
j = g;
if (g === i) { return v(a, b) }
if (!g) { return -1 }
if (!i) { return 1 }
while (j) { e.unshift(j), j = j.parentNode } j = i;
while (j) { f.unshift(j), j = j.parentNode } c = e.length, d = f.length;
for (var k = 0; k < c && k < d; k++) { if (e[k] !== f[k]) { return v(e[k], f[k]) } }
return k === c ? v(a, f[k], -1) : v(e[k], b, 1)
}, v = function(a, b, c) { if (a === b) { return c } var d = a.nextSibling; while (d) { if (d === b) { return -1 } d = d.nextSibling } return 1 }),
function() {
var a = c.createElement("div"),
d = "script" + (new Date).getTime(),
e = c.documentElement;
a.innerHTML = "<a name='" + d + "'/>", e.insertBefore(a, e.firstChild), c.getElementById(d) && (o.find.ID = function(a, c, d) { if (typeof c.getElementById != "undefined" && !d) { var e = c.getElementById(a[1]); return e ? e.id === a[1] || typeof e.getAttributeNode != "undefined" && e.getAttributeNode("id").nodeValue === a[1] ? [e] : b : [] } }, o.filter.ID = function(a, b) { var c = typeof a.getAttributeNode != "undefined" && a.getAttributeNode("id"); return a.nodeType === 1 && c && c.nodeValue === b }), e.removeChild(a), e = a = null
}(),
function() {
var a = c.createElement("div");
a.appendChild(c.createComment("")), a.getElementsByTagName("*").length > 0 && (o.find.TAG = function(a, b) { var c = b.getElementsByTagName(a[1]); if (a[1] === "*") { var d = []; for (var e = 0; c[e]; e++) { c[e].nodeType === 1 && d.push(c[e]) } c = d } return c }), a.innerHTML = "<a href='#'></a>", a.firstChild && typeof a.firstChild.getAttribute != "undefined" && a.firstChild.getAttribute("href") !== "#" && (o.attrHandle.href = function(a) { return a.getAttribute("href", 2) }), a = null
}(), c.querySelectorAll && function() {
var a = m,
b = c.createElement("div"),
d = "__sizzle__";
b.innerHTML = "<p class='TEST'></p>";
if (!b.querySelectorAll || b.querySelectorAll(".TEST").length !== 0) {
m = function(b, e, f, g) {
e = e || c;
if (!g && !m.isXML(e)) {
var h = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);
if (h && (e.nodeType === 1 || e.nodeType === 9)) { if (h[1]) { return s(e.getElementsByTagName(b), f) } if (h[2] && o.find.CLASS && e.getElementsByClassName) { return s(e.getElementsByClassName(h[2]), f) } }
if (e.nodeType === 9) { if (b === "body" && e.body) { return s([e.body], f) } if (h && h[3]) { var i = e.getElementById(h[3]); if (!i || !i.parentNode) { return s([], f) } if (i.id === h[3]) { return s([i], f) } } try { return s(e.querySelectorAll(b), f) } catch (j) {} } else {
if (e.nodeType === 1 && e.nodeName.toLowerCase() !== "object") {
var k = e,
l = e.getAttribute("id"),
n = l || d,
p = e.parentNode,
q = /^\s*[+~]/.test(b);
l ? n = n.replace(/'/g, "\\$&") : e.setAttribute("id", n), q && p && (e = e.parentNode);
try { if (!q || p) { return s(e.querySelectorAll("[id='" + n + "'] " + b), f) } } catch (r) {} finally { l || k.removeAttribute("id") }
}
}
}
return a(b, e, f, g)
};
for (var e in a) { m[e] = a[e] } b = null
}
}(),
function() {
var a = c.documentElement,
b = a.matchesSelector || a.mozMatchesSelector || a.webkitMatchesSelector || a.msMatchesSelector;
if (b) {
var d = !b.call(c.createElement("div"), "div"),
e = !1;
try { b.call(c.documentElement, "[test!='']:sizzle") } catch (f) { e = !0 } m.matchesSelector = function(a, c) { c = c.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); if (!m.isXML(a)) { try { if (e || !o.match.PSEUDO.test(c) && !/!=/.test(c)) { var f = b.call(a, c); if (f || !d || a.document && a.document.nodeType !== 11) { return f } } } catch (g) {} } return m(c, null, null, [a]).length > 0 }
}
}(),
function() {
var a = c.createElement("div");
a.innerHTML = "<div class='test e'></div><div class='test'></div>";
if (!!a.getElementsByClassName && a.getElementsByClassName("e").length !== 0) { a.lastChild.className = "e"; if (a.getElementsByClassName("e").length === 1) { return } o.order.splice(1, 0, "CLASS"), o.find.CLASS = function(a, b, c) { if (typeof b.getElementsByClassName != "undefined" && !c) { return b.getElementsByClassName(a[1]) } }, a = null }
}(), c.documentElement.contains ? m.contains = function(a, b) { return a !== b && (a.contains ? a.contains(b) : !0) } : c.documentElement.compareDocumentPosition ? m.contains = function(a, b) { return !!(a.compareDocumentPosition(b) & 16) } : m.contains = function() { return !1 }, m.isXML = function(a) { var b = (a ? a.ownerDocument || a : 0).documentElement; return b ? b.nodeName !== "HTML" : !1 };
var y = function(a, b, c) {
var d, e = [],
f = "",
g = b.nodeType ? [b] : b;
while (d = o.match.PSEUDO.exec(a)) { f += d[0], a = a.replace(o.match.PSEUDO, "") } a = o.relative[a] ? a + "*" : a;
for (var h = 0, i = g.length; h < i; h++) { m(a, g[h], e, c) }
return m.filter(f, e)
};
m.attr = f.attr, m.selectors.attrMap = {}, f.find = m, f.expr = m.selectors, f.expr[":"] = f.expr.filters, f.unique = m.uniqueSort, f.text = m.getText, f.isXMLDoc = m.isXML, f.contains = m.contains
}();
var L = /Until$/,
M = /^(?:parents|prevUntil|prevAll)/,
N = /,/,
O = /^.[^:#\[\.,]*$/,
P = Array.prototype.slice,
Q = f.expr.match.globalPOS,
R = { children: !0, contents: !0, next: !0, prev: !0 };
f.fn.extend({
find: function(a) {
var b = this,
c, d;
if (typeof a != "string") { return f(a).filter(function() { for (c = 0, d = b.length; c < d; c++) { if (f.contains(b[c], this)) { return !0 } } }) }
var e = this.pushStack("", "find", a),
g, h, i;
for (c = 0, d = this.length; c < d; c++) { g = e.length, f.find(a, this[c], e); if (c > 0) { for (h = g; h < e.length; h++) { for (i = 0; i < g; i++) { if (e[i] === e[h]) { e.splice(h--, 1); break } } } } }
return e
},
has: function(a) { var b = f(a); return this.filter(function() { for (var a = 0, c = b.length; a < c; a++) { if (f.contains(this, b[a])) { return !0 } } }) },
not: function(a) { return this.pushStack(T(this, a, !1), "not", a) },
filter: function(a) { return this.pushStack(T(this, a, !0), "filter", a) },
is: function(a) { return !!a && (typeof a == "string" ? Q.test(a) ? f(a, this.context).index(this[0]) >= 0 : f.filter(a, this).length > 0 : this.filter(a).length > 0) },
closest: function(a, b) {
var c = [],
d, e, g = this[0];
if (f.isArray(a)) { var h = 1; while (g && g.ownerDocument && g !== b) { for (d = 0; d < a.length; d++) { f(g).is(a[d]) && c.push({ selector: a[d], elem: g, level: h }) } g = g.parentNode, h++ } return c }
var i = Q.test(a) || typeof a != "string" ? f(a, b || this.context) : 0;
for (d = 0, e = this.length; d < e; d++) { g = this[d]; while (g) { if (i ? i.index(g) > -1 : f.find.matchesSelector(g, a)) { c.push(g); break } g = g.parentNode; if (!g || !g.ownerDocument || g === b || g.nodeType === 11) { break } } } c = c.length > 1 ? f.unique(c) : c;
return this.pushStack(c, "closest", a)
},
index: function(a) { if (!a) { return this[0] && this[0].parentNode ? this.prevAll().length : -1 } if (typeof a == "string") { return f.inArray(this[0], f(a)) } return f.inArray(a.jquery ? a[0] : a, this) },
add: function(a, b) {
var c = typeof a == "string" ? f(a, b) : f.makeArray(a && a.nodeType ? [a] : a),
d = f.merge(this.get(), c);
return this.pushStack(S(c[0]) || S(d[0]) ? d : f.unique(d))
},
andSelf: function() { return this.add(this.prevObject) }
}), f.each({ parent: function(a) { var b = a.parentNode; return b && b.nodeType !== 11 ? b : null }, parents: function(a) { return f.dir(a, "parentNode") }, parentsUntil: function(a, b, c) { return f.dir(a, "parentNode", c) }, next: function(a) { return f.nth(a, 2, "nextSibling") }, prev: function(a) { return f.nth(a, 2, "previousSibling") }, nextAll: function(a) { return f.dir(a, "nextSibling") }, prevAll: function(a) { return f.dir(a, "previousSibling") }, nextUntil: function(a, b, c) { return f.dir(a, "nextSibling", c) }, prevUntil: function(a, b, c) { return f.dir(a, "previousSibling", c) }, siblings: function(a) { return f.sibling((a.parentNode || {}).firstChild, a) }, children: function(a) { return f.sibling(a.firstChild) }, contents: function(a) { return f.nodeName(a, "iframe") ? a.contentDocument || a.contentWindow.document : f.makeArray(a.childNodes) } }, function(a, b) {
f.fn[a] = function(c, d) {
var e = f.map(this, b, c);
L.test(a) || (d = c), d && typeof d == "string" && (e = f.filter(d, e)), e = this.length > 1 && !R[a] ? f.unique(e) : e, (this.length > 1 || N.test(d)) && M.test(a) && (e = e.reverse());
return this.pushStack(e, a, P.call(arguments).join(","))
}
}), f.extend({
filter: function(a, b, c) { c && (a = ":not(" + a + ")"); return b.length === 1 ? f.find.matchesSelector(b[0], a) ? [b[0]] : [] : f.find.matches(a, b) },
dir: function(a, c, d) {
var e = [],
g = a[c];
while (g && g.nodeType !== 9 && (d === b || g.nodeType !== 1 || !f(g).is(d))) { g.nodeType === 1 && e.push(g), g = g[c] }
return e
},
nth: function(a, b, c, d) { b = b || 1; var e = 0; for (; a; a = a[c]) { if (a.nodeType === 1 && ++e === b) { break } } return a },
sibling: function(a, b) { var c = []; for (; a; a = a.nextSibling) { a.nodeType === 1 && a !== b && c.push(a) } return c }
});
var V = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
W = / jQuery\d+="(?:\d+|null)"/g,
X = /^\s+/,
Y = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
Z = /<([\w:]+)/,
$ = /<tbody/i,
_ = /<|&#?\w+;/,
ba = /<(?:script|style)/i,
bb = /<(?:script|object|embed|option|style)/i,
bc = new RegExp("<(?:" + V + ")[\\s/>]", "i"),
bd = /checked\s*(?:[^=]|=\s*.checked.)/i,
be = /\/(java|ecma)script/i,
bf = /^\s*<!(?:\[CDATA\[|\-\-)/,
bg = { option: [1, "<select multiple='multiple'>", "</select>"], legend: [1, "<fieldset>", "</fieldset>"], thead: [1, "<table>", "</table>"], tr: [2, "<table><tbody>", "</tbody></table>"], td: [3, "<table><tbody><tr>", "</tr></tbody></table>"], col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"], area: [1, "<map>", "</map>"], _default: [0, "", ""] },
bh = U(c);
bg.optgroup = bg.option, bg.tbody = bg.tfoot = bg.colgroup = bg.caption = bg.thead, bg.th = bg.td, f.support.htmlSerialize || (bg._default = [1, "div<div>", "</div>"]), f.fn.extend({
text: function(a) { return f.access(this, function(a) { return a === b ? f.text(this) : this.empty().append((this[0] && this[0].ownerDocument || c).createTextNode(a)) }, null, a, arguments.length) },
wrapAll: function(a) {
if (f.isFunction(a)) { return this.each(function(b) { f(this).wrapAll(a.call(this, b)) }) }
if (this[0]) {
var b = f(a, this[0].ownerDocument).eq(0).clone(!0);
this[0].parentNode && b.insertBefore(this[0]), b.map(function() { var a = this; while (a.firstChild && a.firstChild.nodeType === 1) { a = a.firstChild } return a }).append(this)
}
return this
},
wrapInner: function(a) {
if (f.isFunction(a)) { return this.each(function(b) { f(this).wrapInner(a.call(this, b)) }) }
return this.each(function() {
var b = f(this),
c = b.contents();
c.length ? c.wrapAll(a) : b.append(a)
})
},
wrap: function(a) { var b = f.isFunction(a); return this.each(function(c) { f(this).wrapAll(b ? a.call(this, c) : a) }) },
unwrap: function() { return this.parent().each(function() { f.nodeName(this, "body") || f(this).replaceWith(this.childNodes) }).end() },
append: function() { return this.domManip(arguments, !0, function(a) { this.nodeType === 1 && this.appendChild(a) }) },
prepend: function() { return this.domManip(arguments, !0, function(a) { this.nodeType === 1 && this.insertBefore(a, this.firstChild) }) },
before: function() {
if (this[0] && this[0].parentNode) { return this.domManip(arguments, !1, function(a) { this.parentNode.insertBefore(a, this) }) }
if (arguments.length) {
var a = f.clean(arguments);
a.push.apply(a, this.toArray());
return this.pushStack(a, "before", arguments)
}
},
after: function() {
if (this[0] && this[0].parentNode) { return this.domManip(arguments, !1, function(a) { this.parentNode.insertBefore(a, this.nextSibling) }) }
if (arguments.length) {
var a = this.pushStack(this, "after", arguments);
a.push.apply(a, f.clean(arguments));
return a
}
},
remove: function(a, b) {
for (var c = 0, d;
(d = this[c]) != null; c++) { if (!a || f.filter(a, [d]).length) {!b && d.nodeType === 1 && (f.cleanData(d.getElementsByTagName("*")), f.cleanData([d])), d.parentNode && d.parentNode.removeChild(d) } }
return this
},
empty: function() {
for (var a = 0, b;
(b = this[a]) != null; a++) { b.nodeType === 1 && f.cleanData(b.getElementsByTagName("*")); while (b.firstChild) { b.removeChild(b.firstChild) } }
return this
},
clone: function(a, b) { a = a == null ? !1 : a, b = b == null ? a : b; return this.map(function() { return f.clone(this, a, b) }) },
html: function(a) {
return f.access(this, function(a) {
var c = this[0] || {},
d = 0,
e = this.length;
if (a === b) { return c.nodeType === 1 ? c.innerHTML.replace(W, "") : null }
if (typeof a == "string" && !ba.test(a) && (f.support.leadingWhitespace || !X.test(a)) && !bg[(Z.exec(a) || ["", ""])[1].toLowerCase()]) { a = a.replace(Y, "<$1></$2>"); try { for (; d < e; d++) { c = this[d] || {}, c.nodeType === 1 && (f.cleanData(c.getElementsByTagName("*")), c.innerHTML = a) } c = 0 } catch (g) {} } c && this.empty().append(a)
}, null, a, arguments.length)
},
replaceWith: function(a) {
if (this[0] && this[0].parentNode) {
if (f.isFunction(a)) {
return this.each(function(b) {
var c = f(this),
d = c.html();
c.replaceWith(a.call(this, b, d))
})
}
typeof a != "string" && (a = f(a).detach());
return this.each(function() {
var b = this.nextSibling,
c = this.parentNode;
f(this).remove(), b ? f(b).before(a) : f(c).append(a)
})
}
return this.length ? this.pushStack(f(f.isFunction(a) ? a() : a), "replaceWith", a) : this
},
detach: function(a) { return this.remove(a, !0) },
domManip: function(a, c, d) {
var e, g, h, i, j = a[0],
k = [];
if (!f.support.checkClone && arguments.length === 3 && typeof j == "string" && bd.test(j)) { return this.each(function() { f(this).domManip(a, c, d, !0) }) }
if (f.isFunction(j)) {
return this.each(function(e) {
var g = f(this);
a[0] = j.call(this, e, c ? g.html() : b), g.domManip(a, c, d)
})
}
if (this[0]) { i = j && j.parentNode, f.support.parentNode && i && i.nodeType === 11 && i.childNodes.length === this.length ? e = { fragment: i } : e = f.buildFragment(a, this, k), h = e.fragment, h.childNodes.length === 1 ? g = h = h.firstChild : g = h.firstChild; if (g) { c = c && f.nodeName(g, "tr"); for (var l = 0, m = this.length, n = m - 1; l < m; l++) { d.call(c ? bi(this[l], g) : this[l], e.cacheable || m > 1 && l < n ? f.clone(h, !0, !0) : h) } } k.length && f.each(k, function(a, b) { b.src ? f.ajax({ type: "GET", global: !1, url: b.src, async: !1, dataType: "script" }) : f.globalEval((b.text || b.textContent || b.innerHTML || "").replace(bf, "/*$0*/")), b.parentNode && b.parentNode.removeChild(b) }) }
return this
}
}), f.buildFragment = function(a, b, d) {
var e, g, h, i, j = a[0];
b && b[0] && (i = b[0].ownerDocument || b[0]), i.createDocumentFragment || (i = c), a.length === 1 && typeof j == "string" && j.length < 512 && i === c && j.charAt(0) === "<" && !bb.test(j) && (f.support.checkClone || !bd.test(j)) && (f.support.html5Clone || !bc.test(j)) && (g = !0, h = f.fragments[j], h && h !== 1 && (e = h)), e || (e = i.createDocumentFragment(), f.clean(a, i, e, d)), g && (f.fragments[j] = h ? e : 1);
return { fragment: e, cacheable: g }
}, f.fragments = {}, f.each({ appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith" }, function(a, b) {
f.fn[a] = function(c) {
var d = [],
e = f(c),
g = this.length === 1 && this[0].parentNode;
if (g && g.nodeType === 11 && g.childNodes.length === 1 && e.length === 1) { e[b](this[0]); return this }
for (var h = 0, i = e.length; h < i; h++) {
var j = (h > 0 ? this.clone(!0) : this).get();
f(e[h])[b](j), d = d.concat(j)
}
return this.pushStack(d, a, e.selector)
}
}), f.extend({
clone: function(a, b, c) { var d, e, g, h = f.support.html5Clone || f.isXMLDoc(a) || !bc.test("<" + a.nodeName + ">") ? a.cloneNode(!0) : bo(a); if ((!f.support.noCloneEvent || !f.support.noCloneChecked) && (a.nodeType === 1 || a.nodeType === 11) && !f.isXMLDoc(a)) { bk(a, h), d = bl(a), e = bl(h); for (g = 0; d[g]; ++g) { e[g] && bk(d[g], e[g]) } } if (b) { bj(a, h); if (c) { d = bl(a), e = bl(h); for (g = 0; d[g]; ++g) { bj(d[g], e[g]) } } } d = e = null; return h },
clean: function(a, b, d, e) {
var g, h, i, j = [];
b = b || c, typeof b.createElement == "undefined" && (b = b.ownerDocument || b[0] && b[0].ownerDocument || c);
for (var k = 0, l;
(l = a[k]) != null; k++) {
typeof l == "number" && (l += "");
if (!l) { continue }
if (typeof l == "string") {
if (!_.test(l)) { l = b.createTextNode(l) } else {
l = l.replace(Y, "<$1></$2>");
var m = (Z.exec(l) || ["", ""])[1].toLowerCase(),
n = bg[m] || bg._default,
o = n[0],
p = b.createElement("div"),
q = bh.childNodes,
r;
b === c ? bh.appendChild(p) : U(b).appendChild(p), p.innerHTML = n[1] + l + n[2];
while (o--) { p = p.lastChild }
if (!f.support.tbody) {
var s = $.test(l),
t = m === "table" && !s ? p.firstChild && p.firstChild.childNodes : n[1] === "<table>" && !s ? p.childNodes : [];
for (i = t.length - 1; i >= 0; --i) { f.nodeName(t[i], "tbody") && !t[i].childNodes.length && t[i].parentNode.removeChild(t[i]) }
}!f.support.leadingWhitespace && X.test(l) && p.insertBefore(b.createTextNode(X.exec(l)[0]), p.firstChild), l = p.childNodes, p && (p.parentNode.removeChild(p), q.length > 0 && (r = q[q.length - 1], r && r.parentNode && r.parentNode.removeChild(r)))
}
}
var u;
if (!f.support.appendChecked) { if (l[0] && typeof(u = l.length) == "number") { for (i = 0; i < u; i++) { bn(l[i]) } } else { bn(l) } } l.nodeType ? j.push(l) : j = f.merge(j, l)
}
if (d) {
g = function(a) { return !a.type || be.test(a.type) };
for (k = 0; j[k]; k++) {
h = j[k];
if (e && f.nodeName(h, "script") && (!h.type || be.test(h.type))) { e.push(h.parentNode ? h.parentNode.removeChild(h) : h) } else {
if (h.nodeType === 1) {
var v = f.grep(h.getElementsByTagName("script"), g);
j.splice.apply(j, [k + 1, 0].concat(v))
}
d.appendChild(h)
}
}
}
return j
},
cleanData: function(a) {
var b, c, d = f.cache,
e = f.event.special,
g = f.support.deleteExpando;
for (var h = 0, i;
(i = a[h]) != null; h++) { if (i.nodeName && f.noData[i.nodeName.toLowerCase()]) { continue } c = i[f.expando]; if (c) { b = d[c]; if (b && b.events) { for (var j in b.events) { e[j] ? f.event.remove(i, j) : f.removeEvent(i, j, b.handle) } b.handle && (b.handle.elem = null) } g ? delete i[f.expando] : i.removeAttribute && i.removeAttribute(f.expando), delete d[c] } }
}
});
var bp = /alpha\([^)]*\)/i,
bq = /opacity=([^)]*)/,
br = /([A-Z]|^ms)/g,
bs = /^[\-+]?(?:\d*\.)?\d+$/i,
bt = /^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,
bu = /^([\-+])=([\-+.\de]+)/,
bv = /^margin/,
bw = { position: "absolute", visibility: "hidden", display: "block" },
bx = ["Top", "Right", "Bottom", "Left"],
by, bz, bA;
f.fn.css = function(a, c) { return f.access(this, function(a, c, d) { return d !== b ? f.style(a, c, d) : f.css(a, c) }, a, c, arguments.length > 1) }, f.extend({
cssHooks: { opacity: { get: function(a, b) { if (b) { var c = by(a, "opacity"); return c === "" ? "1" : c } return a.style.opacity } } },
cssNumber: { fillOpacity: !0, fontWeight: !0, lineHeight: !0, opacity: !0, orphans: !0, widows: !0, zIndex: !0, zoom: !0 },
cssProps: { "float": f.support.cssFloat ? "cssFloat" : "styleFloat" },
style: function(a, c, d, e) {
if (!!a && a.nodeType !== 3 && a.nodeType !== 8 && !!a.style) {
var g, h, i = f.camelCase(c),
j = a.style,
k = f.cssHooks[i];
c = f.cssProps[i] || i;
if (d === b) { if (k && "get" in k && (g = k.get(a, !1, e)) !== b) { return g } return j[c] } h = typeof d, h === "string" && (g = bu.exec(d)) && (d = +(g[1] + 1) * +g[2] + parseFloat(f.css(a, c)), h = "number");
if (d == null || h === "number" && isNaN(d)) { return } h === "number" && !f.cssNumber[i] && (d += "px");
if (!k || !("set" in k) || (d = k.set(a, d)) !== b) { try { j[c] = d } catch (l) {} }
}
},
css: function(a, c, d) {
var e, g;
c = f.camelCase(c), g = f.cssHooks[c], c = f.cssProps[c] || c, c === "cssFloat" && (c = "float");
if (g && "get" in g && (e = g.get(a, !0, d)) !== b) { return e }
if (by) { return by(a, c) }
},
swap: function(a, b, c) {
var d = {},
e, f;
for (f in b) { d[f] = a.style[f], a.style[f] = b[f] } e = c.call(a);
for (f in b) { a.style[f] = d[f] }
return e
}
}), f.curCSS = f.css, c.defaultView && c.defaultView.getComputedStyle && (bz = function(a, b) {
var c, d, e, g, h = a.style;
b = b.replace(br, "-$1").toLowerCase(), (d = a.ownerDocument.defaultView) && (e = d.getComputedStyle(a, null)) && (c = e.getPropertyValue(b), c === "" && !f.contains(a.ownerDocument.documentElement, a) && (c = f.style(a, b))), !f.support.pixelMargin && e && bv.test(b) && bt.test(c) && (g = h.width, h.width = c, c = e.width, h.width = g);
return c
}), c.documentElement.currentStyle && (bA = function(a, b) {
var c, d, e, f = a.currentStyle && a.currentStyle[b],
g = a.style;
f == null && g && (e = g[b]) && (f = e), bt.test(f) && (c = g.left, d = a.runtimeStyle && a.runtimeStyle.left, d && (a.runtimeStyle.left = a.currentStyle.left), g.left = b === "fontSize" ? "1em" : f, f = g.pixelLeft + "px", g.left = c, d && (a.runtimeStyle.left = d));
return f === "" ? "auto" : f
}), by = bz || bA, f.each(["height", "width"], function(a, b) { f.cssHooks[b] = { get: function(a, c, d) { if (c) { return a.offsetWidth !== 0 ? bB(a, b, d) : f.swap(a, bw, function() { return bB(a, b, d) }) } }, set: function(a, b) { return bs.test(b) ? b + "px" : b } } }), f.support.opacity || (f.cssHooks.opacity = {
get: function(a, b) { return bq.test((b && a.currentStyle ? a.currentStyle.filter : a.style.filter) || "") ? parseFloat(RegExp.$1) / 100 + "" : b ? "1" : "" },
set: function(a, b) {
var c = a.style,
d = a.currentStyle,
e = f.isNumeric(b) ? "alpha(opacity=" + b * 100 + ")" : "",
g = d && d.filter || c.filter || "";
c.zoom = 1;
if (b >= 1 && f.trim(g.replace(bp, "")) === "") { c.removeAttribute("filter"); if (d && !d.filter) { return } } c.filter = bp.test(g) ? g.replace(bp, e) : g + " " + e
}
}), f(function() { f.support.reliableMarginRight || (f.cssHooks.marginRight = { get: function(a, b) { return f.swap(a, { display: "inline-block" }, function() { return b ? by(a, "margin-right") : a.style.marginRight }) } }) }), f.expr && f.expr.filters && (f.expr.filters.hidden = function(a) {
var b = a.offsetWidth,
c = a.offsetHeight;
return b === 0 && c === 0 || !f.support.reliableHiddenOffsets && (a.style && a.style.display || f.css(a, "display")) === "none"
}, f.expr.filters.visible = function(a) { return !f.expr.filters.hidden(a) }), f.each({ margin: "", padding: "", border: "Width" }, function(a, b) {
f.cssHooks[a + b] = {
expand: function(c) {
var d, e = typeof c == "string" ? c.split(" ") : [c],
f = {};
for (d = 0; d < 4; d++) { f[a + bx[d] + b] = e[d] || e[d - 2] || e[0] }
return f
}
}
});
var bC = /%20/g,
bD = /\[\]$/,
bE = /\r?\n/g,
bF = /#.*$/,
bG = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg,
bH = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
bI = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
bJ = /^(?:GET|HEAD)$/,
bK = /^\/\//,
bL = /\?/,
bM = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
bN = /^(?:select|textarea)/i,
bO = /\s+/,
bP = /([?&])_=[^&]*/,
bQ = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
bR = f.fn.load,
bS = {},
bT = {},
bU, bV, bW = ["*/"] + ["*"];
try { bU = e.href } catch (bX) { bU = c.createElement("a"), bU.href = "", bU = bU.href } bV = bQ.exec(bU.toLowerCase()) || [], f.fn.extend({
load: function(a, c, d) {
if (typeof a != "string" && bR) { return bR.apply(this, arguments) }
if (!this.length) { return this }
var e = a.indexOf(" ");
if (e >= 0) {
var g = a.slice(e, a.length);
a = a.slice(0, e)
}
var h = "GET";
c && (f.isFunction(c) ? (d = c, c = b) : typeof c == "object" && (c = f.param(c, f.ajaxSettings.traditional), h = "POST"));
var i = this;
f.ajax({ url: a, type: h, dataType: "html", data: c, complete: function(a, b, c) { c = a.responseText, a.isResolved() && (a.done(function(a) { c = a }), i.html(g ? f("<div>").append(c.replace(bM, "")).find(g) : c)), d && i.each(d, [c, b, a]) } });
return this
},
serialize: function() { return f.param(this.serializeArray()) },
serializeArray: function() { return this.map(function() { return this.elements ? f.makeArray(this.elements) : this }).filter(function() { return this.name && !this.disabled && (this.checked || bN.test(this.nodeName) || bH.test(this.type)) }).map(function(a, b) { var c = f(this).val(); return c == null ? null : f.isArray(c) ? f.map(c, function(a, c) { return { name: b.name, value: a.replace(bE, "\r\n") } }) : { name: b.name, value: c.replace(bE, "\r\n") } }).get() }
}), f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function(a, b) { f.fn[b] = function(a) { return this.on(b, a) } }), f.each(["get", "post"], function(a, c) { f[c] = function(a, d, e, g) { f.isFunction(d) && (g = g || e, e = d, d = b); return f.ajax({ type: c, url: a, data: d, success: e, dataType: g }) } }), f.extend({
getScript: function(a, c) { return f.get(a, b, c, "script") },
getJSON: function(a, b, c) { return f.get(a, b, c, "json") },
ajaxSetup: function(a, b) { b ? b$(a, f.ajaxSettings) : (b = a, a = f.ajaxSettings), b$(a, b); return a },
ajaxSettings: { url: bU, isLocal: bI.test(bV[1]), global: !0, type: "GET", contentType: "application/x-www-form-urlencoded; charset=UTF-8", processData: !0, async: !0, accepts: { xml: "application/xml, text/xml", html: "text/html", text: "text/plain", json: "application/json, text/javascript", "*": bW }, contents: { xml: /xml/, html: /html/, json: /json/ }, responseFields: { xml: "responseXML", text: "responseText" }, converters: { "* text": a.String, "text html": !0, "text json": f.parseJSON, "text xml": f.parseXML }, flatOptions: { context: !0, url: !0 } },
ajaxPrefilter: bY(bS),
ajaxTransport: bY(bT),
ajax: function(a, c) {
function w(a, c, l, m) {
if (s !== 2) {
s = 2, q && clearTimeout(q), p = b, n = m || "", v.readyState = a > 0 ? 4 : 0;
var o, r, u, w = c,
x = l ? ca(d, v, l) : b,
y, z;
if (a >= 200 && a < 300 || a === 304) { if (d.ifModified) { if (y = v.getResponseHeader("Last-Modified")) { f.lastModified[k] = y } if (z = v.getResponseHeader("Etag")) { f.etag[k] = z } } if (a === 304) { w = "notmodified", o = !0 } else { try { r = cb(d, x), w = "success", o = !0 } catch (A) { w = "parsererror", u = A } } } else { u = w; if (!w || a) { w = "error", a < 0 && (a = 0) } } v.status = a, v.statusText = "" + (c || w), o ? h.resolveWith(e, [r, w, v]) : h.rejectWith(e, [v, w, u]), v.statusCode(j), j = b, t && g.trigger("ajax" + (o ? "Success" : "Error"), [v, d, o ? r : u]), i.fireWith(e, [v, w]), t && (g.trigger("ajaxComplete", [v, d]), --f.active || f.event.trigger("ajaxStop"))
}
}
typeof a == "object" && (c = a, a = b), c = c || {};
var d = f.ajaxSetup({}, c),
e = d.context || d,
g = e !== d && (e.nodeType || e instanceof f) ? f(e) : f.event,
h = f.Deferred(),
i = f.Callbacks("once memory"),
j = d.statusCode || {},
k, l = {},
m = {},
n, o, p, q, r, s = 0,
t, u, v = {
readyState: 0,
setRequestHeader: function(a, b) {
if (!s) {
var c = a.toLowerCase();
a = m[c] = m[c] || a, l[a] = b
}
return this
},
getAllResponseHeaders: function() { return s === 2 ? n : null },
getResponseHeader: function(a) { var c; if (s === 2) { if (!o) { o = {}; while (c = bG.exec(n)) { o[c[1].toLowerCase()] = c[2] } } c = o[a.toLowerCase()] } return c === b ? null : c },
overrideMimeType: function(a) { s || (d.mimeType = a); return this },
abort: function(a) { a = a || "abort", p && p.abort(a), w(0, a); return this }
};
h.promise(v), v.success = v.done, v.error = v.fail, v.complete = i.add, v.statusCode = function(a) { if (a) { var b; if (s < 2) { for (b in a) { j[b] = [j[b], a[b]] } } else { b = a[v.status], v.then(b, b) } } return this }, d.url = ((a || d.url) + "").replace(bF, "").replace(bK, bV[1] + "//"), d.dataTypes = f.trim(d.dataType || "*").toLowerCase().split(bO), d.crossDomain == null && (r = bQ.exec(d.url.toLowerCase()), d.crossDomain = !(!r || r[1] == bV[1] && r[2] == bV[2] && (r[3] || (r[1] === "http:" ? 80 : 443)) == (bV[3] || (bV[1] === "http:" ? 80 : 443)))), d.data && d.processData && typeof d.data != "string" && (d.data = f.param(d.data, d.traditional)), bZ(bS, d, c, v);
if (s === 2) { return !1 } t = d.global, d.type = d.type.toUpperCase(), d.hasContent = !bJ.test(d.type), t && f.active++ === 0 && f.event.trigger("ajaxStart");
if (!d.hasContent) {
d.data && (d.url += (bL.test(d.url) ? "&" : "?") + d.data, delete d.data), k = d.url;
if (d.cache === !1) {
var x = f.now(),
y = d.url.replace(bP, "$1_=" + x);
d.url = y + (y === d.url ? (bL.test(d.url) ? "&" : "?") + "_=" + x : "")
}
}(d.data && d.hasContent && d.contentType !== !1 || c.contentType) && v.setRequestHeader("Content-Type", d.contentType), d.ifModified && (k = k || d.url, f.lastModified[k] && v.setRequestHeader("If-Modified-Since", f.lastModified[k]), f.etag[k] && v.setRequestHeader("If-None-Match", f.etag[k])), v.setRequestHeader("Accept", d.dataTypes[0] && d.accepts[d.dataTypes[0]] ? d.accepts[d.dataTypes[0]] + (d.dataTypes[0] !== "*" ? ", " + bW + "; q=0.01" : "") : d.accepts["*"]);
for (u in d.headers) { v.setRequestHeader(u, d.headers[u]) }
if (d.beforeSend && (d.beforeSend.call(e, v, d) === !1 || s === 2)) { v.abort(); return !1 }
for (u in { success: 1, error: 1, complete: 1 }) { v[u](d[u]) } p = bZ(bT, d, c, v);
if (!p) { w(-1, "No Transport") } else { v.readyState = 1, t && g.trigger("ajaxSend", [v, d]), d.async && d.timeout > 0 && (q = setTimeout(function() { v.abort("timeout") }, d.timeout)); try { s = 1, p.send(l, w) } catch (z) { if (s < 2) { w(-1, z) } else { throw z } } }
return v
},
param: function(a, c) {
var d = [],
e = function(a, b) { b = f.isFunction(b) ? b() : b, d[d.length] = encodeURIComponent(a) + "=" + encodeURIComponent(b) };
c === b && (c = f.ajaxSettings.traditional);
if (f.isArray(a) || a.jquery && !f.isPlainObject(a)) { f.each(a, function() { e(this.name, this.value) }) } else { for (var g in a) { b_(g, a[g], c, e) } }
return d.join("&").replace(bC, "+")
}
}), f.extend({ active: 0, lastModified: {}, etag: {} });
var cc = f.now(),
cd = /(\=)\?(&|$)|\?\?/i;
f.ajaxSetup({ jsonp: "callback", jsonpCallback: function() { return f.expando + "_" + cc++ } }), f.ajaxPrefilter("json jsonp", function(b, c, d) {
var e = typeof b.data == "string" && /^application\/x\-www\-form\-urlencoded/.test(b.contentType);
if (b.dataTypes[0] === "jsonp" || b.jsonp !== !1 && (cd.test(b.url) || e && cd.test(b.data))) {
var g, h = b.jsonpCallback = f.isFunction(b.jsonpCallback) ? b.jsonpCallback() : b.jsonpCallback,
i = a[h],
j = b.url,
k = b.data,
l = "$1" + h + "$2";
b.jsonp !== !1 && (j = j.replace(cd, l), b.url === j && (e && (k = k.replace(cd, l)), b.data === k && (j += (/\?/.test(j) ? "&" : "?") + b.jsonp + "=" + h))), b.url = j, b.data = k, a[h] = function(a) { g = [a] }, d.always(function() { a[h] = i, g && f.isFunction(i) && a[h](g[0]) }), b.converters["script json"] = function() { g || f.error(h + " was not called"); return g[0] }, b.dataTypes[0] = "json";
return "script"
}
}), f.ajaxSetup({ accepts: { script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" }, contents: { script: /javascript|ecmascript/ }, converters: { "text script": function(a) { f.globalEval(a); return a } } }), f.ajaxPrefilter("script", function(a) { a.cache === b && (a.cache = !1), a.crossDomain && (a.type = "GET", a.global = !1) }), f.ajaxTransport("script", function(a) { if (a.crossDomain) { var d, e = c.head || c.getElementsByTagName("head")[0] || c.documentElement; return { send: function(f, g) { d = c.createElement("script"), d.async = "async", a.scriptCharset && (d.charset = a.scriptCharset), d.src = a.url, d.onload = d.onreadystatechange = function(a, c) { if (c || !d.readyState || /loaded|complete/.test(d.readyState)) { d.onload = d.onreadystatechange = null, e && d.parentNode && e.removeChild(d), d = b, c || g(200, "success") } }, e.insertBefore(d, e.firstChild) }, abort: function() { d && d.onload(0, 1) } } } });
var ce = a.ActiveXObject ? function() { for (var a in cg) { cg[a](0, 1) } } : !1,
cf = 0,
cg;
f.ajaxSettings.xhr = a.ActiveXObject ? function() { return !this.isLocal && ch() || ci() } : ch,
function(a) { f.extend(f.support, { ajax: !!a, cors: !!a && "withCredentials" in a }) }(f.ajaxSettings.xhr()), f.support.ajax && f.ajaxTransport(function(c) {
if (!c.crossDomain || f.support.cors) {
var d;
return {
send: function(e, g) {
var h = c.xhr(),
i, j;
c.username ? h.open(c.type, c.url, c.async, c.username, c.password) : h.open(c.type, c.url, c.async);
if (c.xhrFields) { for (j in c.xhrFields) { h[j] = c.xhrFields[j] } } c.mimeType && h.overrideMimeType && h.overrideMimeType(c.mimeType), !c.crossDomain && !e["X-Requested-With"] && (e["X-Requested-With"] = "XMLHttpRequest");
try { for (j in e) { h.setRequestHeader(j, e[j]) } } catch (k) {} h.send(c.hasContent && c.data || null), d = function(a, e) { var j, k, l, m, n; try { if (d && (e || h.readyState === 4)) { d = b, i && (h.onreadystatechange = f.noop, ce && delete cg[i]); if (e) { h.readyState !== 4 && h.abort() } else { j = h.status, l = h.getAllResponseHeaders(), m = {}, n = h.responseXML, n && n.documentElement && (m.xml = n); try { m.text = h.responseText } catch (a) {} try { k = h.statusText } catch (o) { k = "" }!j && c.isLocal && !c.crossDomain ? j = m.text ? 200 : 404 : j === 1223 && (j = 204) } } } catch (p) { e || g(-1, p) } m && g(j, k, m, l) }, !c.async || h.readyState === 4 ? d() : (i = ++cf, ce && (cg || (cg = {}, f(a).unload(ce)), cg[i] = d), h.onreadystatechange = d)
},
abort: function() { d && d(0, 1) }
}
}
});
var cj = {},
ck, cl, cm = /^(?:toggle|show|hide)$/,
cn = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
co, cp = [
["height", "marginTop", "marginBottom", "paddingTop", "paddingBottom"],
["width", "marginLeft", "marginRight", "paddingLeft", "paddingRight"],
["opacity"]
],
cq;
f.fn.extend({
show: function(a, b, c) { var d, e; if (a || a === 0) { return this.animate(ct("show", 3), a, b, c) } for (var g = 0, h = this.length; g < h; g++) { d = this[g], d.style && (e = d.style.display, !f._data(d, "olddisplay") && e === "none" && (e = d.style.display = ""), (e === "" && f.css(d, "display") === "none" || !f.contains(d.ownerDocument.documentElement, d)) && f._data(d, "olddisplay", cu(d.nodeName))) } for (g = 0; g < h; g++) { d = this[g]; if (d.style) { e = d.style.display; if (e === "" || e === "none") { d.style.display = f._data(d, "olddisplay") || "" } } } return this },
hide: function(a, b, c) {
if (a || a === 0) { return this.animate(ct("hide", 3), a, b, c) }
var d, e, g = 0,
h = this.length;
for (; g < h; g++) { d = this[g], d.style && (e = f.css(d, "display"), e !== "none" && !f._data(d, "olddisplay") && f._data(d, "olddisplay", e)) }
for (g = 0; g < h; g++) { this[g].style && (this[g].style.display = "none") }
return this
},
_toggle: f.fn.toggle,
toggle: function(a, b, c) {
var d = typeof a == "boolean";
f.isFunction(a) && f.isFunction(b) ? this._toggle.apply(this, arguments) : a == null || d ? this.each(function() {
var b = d ? a : f(this).is(":hidden");
f(this)[b ? "show" : "hide"]()
}) : this.animate(ct("toggle", 3), a, b, c);
return this
},
fadeTo: function(a, b, c, d) { return this.filter(":hidden").css("opacity", 0).show().end().animate({ opacity: b }, a, c, d) },
animate: function(a, b, c, d) {
function g() {
e.queue === !1 && f._mark(this);
var b = f.extend({}, e),
c = this.nodeType === 1,
d = c && f(this).is(":hidden"),
g, h, i, j, k, l, m, n, o, p, q;
b.animatedProperties = {};
for (i in a) { g = f.camelCase(i), i !== g && (a[g] = a[i], delete a[i]); if ((k = f.cssHooks[g]) && "expand" in k) { l = k.expand(a[g]), delete a[g]; for (i in l) { i in a || (a[i] = l[i]) } } }
for (g in a) { h = a[g], f.isArray(h) ? (b.animatedProperties[g] = h[1], h = a[g] = h[0]) : b.animatedProperties[g] = b.specialEasing && b.specialEasing[g] || b.easing || "swing"; if (h === "hide" && d || h === "show" && !d) { return b.complete.call(this) } c && (g === "height" || g === "width") && (b.overflow = [this.style.overflow, this.style.overflowX, this.style.overflowY], f.css(this, "display") === "inline" && f.css(this, "float") === "none" && (!f.support.inlineBlockNeedsLayout || cu(this.nodeName) === "inline" ? this.style.display = "inline-block" : this.style.zoom = 1)) } b.overflow != null && (this.style.overflow = "hidden");
for (i in a) { j = new f.fx(this, b, i), h = a[i], cm.test(h) ? (q = f._data(this, "toggle" + i) || (h === "toggle" ? d ? "show" : "hide" : 0), q ? (f._data(this, "toggle" + i, q === "show" ? "hide" : "show"), j[q]()) : j[h]()) : (m = cn.exec(h), n = j.cur(), m ? (o = parseFloat(m[2]), p = m[3] || (f.cssNumber[i] ? "" : "px"), p !== "px" && (f.style(this, i, (o || 1) + p), n = (o || 1) / j.cur() * n, f.style(this, i, n + p)), m[1] && (o = (m[1] === "-=" ? -1 : 1) * o + n), j.custom(n, o, p)) : j.custom(n, h, "")) }
return !0
}
var e = f.speed(b, c, d);
if (f.isEmptyObject(a)) { return this.each(e.complete, [!1]) } a = f.extend({}, a);
return e.queue === !1 ? this.each(g) : this.queue(e.queue, g)
},
stop: function(a, c, d) {
typeof a != "string" && (d = c, c = a, a = b), c && a !== !1 && this.queue(a || "fx", []);
return this.each(function() {
function h(a, b, c) {
var e = b[c];
f.removeData(a, c, !0), e.stop(d)
}
var b, c = !1,
e = f.timers,
g = f._data(this);
d || f._unmark(!0, this);
if (a == null) { for (b in g) { g[b] && g[b].stop && b.indexOf(".run") === b.length - 4 && h(this, g, b) } } else { g[b = a + ".run"] && g[b].stop && h(this, g, b) }
for (b = e.length; b--;) { e[b].elem === this && (a == null || e[b].queue === a) && (d ? e[b](!0) : e[b].saveState(), c = !0, e.splice(b, 1)) }(!d || !c) && f.dequeue(this, a)
})
}
}), f.each({ slideDown: ct("show", 1), slideUp: ct("hide", 1), slideToggle: ct("toggle", 1), fadeIn: { opacity: "show" }, fadeOut: { opacity: "hide" }, fadeToggle: { opacity: "toggle" } }, function(a, b) { f.fn[a] = function(a, c, d) { return this.animate(b, a, c, d) } }), f.extend({
speed: function(a, b, c) {
var d = a && typeof a == "object" ? f.extend({}, a) : { complete: c || !c && b || f.isFunction(a) && a, duration: a, easing: c && b || b && !f.isFunction(b) && b };
d.duration = f.fx.off ? 0 : typeof d.duration == "number" ? d.duration : d.duration in f.fx.speeds ? f.fx.speeds[d.duration] : f.fx.speeds._default;
if (d.queue == null || d.queue === !0) { d.queue = "fx" } d.old = d.complete, d.complete = function(a) { f.isFunction(d.old) && d.old.call(this), d.queue ? f.dequeue(this, d.queue) : a !== !1 && f._unmark(this) };
return d
},
easing: { linear: function(a) { return a }, swing: function(a) { return -Math.cos(a * Math.PI) / 2 + 0.5 } },
timers: [],
fx: function(a, b, c) { this.options = b, this.elem = a, this.prop = c, b.orig = b.orig || {} }
}), f.fx.prototype = {
update: function() { this.options.step && this.options.step.call(this.elem, this.now, this), (f.fx.step[this.prop] || f.fx.step._default)(this) },
cur: function() { if (this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null)) { return this.elem[this.prop] } var a, b = f.css(this.elem, this.prop); return isNaN(a = parseFloat(b)) ? !b || b === "auto" ? 0 : b : a },
custom: function(a, c, d) {
function h(a) { return e.step(a) }
var e = this,
g = f.fx;
this.startTime = cq || cr(), this.end = c, this.now = this.start = a, this.pos = this.state = 0, this.unit = d || this.unit || (f.cssNumber[this.prop] ? "" : "px"), h.queue = this.options.queue, h.elem = this.elem, h.saveState = function() { f._data(e.elem, "fxshow" + e.prop) === b && (e.options.hide ? f._data(e.elem, "fxshow" + e.prop, e.start) : e.options.show && f._data(e.elem, "fxshow" + e.prop, e.end)) }, h() && f.timers.push(h) && !co && (co = setInterval(g.tick, g.interval))
},
show: function() {
var a = f._data(this.elem, "fxshow" + this.prop);
this.options.orig[this.prop] = a || f.style(this.elem, this.prop), this.options.show = !0, a !== b ? this.custom(this.cur(), a) : this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur()), f(this.elem).show()
},
hide: function() { this.options.orig[this.prop] = f._data(this.elem, "fxshow" + this.prop) || f.style(this.elem, this.prop), this.options.hide = !0, this.custom(this.cur(), 0) },
step: function(a) {
var b, c, d, e = cq || cr(),
g = !0,
h = this.elem,
i = this.options;
if (a || e >= i.duration + this.startTime) { this.now = this.end, this.pos = this.state = 1, this.update(), i.animatedProperties[this.prop] = !0; for (b in i.animatedProperties) { i.animatedProperties[b] !== !0 && (g = !1) } if (g) { i.overflow != null && !f.support.shrinkWrapBlocks && f.each(["", "X", "Y"], function(a, b) { h.style["overflow" + b] = i.overflow[a] }), i.hide && f(h).hide(); if (i.hide || i.show) { for (b in i.animatedProperties) { f.style(h, b, i.orig[b]), f.removeData(h, "fxshow" + b, !0), f.removeData(h, "toggle" + b, !0) } } d = i.complete, d && (i.complete = !1, d.call(h)) } return !1 } i.duration == Infinity ? this.now = e : (c = e - this.startTime, this.state = c / i.duration, this.pos = f.easing[i.animatedProperties[this.prop]](this.state, c, 0, 1, i.duration), this.now = this.start + (this.end - this.start) * this.pos), this.update();
return !0
}
}, f.extend(f.fx, {
tick: function() {
var a, b = f.timers,
c = 0;
for (; c < b.length; c++) { a = b[c], !a() && b[c] === a && b.splice(c--, 1) } b.length || f.fx.stop()
},
interval: 13,
stop: function() { clearInterval(co), co = null },
speeds: { slow: 600, fast: 200, _default: 400 },
step: { opacity: function(a) { f.style(a.elem, "opacity", a.now) }, _default: function(a) { a.elem.style && a.elem.style[a.prop] != null ? a.elem.style[a.prop] = a.now + a.unit : a.elem[a.prop] = a.now } }
}), f.each(cp.concat.apply([], cp), function(a, b) { b.indexOf("margin") && (f.fx.step[b] = function(a) { f.style(a.elem, b, Math.max(0, a.now) + a.unit) }) }), f.expr && f.expr.filters && (f.expr.filters.animated = function(a) { return f.grep(f.timers, function(b) { return a === b.elem }).length });
var cv, cw = /^t(?:able|d|h)$/i,
cx = /^(?:body|html)$/i;
"getBoundingClientRect" in c.documentElement ? cv = function(a, b, c, d) {
try { d = a.getBoundingClientRect() } catch (e) {}
if (!d || !f.contains(c, a)) { return d ? { top: d.top, left: d.left } : { top: 0, left: 0 } }
var g = b.body,
h = cy(b),
i = c.clientTop || g.clientTop || 0,
j = c.clientLeft || g.clientLeft || 0,
k = h.pageYOffset || f.support.boxModel && c.scrollTop || g.scrollTop,
l = h.pageXOffset || f.support.boxModel && c.scrollLeft || g.scrollLeft,
m = d.top + k - i,
n = d.left + l - j;
return { top: m, left: n }
} : cv = function(a, b, c) {
var d, e = a.offsetParent,
g = a,
h = b.body,
i = b.defaultView,
j = i ? i.getComputedStyle(a, null) : a.currentStyle,
k = a.offsetTop,
l = a.offsetLeft;
while ((a = a.parentNode) && a !== h && a !== c) { if (f.support.fixedPosition && j.position === "fixed") { break } d = i ? i.getComputedStyle(a, null) : a.currentStyle, k -= a.scrollTop, l -= a.scrollLeft, a === e && (k += a.offsetTop, l += a.offsetLeft, f.support.doesNotAddBorder && (!f.support.doesAddBorderForTableAndCells || !cw.test(a.nodeName)) && (k += parseFloat(d.borderTopWidth) || 0, l += parseFloat(d.borderLeftWidth) || 0), g = e, e = a.offsetParent), f.support.subtractsBorderForOverflowNotVisible && d.overflow !== "visible" && (k += parseFloat(d.borderTopWidth) || 0, l += parseFloat(d.borderLeftWidth) || 0), j = d }
if (j.position === "relative" || j.position === "static") { k += h.offsetTop, l += h.offsetLeft } f.support.fixedPosition && j.position === "fixed" && (k += Math.max(c.scrollTop, h.scrollTop), l += Math.max(c.scrollLeft, h.scrollLeft));
return { top: k, left: l }
}, f.fn.offset = function(a) {
if (arguments.length) { return a === b ? this : this.each(function(b) { f.offset.setOffset(this, a, b) }) }
var c = this[0],
d = c && c.ownerDocument;
if (!d) { return null }
if (c === d.body) { return f.offset.bodyOffset(c) }
return cv(c, d, d.documentElement)
}, f.offset = {
bodyOffset: function(a) {
var b = a.offsetTop,
c = a.offsetLeft;
f.support.doesNotIncludeMarginInBodyOffset && (b += parseFloat(f.css(a, "marginTop")) || 0, c += parseFloat(f.css(a, "marginLeft")) || 0);
return { top: b, left: c }
},
setOffset: function(a, b, c) {
var d = f.css(a, "position");
d === "static" && (a.style.position = "relative");
var e = f(a),
g = e.offset(),
h = f.css(a, "top"),
i = f.css(a, "left"),
j = (d === "absolute" || d === "fixed") && f.inArray("auto", [h, i]) > -1,
k = {},
l = {},
m, n;
j ? (l = e.position(), m = l.top, n = l.left) : (m = parseFloat(h) || 0, n = parseFloat(i) || 0), f.isFunction(b) && (b = b.call(a, c, g)), b.top != null && (k.top = b.top - g.top + m), b.left != null && (k.left = b.left - g.left + n), "using" in b ? b.using.call(a, k) : e.css(k)
}
}, f.fn.extend({
position: function() {
if (!this[0]) { return null }
var a = this[0],
b = this.offsetParent(),
c = this.offset(),
d = cx.test(b[0].nodeName) ? { top: 0, left: 0 } : b.offset();
c.top -= parseFloat(f.css(a, "marginTop")) || 0, c.left -= parseFloat(f.css(a, "marginLeft")) || 0, d.top += parseFloat(f.css(b[0], "borderTopWidth")) || 0, d.left += parseFloat(f.css(b[0], "borderLeftWidth")) || 0;
return { top: c.top - d.top, left: c.left - d.left }
},
offsetParent: function() { return this.map(function() { var a = this.offsetParent || c.body; while (a && !cx.test(a.nodeName) && f.css(a, "position") === "static") { a = a.offsetParent } return a }) }
}), f.each({ scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function(a, c) {
var d = /Y/.test(c);
f.fn[a] = function(e) { return f.access(this, function(a, e, g) { var h = cy(a); if (g === b) { return h ? c in h ? h[c] : f.support.boxModel && h.document.documentElement[e] || h.document.body[e] : a[e] } h ? h.scrollTo(d ? f(h).scrollLeft() : g, d ? g : f(h).scrollTop()) : a[e] = g }, a, e, arguments.length, null) }
}), f.each({ Height: "height", Width: "width" }, function(a, c) {
var d = "client" + a,
e = "scroll" + a,
g = "offset" + a;
f.fn["inner" + a] = function() { var a = this[0]; return a ? a.style ? parseFloat(f.css(a, c, "padding")) : this[c]() : null }, f.fn["outer" + a] = function(a) { var b = this[0]; return b ? b.style ? parseFloat(f.css(b, c, a ? "margin" : "border")) : this[c]() : null }, f.fn[c] = function(a) { return f.access(this, function(a, c, h) { var i, j, k, l; if (f.isWindow(a)) { i = a.document, j = i.documentElement[d]; return f.support.boxModel && j || i.body && i.body[d] || j } if (a.nodeType === 9) { i = a.documentElement; if (i[d] >= i[e]) { return i[d] } return Math.max(a.body[e], i[e], a.body[g], i[g]) } if (h === b) { k = f.css(a, c), l = parseFloat(k); return f.isNumeric(l) ? l : k } f(a).css(c, h) }, c, a, arguments.length, null) }
}), a.jQuery = a.$ = f, typeof define == "function" && define.amd && define.amd.jQuery && define("jquery", [], function() { return f })
})(window);
(function(D) {
D.fn.qtip = function(a, h) {
var d, j, b, k, e, f, g, c;
if (typeof a == "string") { if (typeof D(this).data("qtip") !== "object") { D.fn.qtip.log.error.call(self, 1, D.fn.qtip.constants.NO_TOOLTIP_PRESENT, false) } if (a == "api") { return D(this).data("qtip").interfaces[D(this).data("qtip").current] } else { if (a == "interfaces") { return D(this).data("qtip").interfaces } } } else {
if (!a) { a = {} }
if (typeof a.content !== "object" || (a.content.jquery && a.content.length > 0)) { a.content = { text: a.content } }
if (typeof a.content.title !== "object") { a.content.title = { text: a.content.title } }
if (typeof a.position !== "object") { a.position = { corner: a.position } }
if (typeof a.position.corner !== "object") { a.position.corner = { target: a.position.corner, tooltip: a.position.corner } }
if (typeof a.show !== "object") { a.show = { when: a.show } }
if (typeof a.show.when !== "object") { a.show.when = { event: a.show.when } }
if (typeof a.show.effect !== "object") { a.show.effect = { type: a.show.effect } }
if (typeof a.hide !== "object") { a.hide = { when: a.hide } }
if (typeof a.hide.when !== "object") { a.hide.when = { event: a.hide.when } }
if (typeof a.hide.effect !== "object") { a.hide.effect = { type: a.hide.effect } }
if (typeof a.style !== "object") { a.style = { name: a.style } } a.style = G(a.style);
k = D.extend(true, {}, D.fn.qtip.defaults, a);
k.style = I.call({ options: k }, k.style);
k.user = D.extend(true, {}, a)
}
return D(this).each(function() {
if (typeof a == "string") {
f = a.toLowerCase();
b = D(this).qtip("interfaces");
if (typeof b == "object") { if (h === true && f == "destroy") { while (b.length > 0) { b[b.length - 1].destroy() } } else { if (h !== true) { b = [D(this).qtip("api")] } for (d = 0; d < b.length; d++) { if (f == "destroy") { b[d].destroy() } else { if (b[d].status.rendered === true) { if (f == "show") { b[d].show() } else { if (f == "hide") { b[d].hide() } else { if (f == "focus") { b[d].focus() } else { if (f == "disable") { b[d].disable(true) } else { if (f == "enable") { b[d].disable(false) } } } } } } } } } }
} else {
g = D.extend(true, {}, k);
g.hide.effect.length = k.hide.effect.length;
g.show.effect.length = k.show.effect.length;
if (g.position.container === false) { g.position.container = D(document.body) }
if (g.position.target === false) { g.position.target = D(this) }
if (g.show.when.target === false) { g.show.when.target = D(this) }
if (g.hide.when.target === false) { g.hide.when.target = D(this) } j = D.fn.qtip.interfaces.length;
for (d = 0; d < j; d++) { if (typeof D.fn.qtip.interfaces[d] == "undefined") { j = d; break } } e = new F(D(this), g, j);
D.fn.qtip.interfaces[j] = e;
if (typeof D(this).data("qtip") == "object") { if (typeof D(this).attr("qtip") === "undefined") { D(this).data("qtip").current = D(this).data("qtip").interfaces.length } D(this).data("qtip").interfaces.push(e) } else { D(this).data("qtip", { current: 0, interfaces: [e] }) }
if (g.content.prerender === false && g.show.when.event !== false && g.show.ready !== true) {
g.show.when.target.bind(g.show.when.event + ".qtip-" + j + "-create", { qtip: j }, function(l) {
c = D.fn.qtip.interfaces[l.data.qtip];
c.options.show.when.target.unbind(c.options.show.when.event + ".qtip-" + l.data.qtip + "-create");
c.cache.mouse = { x: l.pageX, y: l.pageY };
u.call(c);
c.options.show.when.target.trigger(c.options.show.when.event)
})
} else {
e.cache.mouse = { x: g.show.when.target.offset().left, y: g.show.when.target.offset().top };
u.call(e)
}
}
})
};
function F(b, c, a) {
var d = this;
d.id = a;
d.options = c;
d.status = { animated: false, rendered: false, disabled: false, focused: false };
d.elements = { target: b.addClass(d.options.style.classes.target), tooltip: null, wrapper: null, content: null, contentWrapper: null, title: null, button: null, tip: null, bgiframe: null };
d.cache = { mouse: {}, position: {}, toggle: 0 };
d.timers = {};
D.extend(d, d.options.api, {
show: function(h) {
var e, g;
if (!d.status.rendered) { return D.fn.qtip.log.error.call(d, 2, D.fn.qtip.constants.TOOLTIP_NOT_RENDERED, "show") }
if (d.elements.tooltip.css("display") !== "none") { return d } d.elements.tooltip.stop(true, false);
e = d.beforeShow.call(d, h);
if (e === false) { return d }
function f() { if (d.options.position.type !== "static") { d.focus() } d.onShow.call(d, h); if (D.browser.msie) { d.elements.tooltip.get(0).style.removeAttribute("filter") } } d.cache.toggle = 1;
if (d.options.position.type !== "static") { d.updatePosition(h, (d.options.show.effect.length > 0)) }
if (typeof d.options.show.solo == "object") { g = D(d.options.show.solo) } else { if (d.options.show.solo === true) { g = D("div.qtip").not(d.elements.tooltip) } }
if (g) { g.each(function() { if (D(this).qtip("api").status.rendered === true) { D(this).qtip("api").hide() } }) }
if (typeof d.options.show.effect.type == "function") {
d.options.show.effect.type.call(d.elements.tooltip, d.options.show.effect.length);
d.elements.tooltip.queue(function() {
f();
D(this).dequeue()
})
} else {
switch (d.options.show.effect.type.toLowerCase()) {
case "fade":
d.elements.tooltip.fadeIn(d.options.show.effect.length, f);
break;
case "slide":
d.elements.tooltip.slideDown(d.options.show.effect.length, function() { f(); if (d.options.position.type !== "static") { d.updatePosition(h, true) } });
break;
case "grow":
d.elements.tooltip.show(d.options.show.effect.length, f);
break;
default:
d.elements.tooltip.show(null, f);
break
}
d.elements.tooltip.addClass(d.options.style.classes.active)
}
return D.fn.qtip.log.error.call(d, 1, D.fn.qtip.constants.EVENT_SHOWN, "show")
},
hide: function(g) {
var e;
if (!d.status.rendered) { return D.fn.qtip.log.error.call(d, 2, D.fn.qtip.constants.TOOLTIP_NOT_RENDERED, "hide") } else { if (d.elements.tooltip.css("display") === "none") { return d } } clearTimeout(d.timers.show);
d.elements.tooltip.stop(true, false);
e = d.beforeHide.call(d, g);
if (e === false) { return d }
function f() { d.onHide.call(d, g) } d.cache.toggle = 0;
if (typeof d.options.hide.effect.type == "function") {
d.options.hide.effect.type.call(d.elements.tooltip, d.options.hide.effect.length);
d.elements.tooltip.queue(function() {
f();
D(this).dequeue()
})
} else {
switch (d.options.hide.effect.type.toLowerCase()) {
case "fade":
d.elements.tooltip.fadeOut(d.options.hide.effect.length, f);
break;
case "slide":
d.elements.tooltip.slideUp(d.options.hide.effect.length, f);
break;
case "grow":
d.elements.tooltip.hide(d.options.hide.effect.length, f);
break;
default:
d.elements.tooltip.hide(null, f);
break
}
d.elements.tooltip.removeClass(d.options.style.classes.active)
}
return D.fn.qtip.log.error.call(d, 1, D.fn.qtip.constants.EVENT_HIDDEN, "hide")
},
updatePosition: function(q, o) {
var f, M, k, n, r, O, m, p, g, e, l, h, N, j;
if (!d.status.rendered) { return D.fn.qtip.log.error.call(d, 2, D.fn.qtip.constants.TOOLTIP_NOT_RENDERED, "updatePosition") } else { if (d.options.position.type == "static") { return D.fn.qtip.log.error.call(d, 1, D.fn.qtip.constants.CANNOT_POSITION_STATIC, "updatePosition") } } M = { position: { left: 0, top: 0 }, dimensions: { height: 0, width: 0 }, corner: d.options.position.corner.target };
k = { position: d.getPosition(), dimensions: d.getDimensions(), corner: d.options.position.corner.tooltip };
if (d.options.position.target !== "mouse") {
if (d.options.position.target.get(0).nodeName.toLowerCase() == "area") {
n = d.options.position.target.attr("coords").split(",");
for (f = 0; f < n.length; f++) { n[f] = parseInt(n[f]) } r = d.options.position.target.parent("map").attr("name");
O = D('img[usemap="#' + r + '"]:first').offset();
M.position = { left: Math.floor(O.left + n[0]), top: Math.floor(O.top + n[1]) };
switch (d.options.position.target.attr("shape").toLowerCase()) {
case "rect":
M.dimensions = { width: Math.ceil(Math.abs(n[2] - n[0])), height: Math.ceil(Math.abs(n[3] - n[1])) };
break;
case "circle":
M.dimensions = { width: n[2] + 1, height: n[2] + 1 };
break;
case "poly":
M.dimensions = { width: n[0], height: n[1] };
for (f = 0; f < n.length; f++) { if (f % 2 == 0) { if (n[f] > M.dimensions.width) { M.dimensions.width = n[f] } if (n[f] < n[0]) { M.position.left = Math.floor(O.left + n[f]) } } else { if (n[f] > M.dimensions.height) { M.dimensions.height = n[f] } if (n[f] < n[1]) { M.position.top = Math.floor(O.top + n[f]) } } } M.dimensions.width = M.dimensions.width - (M.position.left - O.left);
M.dimensions.height = M.dimensions.height - (M.position.top - O.top);
break;
default:
return D.fn.qtip.log.error.call(d, 4, D.fn.qtip.constants.INVALID_AREA_SHAPE, "updatePosition");
break
}
M.dimensions.width -= 2;
M.dimensions.height -= 2
} else {
if (d.options.position.target.add(document.body).length === 1) {
M.position = { left: D(document).scrollLeft(), top: D(document).scrollTop() };
M.dimensions = { height: D(window).height(), width: D(window).width() }
} else { if (typeof d.options.position.target.attr("qtip") !== "undefined") { M.position = d.options.position.target.qtip("api").cache.position } else { M.position = d.options.position.target.offset() } M.dimensions = { height: d.options.position.target.outerHeight(), width: d.options.position.target.outerWidth() } }
}
m = D.extend({}, M.position);
if (M.corner.search(/right/i) !== -1) { m.left += M.dimensions.width }
if (M.corner.search(/bottom/i) !== -1) { m.top += M.dimensions.height }
if (M.corner.search(/((top|bottom)Middle)|center/) !== -1) { m.left += (M.dimensions.width / 2) }
if (M.corner.search(/((left|right)Middle)|center/) !== -1) { m.top += (M.dimensions.height / 2) }
} else {
M.position = m = { left: d.cache.mouse.x, top: d.cache.mouse.y };
M.dimensions = { height: 1, width: 1 }
}
if (k.corner.search(/right/i) !== -1) { m.left -= k.dimensions.width }
if (k.corner.search(/bottom/i) !== -1) { m.top -= k.dimensions.height }
if (k.corner.search(/((top|bottom)Middle)|center/) !== -1) { m.left -= (k.dimensions.width / 2) }
if (k.corner.search(/((left|right)Middle)|center/) !== -1) { m.top -= (k.dimensions.height / 2) } p = (D.browser.msie) ? 1 : 0;
g = (D.browser.msie && parseInt(D.browser.version.charAt(0)) === 6) ? 1 : 0;
if (d.options.style.border.radius > 0) { if (k.corner.search(/Left/) !== -1) { m.left -= d.options.style.border.radius } else { if (k.corner.search(/Right/) !== -1) { m.left += d.options.style.border.radius } } if (k.corner.search(/Top/) !== -1) { m.top -= d.options.style.border.radius } else { if (k.corner.search(/Bottom/) !== -1) { m.top += d.options.style.border.radius } } }
if (p) { if (k.corner.search(/top/) !== -1) { m.top -= p } else { if (k.corner.search(/bottom/) !== -1) { m.top += p } } if (k.corner.search(/left/) !== -1) { m.left -= p } else { if (k.corner.search(/right/) !== -1) { m.left += p } } if (k.corner.search(/leftMiddle|rightMiddle/) !== -1) { m.top -= 1 } }
if (d.options.position.adjust.screen === true) { m = v.call(d, m, M, k) }
if (d.options.position.target === "mouse" && d.options.position.adjust.mouse === true) {
if (d.options.position.adjust.screen === true && d.elements.tip) { l = d.elements.tip.attr("rel") } else { l = d.options.position.corner.tooltip } m.left += (l.search(/right/i) !== -1) ? -6 : 6;
m.top += (l.search(/bottom/i) !== -1) ? -6 : 6
}
if (!d.elements.bgiframe && D.browser.msie && parseInt(D.browser.version.charAt(0)) == 6) {
D("select, object").each(function() {
h = D(this).offset();
h.bottom = h.top + D(this).height();
h.right = h.left + D(this).width();
if (m.top + k.dimensions.height >= h.top && m.left + k.dimensions.width >= h.left) { z.call(d) }
})
}
m.left += d.options.position.adjust.x;
m.top += d.options.position.adjust.y;
N = d.getPosition();
if (m.left != N.left || m.top != N.top) {
j = d.beforePositionUpdate.call(d, q);
if (j === false) { return d } d.cache.position = m;
if (o === true) {
d.status.animated = true;
d.elements.tooltip.animate(m, 200, "swing", function() { d.status.animated = false })
} else { d.elements.tooltip.css(m) } d.onPositionUpdate.call(d, q);
if (typeof q !== "undefined" && q.type && q.type !== "mousemove") { D.fn.qtip.log.error.call(d, 1, D.fn.qtip.constants.EVENT_POSITION_UPDATED, "updatePosition") }
}
return d
},
updateWidth: function(f) {
var e;
if (!d.status.rendered) { return D.fn.qtip.log.error.call(d, 2, D.fn.qtip.constants.TOOLTIP_NOT_RENDERED, "updateWidth") } else { if (f && typeof f !== "number") { return D.fn.qtip.log.error.call(d, 2, "newWidth must be of type number", "updateWidth") } } e = d.elements.contentWrapper.siblings().add(d.elements.tip).add(d.elements.button);
if (!f) {
if (typeof d.options.style.width.value == "number") { f = d.options.style.width.value } else {
d.elements.tooltip.css({ width: "auto" });
e.hide();
if (D.browser.msie) { d.elements.wrapper.add(d.elements.contentWrapper.children()).css({ zoom: "normal" }) } f = d.getDimensions().width + 1;
if (!d.options.style.width.value) { if (f > d.options.style.width.max) { f = d.options.style.width.max } if (f < d.options.style.width.min) { f = d.options.style.width.min } }
}
}
if (f % 2 !== 0) { f -= 1 } d.elements.tooltip.width(f);
e.show();
if (d.options.style.border.radius) { d.elements.tooltip.find(".qtip-betweenCorners").each(function(g) { D(this).width(f - (d.options.style.border.radius * 2)) }) }
if (D.browser.msie) {
d.elements.wrapper.add(d.elements.contentWrapper.children()).css({ zoom: "1" });
d.elements.wrapper.width(f);
if (d.elements.bgiframe) { d.elements.bgiframe.width(f).height(d.getDimensions.height) }
}
return D.fn.qtip.log.error.call(d, 1, D.fn.qtip.constants.EVENT_WIDTH_UPDATED, "updateWidth")
},
updateStyle: function(g) {
var h, f, e, k, j;
if (!d.status.rendered) { return D.fn.qtip.log.error.call(d, 2, D.fn.qtip.constants.TOOLTIP_NOT_RENDERED, "updateStyle") } else { if (typeof g !== "string" || !D.fn.qtip.styles[g]) { return D.fn.qtip.log.error.call(d, 2, D.fn.qtip.constants.STYLE_NOT_DEFINED, "updateStyle") } } d.options.style = I.call(d, D.fn.qtip.styles[g], d.options.user.style);
d.elements.content.css(t(d.options.style));
if (d.options.content.title.text !== false) { d.elements.title.css(t(d.options.style.title, true)) } d.elements.contentWrapper.css({ borderColor: d.options.style.border.color });
if (d.options.style.tip.corner !== false) {
if (D("<canvas>").get(0).getContext) {
h = d.elements.tooltip.find(".qtip-tip canvas:first");
e = h.get(0).getContext("2d");
e.clearRect(0, 0, 300, 300);
k = h.parent("div[rel]:first").attr("rel");
j = H(k, d.options.style.tip.size.width, d.options.style.tip.size.height);
B.call(d, h, j, d.options.style.tip.color || d.options.style.border.color)
} else {
if (D.browser.msie) {
h = d.elements.tooltip.find('.qtip-tip [nodeName="shape"]');
h.attr("fillcolor", d.options.style.tip.color || d.options.style.border.color)
}
}
}
if (d.options.style.border.radius > 0) {
d.elements.tooltip.find(".qtip-betweenCorners").css({ backgroundColor: d.options.style.border.color });
if (D("<canvas>").get(0).getContext) {
f = C(d.options.style.border.radius);
d.elements.tooltip.find(".qtip-wrapper canvas").each(function() {
e = D(this).get(0).getContext("2d");
e.clearRect(0, 0, 300, 300);
k = D(this).parent("div[rel]:first").attr("rel");
s.call(d, D(this), f[k], d.options.style.border.radius, d.options.style.border.color)
})
} else { if (D.browser.msie) { d.elements.tooltip.find('.qtip-wrapper [nodeName="arc"]').each(function() { D(this).attr("fillcolor", d.options.style.border.color) }) } }
}
return D.fn.qtip.log.error.call(d, 1, D.fn.qtip.constants.EVENT_STYLE_UPDATED, "updateStyle")
},
updateContent: function(f, k) {
var h, e, g;
if (!d.status.rendered) { return D.fn.qtip.log.error.call(d, 2, D.fn.qtip.constants.TOOLTIP_NOT_RENDERED, "updateContent") } else { if (!f) { return D.fn.qtip.log.error.call(d, 2, D.fn.qtip.constants.NO_CONTENT_PROVIDED, "updateContent") } } h = d.beforeContentUpdate.call(d, f);
if (typeof h == "string") { f = h } else { if (h === false) { return } }
if (D.browser.msie) { d.elements.contentWrapper.children().css({ zoom: "normal" }) }
if (f.jquery && f.length > 0) { f.clone(true).appendTo(d.elements.content).show() } else { d.elements.content.html(f) } e = d.elements.content.find("img[complete=false]");
if (e.length > 0) {
g = 0;
e.each(function(l) { D('<img src="' + D(this).attr("src") + '" />').load(function() { if (++g == e.length) { j() } }) })
} else { j() }
function j() { d.updateWidth(); if (k !== false) { if (d.options.position.type !== "static") { d.updatePosition(d.elements.tooltip.is(":visible"), true) } if (d.options.style.tip.corner !== false) { w.call(d) } } } d.onContentUpdate.call(d);
return D.fn.qtip.log.error.call(d, 1, D.fn.qtip.constants.EVENT_CONTENT_UPDATED, "loadContent")
},
loadContent: function(g, h, f) {
var j;
if (!d.status.rendered) { return D.fn.qtip.log.error.call(d, 2, D.fn.qtip.constants.TOOLTIP_NOT_RENDERED, "loadContent") } j = d.beforeContentLoad.call(d);
if (j === false) { return d }
if (f == "post") { D.post(g, h, e) } else { D.get(g, h, e) }
function e(k) {
d.onContentLoad.call(d);
D.fn.qtip.log.error.call(d, 1, D.fn.qtip.constants.EVENT_CONTENT_LOADED, "loadContent");
d.updateContent(k)
}
return d
},
updateTitle: function(e) { if (!d.status.rendered) { return D.fn.qtip.log.error.call(d, 2, D.fn.qtip.constants.TOOLTIP_NOT_RENDERED, "updateTitle") } else { if (!e) { return D.fn.qtip.log.error.call(d, 2, D.fn.qtip.constants.NO_CONTENT_PROVIDED, "updateTitle") } } returned = d.beforeTitleUpdate.call(d); if (returned === false) { return d } if (d.elements.button) { d.elements.button = d.elements.button.clone(true) } d.elements.title.html(e); if (d.elements.button) { d.elements.title.prepend(d.elements.button) } d.onTitleUpdate.call(d); return D.fn.qtip.log.error.call(d, 1, D.fn.qtip.constants.EVENT_TITLE_UPDATED, "updateTitle") },
focus: function(f) {
var j, e, g, h;
if (!d.status.rendered) { return D.fn.qtip.log.error.call(d, 2, D.fn.qtip.constants.TOOLTIP_NOT_RENDERED, "focus") } else { if (d.options.position.type == "static") { return D.fn.qtip.log.error.call(d, 1, D.fn.qtip.constants.CANNOT_FOCUS_STATIC, "focus") } } j = parseInt(d.elements.tooltip.css("z-index"));
e = 6000 + D("div.qtip[qtip]").length - 1;
if (!d.status.focused && j !== e) {
h = d.beforeFocus.call(d, f);
if (h === false) { return d } D("div.qtip[qtip]").not(d.elements.tooltip).each(function() { if (D(this).qtip("api").status.rendered === true) { g = parseInt(D(this).css("z-index")); if (typeof g == "number" && g > -1) { D(this).css({ zIndex: parseInt(D(this).css("z-index")) - 1 }) } D(this).qtip("api").status.focused = false } });
d.elements.tooltip.css({ zIndex: e });
d.status.focused = true;
d.onFocus.call(d, f);
D.fn.qtip.log.error.call(d, 1, D.fn.qtip.constants.EVENT_FOCUSED, "focus")
}
return d
},
disable: function(e) {
if (!d.status.rendered) { return D.fn.qtip.log.error.call(d, 2, D.fn.qtip.constants.TOOLTIP_NOT_RENDERED, "disable") }
if (e) {
if (!d.status.disabled) {
d.status.disabled = true;
D.fn.qtip.log.error.call(d, 1, D.fn.qtip.constants.EVENT_DISABLED, "disable")
} else { D.fn.qtip.log.error.call(d, 1, D.fn.qtip.constants.TOOLTIP_ALREADY_DISABLED, "disable") }
} else {
if (d.status.disabled) {
d.status.disabled = false;
D.fn.qtip.log.error.call(d, 1, D.fn.qtip.constants.EVENT_ENABLED, "disable")
} else { D.fn.qtip.log.error.call(d, 1, D.fn.qtip.constants.TOOLTIP_ALREADY_ENABLED, "disable") }
}
return d
},
destroy: function() {
var f, e, g;
e = d.beforeDestroy.call(d);
if (e === false) { return d }
if (d.status.rendered) {
d.options.show.when.target.unbind("mousemove.qtip", d.updatePosition);
d.options.show.when.target.unbind("mouseout.qtip", d.hide);
d.options.show.when.target.unbind(d.options.show.when.event + ".qtip");
d.options.hide.when.target.unbind(d.options.hide.when.event + ".qtip");
d.elements.tooltip.unbind(d.options.hide.when.event + ".qtip");
d.elements.tooltip.unbind("mouseover.qtip", d.focus);
d.elements.tooltip.remove()
} else { d.options.show.when.target.unbind(d.options.show.when.event + ".qtip-create") }
if (typeof d.elements.target.data("qtip") == "object") { g = d.elements.target.data("qtip").interfaces; if (typeof g == "object" && g.length > 0) { for (f = 0; f < g.length - 1; f++) { if (g[f].id == d.id) { g.splice(f, 1) } } } } delete D.fn.qtip.interfaces[d.id];
if (typeof g == "object" && g.length > 0) { d.elements.target.data("qtip").current = g.length - 1 } else { d.elements.target.removeData("qtip") } d.onDestroy.call(d);
D.fn.qtip.log.error.call(d, 1, D.fn.qtip.constants.EVENT_DESTROYED, "destroy");
return d.elements.target
},
getPosition: function() { var f, e; if (!d.status.rendered) { return D.fn.qtip.log.error.call(d, 2, D.fn.qtip.constants.TOOLTIP_NOT_RENDERED, "getPosition") } f = (d.elements.tooltip.css("display") !== "none") ? false : true; if (f) { d.elements.tooltip.css({ visiblity: "hidden" }).show() } e = d.elements.tooltip.offset(); if (f) { d.elements.tooltip.css({ visiblity: "visible" }).hide() } return e },
getDimensions: function() { var f, e; if (!d.status.rendered) { return D.fn.qtip.log.error.call(d, 2, D.fn.qtip.constants.TOOLTIP_NOT_RENDERED, "getDimensions") } f = (!d.elements.tooltip.is(":visible")) ? true : false; if (f) { d.elements.tooltip.css({ visiblity: "hidden" }).show() } e = { height: d.elements.tooltip.outerHeight(), width: d.elements.tooltip.outerWidth() }; if (f) { d.elements.tooltip.css({ visiblity: "visible" }).hide() } return e }
})
}
function u() {
var f, b, d, e, c, g, a;
f = this;
f.beforeRender.call(f);
f.status.rendered = true;
f.elements.tooltip = '<div qtip="' + f.id + '" class="qtip ' + (f.options.style.classes.tooltip || f.options.style) + '"style="display:none; -moz-border-radius:0; -webkit-border-radius:0; border-radius:0;position:' + f.options.position.type + ';"> <div class="qtip-wrapper" style="position:relative; overflow:hidden; text-align:left;"> <div class="qtip-contentWrapper" style="overflow:hidden;"> <div class="qtip-content ' + f.options.style.classes.content + '"></div></div></div></div>';
f.elements.tooltip = D(f.elements.tooltip);
f.elements.tooltip.appendTo(f.options.position.container);
f.elements.tooltip.data("qtip", { current: 0, interfaces: [f] });
f.elements.wrapper = f.elements.tooltip.children("div:first");
f.elements.contentWrapper = f.elements.wrapper.children("div:first").css({ background: f.options.style.background });
f.elements.content = f.elements.contentWrapper.children("div:first").css(t(f.options.style));
if (D.browser.msie) { f.elements.wrapper.add(f.elements.content).css({ zoom: 1 }) }
if (f.options.hide.when.event == "unfocus") { f.elements.tooltip.attr("unfocus", true) }
if (typeof f.options.style.width.value == "number") { f.updateWidth() }
if (D("<canvas>").get(0).getContext || D.browser.msie) { if (f.options.style.border.radius > 0) { x.call(f) } else { f.elements.contentWrapper.css({ border: f.options.style.border.width + "px solid " + f.options.style.border.color }) } if (f.options.style.tip.corner !== false) { E.call(f) } } else {
f.elements.contentWrapper.css({ border: f.options.style.border.width + "px solid " + f.options.style.border.color });
f.options.style.border.radius = 0;
f.options.style.tip.corner = false;
D.fn.qtip.log.error.call(f, 2, D.fn.qtip.constants.CANVAS_VML_NOT_SUPPORTED, "render")
}
if ((typeof f.options.content.text == "string" && f.options.content.text.length > 0) || (f.options.content.text.jquery && f.options.content.text.length > 0)) { d = f.options.content.text } else {
if (typeof f.elements.target.attr("title") == "string" && f.elements.target.attr("title").length > 0) {
d = f.elements.target.attr("title").replace("\\n", "<br />");
f.elements.target.attr("title", "")
} else {
if (typeof f.elements.target.attr("alt") == "string" && f.elements.target.attr("alt").length > 0) {
d = f.elements.target.attr("alt").replace("\\n", "<br />");
f.elements.target.attr("alt", "")
} else {
d = " ";
D.fn.qtip.log.error.call(f, 1, D.fn.qtip.constants.NO_VALID_CONTENT, "render")
}
}
}
if (f.options.content.title.text !== false) { A.call(f) } f.updateContent(d);
y.call(f);
if (f.options.show.ready === true) { f.show() }
if (f.options.content.url !== false) {
e = f.options.content.url;
c = f.options.content.data;
g = f.options.content.method || "get";
f.loadContent(e, c, g)
}
f.onRender.call(f);
D.fn.qtip.log.error.call(f, 1, D.fn.qtip.constants.EVENT_RENDERED, "render")
}
function x() {
var m, e, n, c, g, p, l, k, a, f, h, b, d, o, j;
m = this;
m.elements.wrapper.find(".qtip-borderBottom, .qtip-borderTop").remove();
n = m.options.style.border.width;
c = m.options.style.border.radius;
g = m.options.style.border.color || m.options.style.tip.color;
p = C(c);
l = {};
for (e in p) {
l[e] = '<div rel="' + e + '" style="' + ((e.search(/Left/) !== -1) ? "left" : "right") + ":0; position:absolute; height:" + c + "px; width:" + c + 'px; overflow:hidden; line-height:0.1px; font-size:1px">';
if (D("<canvas>").get(0).getContext) { l[e] += '<canvas height="' + c + '" width="' + c + '" style="vertical-align: top"></canvas>' } else {
if (D.browser.msie) {
k = c * 2 + 3;
l[e] += '<v:arc stroked="false" fillcolor="' + g + '" startangle="' + p[e][0] + '" endangle="' + p[e][1] + '" style="width:' + k + "px; height:" + k + "px; margin-top:" + ((e.search(/bottom/) !== -1) ? -2 : -1) + "px; margin-left:" + ((e.search(/Right/) !== -1) ? p[e][2] - 3.5 : -1) + 'px; vertical-align:top; display:inline-block; behavior:url(#default#VML)"></v:arc>'
}
}
l[e] += "</div>"
}
a = m.getDimensions().width - (Math.max(n, c) * 2);
f = '<div class="qtip-betweenCorners" style="height:' + c + "px; width:" + a + "px; overflow:hidden; background-color:" + g + '; line-height:0.1px; font-size:1px;">';
h = '<div class="qtip-borderTop" dir="ltr" style="height:' + c + "px; margin-left:" + c + 'px; line-height:0.1px; font-size:1px; padding:0;">' + l.topLeft + l.topRight + f;
m.elements.wrapper.prepend(h);
b = '<div class="qtip-borderBottom" dir="ltr" style="height:' + c + "px; margin-left:" + c + 'px; line-height:0.1px; font-size:1px; padding:0;">' + l.bottomLeft + l.bottomRight + f;
m.elements.wrapper.append(b);
if (D("<canvas>").get(0).getContext) {
m.elements.wrapper.find("canvas").each(function() {
d = p[D(this).parent("[rel]:first").attr("rel")];
s.call(m, D(this), d, c, g)
})
} else { if (D.browser.msie) { m.elements.tooltip.append('<v:image style="behavior:url(#default#VML);"></v:image>') } } o = Math.max(c, (c + (n - c)));
j = Math.max(n - c, 0);
m.elements.contentWrapper.css({ border: "0px solid " + g, borderWidth: j + "px " + o + "px" })
}
function s(c, a, e, d) {
var b = c.get(0).getContext("2d");
b.fillStyle = d;
b.beginPath();
b.arc(a[0], a[1], e, 0, Math.PI * 2, false);
b.fill()
}
function E(c) {
var e, f, a, d, b;
e = this;
if (e.elements.tip !== null) { e.elements.tip.remove() } f = e.options.style.tip.color || e.options.style.border.color;
if (e.options.style.tip.corner === false) { return } else { if (!c) { c = e.options.style.tip.corner } } a = H(c, e.options.style.tip.size.width, e.options.style.tip.size.height);
e.elements.tip = '<div class="' + e.options.style.classes.tip + '" dir="ltr" rel="' + c + '" style="position:absolute; height:' + e.options.style.tip.size.height + "px; width:" + e.options.style.tip.size.width + 'px; margin:0 auto; line-height:0.1px; font-size:1px;">';
if (D("<canvas>").get(0).getContext) { e.elements.tip += '<canvas height="' + e.options.style.tip.size.height + '" width="' + e.options.style.tip.size.width + '"></canvas>' } else {
if (D.browser.msie) {
d = e.options.style.tip.size.width + "," + e.options.style.tip.size.height;
b = "m" + a[0][0] + "," + a[0][1];
b += " l" + a[1][0] + "," + a[1][1];
b += " " + a[2][0] + "," + a[2][1];
b += " xe";
e.elements.tip += '<v:shape fillcolor="' + f + '" stroked="false" filled="true" path="' + b + '" coordsize="' + d + '" style="width:' + e.options.style.tip.size.width + "px; height:" + e.options.style.tip.size.height + "px; line-height:0.1px; display:inline-block; behavior:url(#default#VML); vertical-align:" + ((c.search(/top/) !== -1) ? "bottom" : "top") + '"></v:shape>';
e.elements.tip += '<v:image style="behavior:url(#default#VML);"></v:image>';
e.elements.contentWrapper.css("position", "relative")
}
}
e.elements.tooltip.prepend(e.elements.tip + "</div>");
e.elements.tip = e.elements.tooltip.find("." + e.options.style.classes.tip).eq(0);
if (D("<canvas>").get(0).getContext) { B.call(e, e.elements.tip.find("canvas:first"), a, f) }
if (c.search(/top/) !== -1 && D.browser.msie && parseInt(D.browser.version.charAt(0)) === 6) { e.elements.tip.css({ marginTop: -4 }) } w.call(e, c)
}
function B(c, a, d) {
var b = c.get(0).getContext("2d");
b.fillStyle = d;
b.beginPath();
b.moveTo(a[0][0], a[0][1]);
b.lineTo(a[1][0], a[1][1]);
b.lineTo(a[2][0], a[2][1]);
b.fill()
}
function w(d) {
var e, b, f, a, c;
e = this;
if (e.options.style.tip.corner === false || !e.elements.tip) { return }
if (!d) { d = e.elements.tip.attr("rel") } b = positionAdjust = (D.browser.msie) ? 1 : 0;
e.elements.tip.css(d.match(/left|right|top|bottom/)[0], 0);
if (d.search(/top|bottom/) !== -1) { if (D.browser.msie) { if (parseInt(D.browser.version.charAt(0)) === 6) { positionAdjust = (d.search(/top/) !== -1) ? -3 : 1 } else { positionAdjust = (d.search(/top/) !== -1) ? 1 : 2 } } if (d.search(/Middle/) !== -1) { e.elements.tip.css({ left: "50%", marginLeft: -(e.options.style.tip.size.width / 2) }) } else { if (d.search(/Left/) !== -1) { e.elements.tip.css({ left: e.options.style.border.radius - b }) } else { if (d.search(/Right/) !== -1) { e.elements.tip.css({ right: e.options.style.border.radius + b }) } } } if (d.search(/top/) !== -1) { e.elements.tip.css({ top: -positionAdjust }) } else { e.elements.tip.css({ bottom: positionAdjust }) } } else { if (d.search(/left|right/) !== -1) { if (D.browser.msie) { positionAdjust = (parseInt(D.browser.version.charAt(0)) === 6) ? 1 : ((d.search(/left/) !== -1) ? 1 : 2) } if (d.search(/Middle/) !== -1) { e.elements.tip.css({ top: "50%", marginTop: -(e.options.style.tip.size.height / 2) }) } else { if (d.search(/Top/) !== -1) { e.elements.tip.css({ top: e.options.style.border.radius - b }) } else { if (d.search(/Bottom/) !== -1) { e.elements.tip.css({ bottom: e.options.style.border.radius + b }) } } } if (d.search(/left/) !== -1) { e.elements.tip.css({ left: -positionAdjust }) } else { e.elements.tip.css({ right: positionAdjust }) } } } f = "padding-" + d.match(/left|right|top|bottom/)[0];
a = e.options.style.tip.size[(f.search(/left|right/) !== -1) ? "width" : "height"];
e.elements.tooltip.css("padding", 0);
e.elements.tooltip.css(f, a);
if (D.browser.msie && parseInt(D.browser.version.charAt(0)) == 6) {
c = parseInt(e.elements.tip.css("margin-top")) || 0;
c += parseInt(e.elements.content.css("margin-top")) || 0;
e.elements.tip.css({ marginTop: c })
}
}
function A() { var a = this; if (a.elements.title !== null) { a.elements.title.remove() } a.elements.title = D('<div class="' + a.options.style.classes.title + '">').css(t(a.options.style.title, true)).css({ zoom: (D.browser.msie) ? 1 : 0 }).prependTo(a.elements.contentWrapper); if (a.options.content.title.text) { a.updateTitle.call(a, a.options.content.title.text) } if (a.options.content.title.button !== false && typeof a.options.content.title.button == "string") { a.elements.button = D('<a class="' + a.options.style.classes.button + '" style="float:right; position: relative"></a>').css(t(a.options.style.button, true)).html(a.options.content.title.button).prependTo(a.elements.title).click(function(b) { if (!a.status.disabled) { a.hide(b) } }) } }
function y() {
var e, c, d, f;
e = this;
c = e.options.show.when.target;
d = e.options.hide.when.target;
if (e.options.hide.fixed) { d = d.add(e.elements.tooltip) }
if (e.options.hide.when.event == "inactive") {
f = ["click", "dblclick", "mousedown", "mouseup", "mousemove", "mouseout", "mouseenter", "mouseleave", "mouseover"];
function g(h) {
if (e.status.disabled === true) { return } clearTimeout(e.timers.inactive);
e.timers.inactive = setTimeout(function() {
D(f).each(function() {
d.unbind(this + ".qtip-inactive");
e.elements.content.unbind(this + ".qtip-inactive")
});
e.hide(h)
}, e.options.hide.delay)
}
} else { if (e.options.hide.fixed === true) { e.elements.tooltip.bind("mouseover.qtip", function() { if (e.status.disabled === true) { return } clearTimeout(e.timers.hide) }) } }
function a(h) {
if (e.status.disabled === true) { return }
if (e.options.hide.when.event == "inactive") {
D(f).each(function() {
d.bind(this + ".qtip-inactive", g);
e.elements.content.bind(this + ".qtip-inactive", g)
});
g()
}
clearTimeout(e.timers.show);
clearTimeout(e.timers.hide);
e.timers.show = setTimeout(function() { e.show(h) }, e.options.show.delay)
}
function b(h) {
if (e.status.disabled === true) { return }
if (e.options.hide.fixed === true && e.options.hide.when.event.search(/mouse(out|leave)/i) !== -1 && D(h.relatedTarget).parents("div.qtip[qtip]").length > 0) {
h.stopPropagation();
h.preventDefault();
clearTimeout(e.timers.hide);
return false
}
clearTimeout(e.timers.show);
clearTimeout(e.timers.hide);
e.elements.tooltip.stop(true, true);
e.timers.hide = setTimeout(function() { e.hide(h) }, e.options.hide.delay)
}
if ((e.options.show.when.target.add(e.options.hide.when.target).length === 1 && e.options.show.when.event == e.options.hide.when.event && e.options.hide.when.event !== "inactive") || e.options.hide.when.event == "unfocus") {
e.cache.toggle = 0;
c.bind(e.options.show.when.event + ".qtip", function(h) { if (e.cache.toggle == 0) { a(h) } else { b(h) } })
} else { c.bind(e.options.show.when.event + ".qtip", a); if (e.options.hide.when.event !== "inactive") { d.bind(e.options.hide.when.event + ".qtip", b) } }
if (e.options.position.type.search(/(fixed|absolute)/) !== -1) { e.elements.tooltip.bind("mouseover.qtip", e.focus) }
if (e.options.position.target === "mouse" && e.options.position.type !== "static") { c.bind("mousemove.qtip", function(h) { e.cache.mouse = { x: h.pageX, y: h.pageY }; if (e.status.disabled === false && e.options.position.adjust.mouse === true && e.options.position.type !== "static" && e.elements.tooltip.css("display") !== "none") { e.updatePosition(h) } }) }
}
function v(g, f, a) {
var b, j, d, c, h, e;
b = this;
if (a.corner == "center") { return f.position } j = D.extend({}, g);
c = { x: false, y: false };
h = { left: (j.left < D.fn.qtip.cache.screen.scroll.left), right: (j.left + a.dimensions.width + 2 >= D.fn.qtip.cache.screen.width + D.fn.qtip.cache.screen.scroll.left), top: (j.top < D.fn.qtip.cache.screen.scroll.top), bottom: (j.top + a.dimensions.height + 2 >= D.fn.qtip.cache.screen.height + D.fn.qtip.cache.screen.scroll.top) };
d = { left: (h.left && (a.corner.search(/right/i) != -1 || (a.corner.search(/right/i) == -1 && !h.right))), right: (h.right && (a.corner.search(/left/i) != -1 || (a.corner.search(/left/i) == -1 && !h.left))), top: (h.top && a.corner.search(/top/i) == -1), bottom: (h.bottom && a.corner.search(/bottom/i) == -1) };
if (d.left) { if (b.options.position.target !== "mouse") { j.left = f.position.left + f.dimensions.width } else { j.left = b.cache.mouse.x } c.x = "Left" } else { if (d.right) { if (b.options.position.target !== "mouse") { j.left = f.position.left - a.dimensions.width } else { j.left = b.cache.mouse.x - a.dimensions.width } c.x = "Right" } }
if (d.top) { if (b.options.position.target !== "mouse") { j.top = f.position.top + f.dimensions.height } else { j.top = b.cache.mouse.y } c.y = "top" } else { if (d.bottom) { if (b.options.position.target !== "mouse") { j.top = f.position.top - a.dimensions.height } else { j.top = b.cache.mouse.y - a.dimensions.height } c.y = "bottom" } }
if (j.left < 0) {
j.left = g.left;
c.x = false
}
if (j.top < 0) {
j.top = g.top;
c.y = false
}
if (b.options.style.tip.corner !== false) { j.corner = new String(a.corner); if (c.x !== false) { j.corner = j.corner.replace(/Left|Right|Middle/, c.x) } if (c.y !== false) { j.corner = j.corner.replace(/top|bottom/, c.y) } if (j.corner !== b.elements.tip.attr("rel")) { E.call(b, j.corner) } }
return j
}
function t(b, c) {
var a, d;
a = D.extend(true, {}, b);
for (d in a) { if (c === true && d.search(/(tip|classes)/i) !== -1) { delete a[d] } else { if (!c && d.search(/(width|border|tip|title|classes|user)/i) !== -1) { delete a[d] } } }
return a
}
function G(a) {
if (typeof a.tip !== "object") { a.tip = { corner: a.tip } }
if (typeof a.tip.size !== "object") { a.tip.size = { width: a.tip.size, height: a.tip.size } }
if (typeof a.border !== "object") { a.border = { width: a.border } }
if (typeof a.width !== "object") { a.width = { value: a.width } }
if (typeof a.width.max == "string") { a.width.max = parseInt(a.width.max.replace(/([0-9]+)/i, "$1")) }
if (typeof a.width.min == "string") { a.width.min = parseInt(a.width.min.replace(/([0-9]+)/i, "$1")) }
if (typeof a.tip.size.x == "number") {
a.tip.size.width = a.tip.size.x;
delete a.tip.size.x
}
if (typeof a.tip.size.y == "number") {
a.tip.size.height = a.tip.size.y;
delete a.tip.size.y
}
return a
}
function I() {
var f, e, d, a, c, b;
f = this;
d = [true, {}];
for (e = 0; e < arguments.length; e++) { d.push(arguments[e]) } a = [D.extend.apply(D, d)];
while (typeof a[0].name == "string") { a.unshift(G(D.fn.qtip.styles[a[0].name])) } a.unshift(true, { classes: { tooltip: "qtip-" + (arguments[0].name || "defaults") } }, D.fn.qtip.styles.defaults);
c = D.extend.apply(D, a);
b = (D.browser.msie) ? 1 : 0;
c.tip.size.width += b;
c.tip.size.height += b;
if (c.tip.size.width % 2 > 0) { c.tip.size.width += 1 }
if (c.tip.size.height % 2 > 0) { c.tip.size.height += 1 }
if (c.tip.corner === true) { c.tip.corner = (f.options.position.corner.tooltip === "center") ? false : f.options.position.corner.tooltip }
return c
}
function H(a, b, c) {
var d = {
bottomRight: [
[0, 0],
[b, c],
[b, 0]
],
bottomLeft: [
[0, 0],
[b, 0],
[0, c]
],
topRight: [
[0, c],
[b, 0],
[b, c]
],
topLeft: [
[0, 0],
[0, c],
[b, c]
],
topMiddle: [
[0, c],
[b / 2, 0],
[b, c]
],
bottomMiddle: [
[0, 0],
[b, 0],
[b / 2, c]
],
rightMiddle: [
[0, 0],
[b, c / 2],
[0, c]
],
leftMiddle: [
[b, 0],
[b, c],
[0, c / 2]
]
};
d.leftTop = d.bottomRight;
d.rightTop = d.bottomLeft;
d.leftBottom = d.topRight;
d.rightBottom = d.topLeft;
return d[a]
}
function C(b) { var a; if (D("<canvas>").get(0).getContext) { a = { topLeft: [b, b], topRight: [0, b], bottomLeft: [b, 0], bottomRight: [0, 0] } } else { if (D.browser.msie) { a = { topLeft: [-90, 90, 0], topRight: [-90, 90, -b], bottomLeft: [90, 270, 0], bottomRight: [90, 270, -b] } } } return a }
function z() {
var c, b, a;
c = this;
a = c.getDimensions();
b = '<iframe class="qtip-bgiframe" frameborder="0" tabindex="-1" src="javascript:false" style="display:block; position:absolute; z-index:-1; filter:alpha(opacity=\'0\'); border: 1px solid red; height:' + a.height + "px; width:" + a.width + 'px" />';
c.elements.bgiframe = c.elements.wrapper.prepend(b).children(".qtip-bgiframe:first")
}
D(document).ready(function() {
D.fn.qtip.cache = { screen: { scroll: { left: D(window).scrollLeft(), top: D(window).scrollTop() }, width: D(window).width(), height: D(window).height() } };
var a;
D(window).bind("resize scroll", function(b) {
clearTimeout(a);
a = setTimeout(function() {
if (b.type === "scroll") { D.fn.qtip.cache.screen.scroll = { left: D(window).scrollLeft(), top: D(window).scrollTop() } } else {
D.fn.qtip.cache.screen.width = D(window).width();
D.fn.qtip.cache.screen.height = D(window).height()
}
for (i = 0; i < D.fn.qtip.interfaces.length; i++) { var c = D.fn.qtip.interfaces[i]; if (c.status.rendered === true && (c.options.position.type !== "static" || c.options.position.adjust.scroll && b.type === "scroll" || c.options.position.adjust.resize && b.type === "resize")) { c.updatePosition(b, true) } }
}, 100)
});
D(document).bind("mousedown.qtip", function(b) { if (D(b.target).parents("div.qtip").length === 0) { D(".qtip[unfocus]").each(function() { var c = D(this).qtip("api"); if (D(this).is(":visible") && !c.status.disabled && D(b.target).add(c.elements.target).length > 1) { c.hide(b) } }) } })
});
D.fn.qtip.interfaces = [];
D.fn.qtip.log = { error: function() { return this } };
D.fn.qtip.constants = {};
D.fn.qtip.defaults = { content: { prerender: false, text: false, url: false, data: null, title: { text: false, button: false } }, position: { target: false, corner: { target: "bottomRight", tooltip: "topLeft" }, adjust: { x: 0, y: 0, mouse: true, screen: false, scroll: true, resize: true }, type: "absolute", container: false }, show: { when: { target: false, event: "mouseover" }, effect: { type: "fade", length: 100 }, delay: 140, solo: false, ready: false }, hide: { when: { target: false, event: "mouseout" }, effect: { type: "fade", length: 100 }, delay: 0, fixed: false }, api: { beforeRender: function() {}, onRender: function() {}, beforePositionUpdate: function() {}, onPositionUpdate: function() {}, beforeShow: function() {}, onShow: function() {}, beforeHide: function() {}, onHide: function() {}, beforeContentUpdate: function() {}, onContentUpdate: function() {}, beforeContentLoad: function() {}, onContentLoad: function() {}, beforeTitleUpdate: function() {}, onTitleUpdate: function() {}, beforeDestroy: function() {}, onDestroy: function() {}, beforeFocus: function() {}, onFocus: function() {} } };
D.fn.qtip.styles = { defaults: { background: "white", color: "#111", overflow: "hidden", textAlign: "left", width: { min: 0, max: 250 }, padding: "5px 9px", border: { width: 1, radius: 0, color: "#d3d3d3" }, tip: { corner: false, color: false, size: { width: 13, height: 13 }, opacity: 1 }, title: { background: "#e1e1e1", fontWeight: "bold", padding: "7px 12px" }, button: { cursor: "pointer" }, classes: { target: "", tip: "qtip-tip", title: "qtip-title", button: "qtip-button", content: "qtip-content", active: "qtip-active" } }, cream: { border: { width: 3, radius: 0, color: "#F9E98E" }, title: { background: "#F0DE7D", color: "#A27D35" }, background: "#FBF7AA", color: "#A27D35", classes: { tooltip: "qtip-cream" } }, light: { border: { width: 3, radius: 0, color: "#E2E2E2" }, title: { background: "#f1f1f1", color: "#454545" }, background: "white", color: "#454545", classes: { tooltip: "qtip-light" } }, dark: { border: { width: 3, radius: 0, color: "#303030" }, title: { background: "#404040", color: "#f3f3f3" }, background: "#505050", color: "#f3f3f3", classes: { tooltip: "qtip-dark" } }, red: { border: { width: 3, radius: 0, color: "#CE6F6F" }, title: { background: "#f28279", color: "#9C2F2F" }, background: "#F79992", color: "#9C2F2F", classes: { tooltip: "qtip-red" } }, green: { border: { width: 3, radius: 0, color: "#A9DB66" }, title: { background: "#b9db8c", color: "#58792E" }, background: "#CDE6AC", color: "#58792E", classes: { tooltip: "qtip-green" } }, blue: { border: { width: 3, radius: 0, color: "#ADD9ED" }, title: { background: "#D0E9F5", color: "#5E99BD" }, background: "#E5F6FE", color: "#4D9FBF", classes: { tooltip: "qtip-blue" } } }
})(jQuery);
(function(j) {
var e = "0.3.4",
k = "hasOwnProperty",
b = /[\.\/]/,
a = "*",
g = function() {},
f = function(n, m) { return n - m },
d, h, l = { n: {} },
c = function(m, C) {
var v = l,
s = h,
w = Array.prototype.slice.call(arguments, 2),
y = c.listeners(m),
x = 0,
u = false,
p, o = [],
t = {},
q = [],
n = d,
A = [];
d = m;
h = 0;
for (var r = 0, B = y.length; r < B; r++) { if ("zIndex" in y[r]) { o.push(y[r].zIndex); if (y[r].zIndex < 0) { t[y[r].zIndex] = y[r] } } } o.sort(f);
while (o[x] < 0) {
p = t[o[x++]];
q.push(p.apply(C, w));
if (h) { h = s; return q }
}
for (r = 0; r < B; r++) {
p = y[r];
if ("zIndex" in p) {
if (p.zIndex == o[x]) {
q.push(p.apply(C, w));
if (h) { break } do {
x++;
p = t[o[x]];
p && q.push(p.apply(C, w));
if (h) { break }
} while (p)
} else { t[p.zIndex] = p }
} else { q.push(p.apply(C, w)); if (h) { break } }
}
h = s;
d = n;
return q.length ? q : null
};
c.listeners = function(m) {
var u = m.split(b),
s = l,
y, t, n, q, x, p, r, v, w = [s],
o = [];
for (q = 0, x = u.length; q < x; q++) {
v = [];
for (p = 0, r = w.length; p < r; p++) {
s = w[p].n;
t = [s[u[q]], s[a]];
n = 2;
while (n--) {
y = t[n];
if (y) {
v.push(y);
o = o.concat(y.f || [])
}
}
}
w = v
}
return o
};
c.on = function(m, p) {
var r = m.split(b),
q = l;
for (var n = 0, o = r.length; n < o; n++) {
q = q.n;
!q[r[n]] && (q[r[n]] = { n: {} });
q = q[r[n]]
}
q.f = q.f || [];
for (n = 0, o = q.f.length; n < o; n++) { if (q.f[n] == p) { return g } } q.f.push(p);
return function(s) { if (+s == +s) { p.zIndex = +s } }
};
c.stop = function() { h = 1 };
c.nt = function(m) { if (m) { return new RegExp("(?:\\.|\\/|^)" + m + "(?:\\.|\\/|$)").test(d) } return d };
c.off = c.unbind = function(n, s) {
var u = n.split(b),
t, w, o, q, x, p, r, v = [l];
for (q = 0, x = u.length; q < x; q++) {
for (p = 0; p < v.length; p += o.length - 2) {
o = [p, 1];
t = v[p].n;
if (u[q] != a) { if (t[u[q]]) { o.push(t[u[q]]) } } else { for (w in t) { if (t[k](w)) { o.push(t[w]) } } } v.splice.apply(v, o)
}
}
for (q = 0, x = v.length; q < x; q++) { t = v[q]; while (t.n) { if (s) { if (t.f) { for (p = 0, r = t.f.length; p < r; p++) { if (t.f[p] == s) { t.f.splice(p, 1); break } }!t.f.length && delete t.f } for (w in t.n) { if (t.n[k](w) && t.n[w].f) { var m = t.n[w].f; for (p = 0, r = m.length; p < r; p++) { if (m[p] == s) { m.splice(p, 1); break } }!m.length && delete t.n[w].f } } } else { delete t.f; for (w in t.n) { if (t.n[k](w) && t.n[w].f) { delete t.n[w].f } } } t = t.n } }
};
c.once = function(m, n) {
var o = function() {
var p = n.apply(this, arguments);
c.unbind(m, o);
return p
};
return c.on(m, o)
};
c.version = e;
c.toString = function() { return "You are running Eve " + e };
(typeof module != "undefined" && module.exports) ? (module.exports = c) : (typeof define != "undefined" ? (define("eve", [], function() { return c })) : (j.eve = c))
})(this);
(function() {
function aR(g) { if (aR.is(g, "function")) { return ao ? g() : eve.on("raphael.DOMload", g) } else { if (aR.is(g, bd)) { return aR._engine.create[bG](aR, g.splice(0, 3 + aR.is(g[0], aL))).add(g) } else { var b = Array.prototype.slice.call(arguments, 0); if (aR.is(b[b.length - 1], "function")) { var d = b.pop(); return ao ? d.call(aR._engine.create[bG](aR, b)) : eve.on("raphael.DOMload", function() { d.call(aR._engine.create[bG](aR, b)) }) } else { return aR._engine.create[bG](aR, arguments) } } } } aR.version = "2.1.0";
aR.eve = eve;
var ao, a = /[, ]+/,
bw = { circle: 1, rect: 1, path: 1, ellipse: 1, text: 1, image: 1 },
br = /\{(\d+)\}/g,
bJ = "prototype",
ak = "hasOwnProperty",
aA = { doc: document, win: window },
s = { was: Object.prototype[ak].call(aA.win, "Raphael"), is: aA.win.Raphael },
bF = function() { this.ca = this.customAttributes = {} },
a4, bo = "appendChild",
bG = "apply",
bE = "concat",
Z = "createTouch" in aA.doc,
aX = "",
aQ = " ",
bH = String,
F = "split",
Q = "click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend touchcancel" [F](aQ),
bx = { mousedown: "touchstart", mousemove: "touchmove", mouseup: "touchend" },
bK = bH.prototype.toLowerCase,
au = Math,
m = au.max,
bm = au.min,
aw = au.abs,
bp = au.pow,
aV = au.PI,
aL = "number",
aj = "string",
bd = "array",
a5 = "toString",
a9 = "fill",
a1 = Object.prototype.toString,
bz = {},
j = "push",
f = aR._ISURL = /^url\(['"]?([^\)]+?)['"]?\)$/i,
A = /^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+%?)?)\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i,
av = { "NaN": 1, "Infinity": 1, "-Infinity": 1 },
c = /^(?:cubic-)?bezier\(([^,]+),([^,]+),([^,]+),([^\)]+)\)/,
ah = au.round,
z = "setAttribute",
an = parseFloat,
U = parseInt,
bt = bH.prototype.toUpperCase,
r = aR._availableAttrs = { "arrow-end": "none", "arrow-start": "none", blur: 0, "clip-rect": "0 0 1e9 1e9", cursor: "default", cx: 0, cy: 0, fill: "#fff", "fill-opacity": 1, font: '10px "Arial"', "font-family": '"Arial"', "font-size": "10", "font-style": "normal", "font-weight": 400, gradient: 0, height: 0, href: "http://raphaeljs.com/", "letter-spacing": 0, opacity: 1, path: "M0,0", r: 0, rx: 0, ry: 0, src: "", stroke: "#000", "stroke-dasharray": "", "stroke-linecap": "butt", "stroke-linejoin": "butt", "stroke-miterlimit": 0, "stroke-opacity": 1, "stroke-width": 1, target: "_blank", "text-anchor": "middle", title: "Raphael", transform: "", width: 0, x: 0, y: 0 },
ar = aR._availableAnimAttrs = { blur: aL, "clip-rect": "csv", cx: aL, cy: aL, fill: "colour", "fill-opacity": aL, "font-size": aL, height: aL, opacity: aL, path: "path", r: aL, rx: aL, ry: aL, stroke: "colour", "stroke-opacity": aL, "stroke-width": aL, transform: "transform", width: aL, x: aL, y: aL },
ac = /[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]/g,
bi = /[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*/,
n = { hs: 1, rg: 1 },
bg = /,?([achlmqrstvxz]),?/gi,
a0 = /([achlmrqstvz])[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*)+)/ig,
ai = /([rstm])[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*)+)/ig,
aP = /(-?\d*\.?\d*(?:e[\-+]?\d+)?)[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*/ig,
aW = aR._radial_gradient = /^r(?:\(([^,]+?)[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*([^\)]+?)\))?/,
aU = {},
bq = function(g, d) { return g.key - d.key },
u = function(g, d) { return an(g) - an(d) },
I = function() {},
bB = function(b) { return b },
az = aR._rectPath = function(b, R, d, g, E) {
if (E) {
return [
["M", b + E, R],
["l", d - E * 2, 0],
["a", E, E, 0, 0, 1, E, E],
["l", 0, g - E * 2],
["a", E, E, 0, 0, 1, -E, E],
["l", E * 2 - d, 0],
["a", E, E, 0, 0, 1, -E, -E],
["l", 0, E * 2 - g],
["a", E, E, 0, 0, 1, E, -E],
["z"]
]
}
return [
["M", b, R],
["l", d, 0],
["l", 0, g],
["l", -d, 0],
["z"]
]
},
K = function(b, E, g, d) {
if (d == null) { d = g }
return [
["M", b, E],
["m", 0, -d],
["a", g, d, 0, 1, 1, 0, 2 * d],
["a", g, d, 0, 1, 1, 0, -2 * d],
["z"]
]
},
N = aR._getPath = { path: function(b) { return b.attr("path") }, circle: function(d) { var b = d.attrs; return K(b.cx, b.cy, b.r) }, ellipse: function(d) { var b = d.attrs; return K(b.cx, b.cy, b.rx, b.ry) }, rect: function(d) { var b = d.attrs; return az(b.x, b.y, b.width, b.height, b.r) }, image: function(d) { var b = d.attrs; return az(b.x, b.y, b.width, b.height) }, text: function(b) { var d = b._getBBox(); return az(d.x, d.y, d.width, d.height) } },
L = aR.mapPath = function(bN, S) {
if (!S) { return bN }
var bL, R, g, b, bM, E, d;
bN = W(bN);
for (g = 0, bM = bN.length; g < bM; g++) {
d = bN[g];
for (b = 1, E = d.length; b < E; b += 2) {
bL = S.x(d[b], d[b + 1]);
R = S.y(d[b], d[b + 1]);
d[b] = bL;
d[b + 1] = R
}
}
return bN
};
aR._g = aA;
aR.type = (aA.win.SVGAngle || aA.doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1") ? "SVG" : "VML");
if (aR.type == "VML") {
var aE = aA.doc.createElement("div"),
aH;
aE.innerHTML = '<v:shape adj="1"/>';
aH = aE.firstChild;
aH.style.behavior = "url(#default#VML)";
if (!(aH && typeof aH.adj == "object")) { return (aR.type = aX) } aE = null
}
aR.svg = !(aR.vml = aR.type == "VML");
aR._Paper = bF;
aR.fn = a4 = bF.prototype = aR.prototype;
aR._id = 0;
aR._oid = 0;
aR.is = function(d, b) { b = bK.call(b); if (b == "finite") { return !av[ak](+d) } if (b == "array") { return d instanceof Array } return (b == "null" && d === null) || (b == typeof d && d !== null) || (b == "object" && d === Object(d)) || (b == "array" && Array.isArray && Array.isArray(d)) || a1.call(d).slice(8, -1).toLowerCase() == b };
function X(g) { if (Object(g) !== g) { return g } var d = new g.constructor; for (var b in g) { if (g[ak](b)) { d[b] = X(g[b]) } } return d } aR.angle = function(R, bL, g, S, d, E) {
if (d == null) {
var b = R - g,
bM = bL - S;
if (!b && !bM) { return 0 }
return (180 + au.atan2(-bM, -b) * 180 / aV + 360) % 360
} else { return aR.angle(R, bL, d, E) - aR.angle(g, S, d, E) }
};
aR.rad = function(b) { return b % 360 * aV / 180 };
aR.deg = function(b) { return b * 180 / aV % 360 };
aR.snapTo = function(d, E, b) { b = aR.is(b, "finite") ? b : 10; if (aR.is(d, bd)) { var g = d.length; while (g--) { if (aw(d[g] - E) <= b) { return d[g] } } } else { d = +d; var R = E % d; if (R < b) { return E - R } if (R > d - b) { return E - R + d } } return E };
var h = aR.createUUID = (function(b, d) { return function() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(b, d).toUpperCase() } })(/[xy]/g, function(g) {
var d = au.random() * 16 | 0,
b = g == "x" ? d : (d & 3 | 8);
return b.toString(16)
});
aR.setWindow = function(b) {
eve("raphael.setWindow", aR, aA.win, b);
aA.win = b;
aA.doc = aA.win.document;
if (aR._engine.initWin) { aR._engine.initWin(aA.win) }
};
var bf = function(g) {
if (aR.vml) {
var b = /^\s+|\s+$/g;
var R;
try {
var S = new ActiveXObject("htmlfile");
S.write("<body>");
S.close();
R = S.body
} catch (bL) { R = createPopup().document.body }
var d = R.createTextRange();
bf = aG(function(bM) {
try {
R.style.color = bH(bM).replace(b, aX);
var bN = d.queryCommandValue("ForeColor");
bN = ((bN & 255) << 16) | (bN & 65280) | ((bN & 16711680) >>> 16);
return "#" + ("000000" + bN.toString(16)).slice(-6)
} catch (bO) { return "none" }
})
} else {
var E = aA.doc.createElement("i");
E.title = "Rapha\xebl Colour Picker";
E.style.display = "none";
aA.doc.body.appendChild(E);
bf = aG(function(bM) { E.style.color = bM; return aA.doc.defaultView.getComputedStyle(E, aX).getPropertyValue("color") })
}
return bf(g)
},
aI = function() { return "hsb(" + [this.h, this.s, this.b] + ")" },
M = function() { return "hsl(" + [this.h, this.s, this.l] + ")" },
x = function() { return this.hex },
aY = function(S, R, d) {
if (R == null && aR.is(S, "object") && "r" in S && "g" in S && "b" in S) {
d = S.b;
R = S.g;
S = S.r
}
if (R == null && aR.is(S, aj)) {
var E = aR.getRGB(S);
S = E.r;
R = E.g;
d = E.b
}
if (S > 1 || R > 1 || d > 1) {
S /= 255;
R /= 255;
d /= 255
}
return [S, R, d]
},
a2 = function(S, R, d, bL) {
S *= 255;
R *= 255;
d *= 255;
var E = { r: S, g: R, b: d, hex: aR.rgb(S, R, d), toString: x };
aR.is(bL, "finite") && (E.opacity = bL);
return E
};
aR.color = function(b) {
var d;
if (aR.is(b, "object") && "h" in b && "s" in b && "b" in b) {
d = aR.hsb2rgb(b);
b.r = d.r;
b.g = d.g;
b.b = d.b;
b.hex = d.hex
} else {
if (aR.is(b, "object") && "h" in b && "s" in b && "l" in b) {
d = aR.hsl2rgb(b);
b.r = d.r;
b.g = d.g;
b.b = d.b;
b.hex = d.hex
} else {
if (aR.is(b, "string")) { b = aR.getRGB(b) }
if (aR.is(b, "object") && "r" in b && "g" in b && "b" in b) {
d = aR.rgb2hsl(b);
b.h = d.h;
b.s = d.s;
b.l = d.l;
d = aR.rgb2hsb(b);
b.v = d.b
} else {
b = { hex: "none" };
b.r = b.g = b.b = b.h = b.s = b.v = b.l = -1
}
}
}
b.toString = x;
return b
};
aR.hsb2rgb = function(bL, bO, bM, E) {
if (this.is(bL, "object") && "h" in bL && "s" in bL && "b" in bL) {
bM = bL.b;
bO = bL.s;
bL = bL.h;
E = bL.o
}
bL *= 360;
var S, bN, d, g, b;
bL = (bL % 360) / 60;
b = bM * bO;
g = b * (1 - aw(bL % 2 - 1));
S = bN = d = bM - b;
bL = ~~bL;
S += [b, g, 0, 0, g, b][bL];
bN += [g, b, b, g, 0, 0][bL];
d += [0, 0, g, b, b, g][bL];
return a2(S, bN, d, E)
};
aR.hsl2rgb = function(bM, bO, S, E) {
if (this.is(bM, "object") && "h" in bM && "s" in bM && "l" in bM) {
S = bM.l;
bO = bM.s;
bM = bM.h
}
if (bM > 1 || bO > 1 || S > 1) {
bM /= 360;
bO /= 100;
S /= 100
}
bM *= 360;
var bL, bN, d, g, b;
bM = (bM % 360) / 60;
b = 2 * bO * (S < 0.5 ? S : 1 - S);
g = b * (1 - aw(bM % 2 - 1));
bL = bN = d = S - b / 2;
bM = ~~bM;
bL += [b, g, 0, 0, g, b][bM];
bN += [g, b, b, g, 0, 0][bM];
d += [0, 0, g, b, b, g][bM];
return a2(bL, bN, d, E)
};
aR.rgb2hsb = function(bN, bM, d) {
d = aY(bN, bM, d);
bN = d[0];
bM = d[1];
d = d[2];
var bL, R, E, bO;
E = m(bN, bM, d);
bO = E - bm(bN, bM, d);
bL = (bO == 0 ? null : E == bN ? (bM - d) / bO : E == bM ? (d - bN) / bO + 2 : (bN - bM) / bO + 4);
bL = ((bL + 360) % 6) * 60 / 360;
R = bO == 0 ? 0 : bO / E;
return { h: bL, s: R, b: E, toString: aI }
};
aR.rgb2hsl = function(d, bM, bP) {
bP = aY(d, bM, bP);
d = bP[0];
bM = bP[1];
bP = bP[2];
var bQ, bL, bO, bN, R, E;
bN = m(d, bM, bP);
R = bm(d, bM, bP);
E = bN - R;
bQ = (E == 0 ? null : bN == d ? (bM - bP) / E : bN == bM ? (bP - d) / E + 2 : (d - bM) / E + 4);
bQ = ((bQ + 360) % 6) * 60 / 360;
bO = (bN + R) / 2;
bL = (E == 0 ? 0 : bO < 0.5 ? E / (2 * bO) : E / (2 - 2 * bO));
return { h: bQ, s: bL, l: bO, toString: M }
};
aR._path2string = function() { return this.join(",").replace(bg, "$1") };
function bk(E, g) { for (var b = 0, d = E.length; b < d; b++) { if (E[b] === g) { return E.push(E.splice(b, 1)[0]) } } }
function aG(E, d, b) {
function g() {
var R = Array.prototype.slice.call(arguments, 0),
bL = R.join("\u2400"),
S = g.cache = g.cache || {},
bM = g.count = g.count || [];
if (S[ak](bL)) { bk(bM, bL); return b ? b(S[bL]) : S[bL] } bM.length >= 1000 && delete S[bM.shift()];
bM.push(bL);
S[bL] = E[bG](d, R);
return b ? b(S[bL]) : S[bL]
}
return g
}
var bv = aR._preload = function(g, d) {
var b = aA.doc.createElement("img");
b.style.cssText = "position:absolute;left:-9999em;top:-9999em";
b.onload = function() {
d.call(this);
this.onload = null;
aA.doc.body.removeChild(this)
};
b.onerror = function() { aA.doc.body.removeChild(this) };
aA.doc.body.appendChild(b);
b.src = g
};
function aq() { return this.hex } aR.getRGB = aG(function(b) {
if (!b || !!((b = bH(b)).indexOf("-") + 1)) { return { r: -1, g: -1, b: -1, hex: "none", error: 1, toString: aq } }
if (b == "none") { return { r: -1, g: -1, b: -1, hex: "none", toString: aq } }!(n[ak](b.toLowerCase().substring(0, 2)) || b.charAt() == "#") && (b = bf(b));
var R, d, g, bL, E, bN, bM, S = b.match(A);
if (S) {
if (S[2]) {
bL = U(S[2].substring(5), 16);
g = U(S[2].substring(3, 5), 16);
d = U(S[2].substring(1, 3), 16)
}
if (S[3]) {
bL = U((bN = S[3].charAt(3)) + bN, 16);
g = U((bN = S[3].charAt(2)) + bN, 16);
d = U((bN = S[3].charAt(1)) + bN, 16)
}
if (S[4]) {
bM = S[4][F](bi);
d = an(bM[0]);
bM[0].slice(-1) == "%" && (d *= 2.55);
g = an(bM[1]);
bM[1].slice(-1) == "%" && (g *= 2.55);
bL = an(bM[2]);
bM[2].slice(-1) == "%" && (bL *= 2.55);
S[1].toLowerCase().slice(0, 4) == "rgba" && (E = an(bM[3]));
bM[3] && bM[3].slice(-1) == "%" && (E /= 100)
}
if (S[5]) {
bM = S[5][F](bi);
d = an(bM[0]);
bM[0].slice(-1) == "%" && (d *= 2.55);
g = an(bM[1]);
bM[1].slice(-1) == "%" && (g *= 2.55);
bL = an(bM[2]);
bM[2].slice(-1) == "%" && (bL *= 2.55);
(bM[0].slice(-3) == "deg" || bM[0].slice(-1) == "\xb0") && (d /= 360);
S[1].toLowerCase().slice(0, 4) == "hsba" && (E = an(bM[3]));
bM[3] && bM[3].slice(-1) == "%" && (E /= 100);
return aR.hsb2rgb(d, g, bL, E)
}
if (S[6]) {
bM = S[6][F](bi);
d = an(bM[0]);
bM[0].slice(-1) == "%" && (d *= 2.55);
g = an(bM[1]);
bM[1].slice(-1) == "%" && (g *= 2.55);
bL = an(bM[2]);
bM[2].slice(-1) == "%" && (bL *= 2.55);
(bM[0].slice(-3) == "deg" || bM[0].slice(-1) == "\xb0") && (d /= 360);
S[1].toLowerCase().slice(0, 4) == "hsla" && (E = an(bM[3]));
bM[3] && bM[3].slice(-1) == "%" && (E /= 100);
return aR.hsl2rgb(d, g, bL, E)
}
S = { r: d, g: g, b: bL, toString: aq };
S.hex = "#" + (16777216 | bL | (g << 8) | (d << 16)).toString(16).slice(1);
aR.is(E, "finite") && (S.opacity = E);
return S
}
return { r: -1, g: -1, b: -1, hex: "none", error: 1, toString: aq }
}, aR);
aR.hsb = aG(function(E, g, d) { return aR.hsb2rgb(E, g, d).hex });
aR.hsl = aG(function(g, d, b) { return aR.hsl2rgb(g, d, b).hex });
aR.rgb = aG(function(R, E, d) { return "#" + (16777216 | d | (E << 8) | (R << 16)).toString(16).slice(1) });
aR.getColor = function(d) {
var g = this.getColor.start = this.getColor.start || { h: 0, s: 1, b: d || 0.75 },
b = this.hsb2rgb(g.h, g.s, g.b);
g.h += 0.075;
if (g.h > 1) {
g.h = 0;
g.s -= 0.2;
g.s <= 0 && (this.getColor.start = { h: 0, s: 1, b: g.b })
}
return b.hex
};
aR.getColor.reset = function() { delete this.start };
function bb(E, bL) {
var S = [];
for (var g = 0, b = E.length; b - 2 * !bL > g; g += 2) {
var R = [{ x: +E[g - 2], y: +E[g - 1] }, { x: +E[g], y: +E[g + 1] }, { x: +E[g + 2], y: +E[g + 3] }, { x: +E[g + 4], y: +E[g + 5] }];
if (bL) {
if (!g) { R[0] = { x: +E[b - 2], y: +E[b - 1] } } else {
if (b - 4 == g) { R[3] = { x: +E[0], y: +E[1] } } else {
if (b - 2 == g) {
R[2] = { x: +E[0], y: +E[1] };
R[3] = { x: +E[2], y: +E[3] }
}
}
}
} else { if (b - 4 == g) { R[3] = R[2] } else { if (!g) { R[0] = { x: +E[g], y: +E[g + 1] } } } } S.push(["C", (-R[0].x + 6 * R[1].x + R[2].x) / 6, (-R[0].y + 6 * R[1].y + R[2].y) / 6, (R[1].x + 6 * R[2].x - R[3].x) / 6, (R[1].y + 6 * R[2].y - R[3].y) / 6, R[2].x, R[2].y])
}
return S
}
aR.parsePathString = function(b) {
if (!b) { return null }
var g = Y(b);
if (g.arr) { return aZ(g.arr) }
var E = { a: 7, c: 6, h: 1, l: 2, m: 2, r: 4, q: 4, s: 4, t: 2, v: 1, z: 0 },
d = [];
if (aR.is(b, bd) && aR.is(b[0], bd)) { d = aZ(b) }
if (!d.length) {
bH(b).replace(a0, function(S, R, bN) {
var bM = [],
bL = R.toLowerCase();
bN.replace(aP, function(bP, bO) { bO && bM.push(+bO) });
if (bL == "m" && bM.length > 2) {
d.push([R][bE](bM.splice(0, 2)));
bL = "l";
R = R == "m" ? "l" : "L"
}
if (bL == "r") { d.push([R][bE](bM)) } else { while (bM.length >= E[bL]) { d.push([R][bE](bM.splice(0, E[bL]))); if (!E[bL]) { break } } }
})
}
d.toString = aR._path2string;
g.arr = aZ(d);
return d
};
aR.parseTransformString = aG(function(d) {
if (!d) { return null }
var g = { r: 3, s: 4, t: 2, m: 6 },
b = [];
if (aR.is(d, bd) && aR.is(d[0], bd)) { b = aZ(d) }
if (!b.length) {
bH(d).replace(ai, function(R, E, bM) {
var bL = [],
S = bK.call(E);
bM.replace(aP, function(bO, bN) { bN && bL.push(+bN) });
b.push([E][bE](bL))
})
}
b.toString = aR._path2string;
return b
});
var Y = function(d) { var b = Y.ps = Y.ps || {}; if (b[d]) { b[d].sleep = 100 } else { b[d] = { sleep: 100 } } setTimeout(function() { for (var g in b) { if (b[ak](g) && g != d) { b[g].sleep--;!b[g].sleep && delete b[g] } } }); return b[d] };
aR.findDotsAtSegment = function(d, b, b3, b1, bL, R, bO, bM, bW) {
var bT = 1 - bW,
bY = bp(bT, 3),
bZ = bp(bT, 2),
bQ = bW * bW,
bN = bQ * bW,
bS = bY * d + bZ * 3 * bW * b3 + bT * 3 * bW * bW * bL + bN * bO,
bP = bY * b + bZ * 3 * bW * b1 + bT * 3 * bW * bW * R + bN * bM,
bX = d + 2 * bW * (b3 - d) + bQ * (bL - 2 * b3 + d),
bV = b + 2 * bW * (b1 - b) + bQ * (R - 2 * b1 + b),
b2 = b3 + 2 * bW * (bL - b3) + bQ * (bO - 2 * bL + b3),
b0 = b1 + 2 * bW * (R - b1) + bQ * (bM - 2 * R + b1),
bU = bT * d + bW * b3,
bR = bT * b + bW * b1,
E = bT * bL + bW * bO,
g = bT * R + bW * bM,
S = (90 - au.atan2(bX - b2, bV - b0) * 180 / aV);
(bX > b2 || bV < b0) && (S += 180);
return { x: bS, y: bP, m: { x: bX, y: bV }, n: { x: b2, y: b0 }, start: { x: bU, y: bR }, end: { x: E, y: g }, alpha: S }
};
aR.bezierBBox = function(d, b, E, g, bN, bL, S, R) { if (!aR.is(d, "array")) { d = [d, b, E, g, bN, bL, S, R] } var bM = ba.apply(null, d); return { x: bM.min.x, y: bM.min.y, x2: bM.max.x, y2: bM.max.y, width: bM.max.x - bM.min.x, height: bM.max.y - bM.min.y } };
aR.isPointInsideBBox = function(d, b, g) { return b >= d.x && b <= d.x2 && g >= d.y && g <= d.y2 };
aR.isBBoxIntersect = function(g, d) { var b = aR.isPointInsideBBox; return b(d, g.x, g.y) || b(d, g.x2, g.y) || b(d, g.x, g.y2) || b(d, g.x2, g.y2) || b(g, d.x, d.y) || b(g, d.x2, d.y) || b(g, d.x, d.y2) || b(g, d.x2, d.y2) || (g.x < d.x2 && g.x > d.x || d.x < g.x2 && d.x > g.x) && (g.y < d.y2 && g.y > d.y || d.y < g.y2 && d.y > g.y) };
function bj(b, bL, S, R, E) {
var g = -3 * bL + 9 * S - 9 * R + 3 * E,
d = b * g + 6 * bL - 12 * S + 6 * R;
return b * d - 3 * bL + 3 * S
}
function q(bW, R, bV, g, bU, d, bR, b, bO) {
if (bO == null) { bO = 1 } bO = bO > 1 ? 1 : bO < 0 ? 0 : bO;
var bP = bO / 2,
bQ = 12,
bL = [-0.1252, 0.1252, -0.3678, 0.3678, -0.5873, 0.5873, -0.7699, 0.7699, -0.9041, 0.9041, -0.9816, 0.9816],
bT = [0.2491, 0.2491, 0.2335, 0.2335, 0.2032, 0.2032, 0.1601, 0.1601, 0.1069, 0.1069, 0.0472, 0.0472],
E = 0;
for (var bS = 0; bS < bQ; bS++) {
var bM = bP * bL[bS] + bP,
bN = bj(bM, bW, bV, bU, bR),
bX = bj(bM, R, g, d, b),
S = bN * bN + bX * bX;
E += bT[bS] * au.sqrt(S)
}
return bP * E
}
function C(g, bQ, d, bP, b, bN, bS, bM, bO) {
if (bO < 0 || q(g, bQ, d, bP, b, bN, bS, bM) < bO) { return }
var bR = 1,
E = bR / 2,
S = bR - E,
R, bL = 0.01;
R = q(g, bQ, d, bP, b, bN, bS, bM, S);
while (aw(R - bO) > bL) {
E /= 2;
S += (R < bO ? 1 : -1) * E;
R = q(g, bQ, d, bP, b, bN, bS, bM, S)
}
return S
}
function O(E, bR, g, bP, b, bO, bT, bN) {
if (m(E, g) < bm(b, bT) || bm(E, g) > m(b, bT) || m(bR, bP) < bm(bO, bN) || bm(bR, bP) > m(bO, bN)) { return }
var bM = (E * bP - bR * g) * (b - bT) - (E - g) * (b * bN - bO * bT),
bL = (E * bP - bR * g) * (bO - bN) - (bR - bP) * (b * bN - bO * bT),
R = (E - g) * (bO - bN) - (bR - bP) * (b - bT);
if (!R) { return }
var bS = bM / R,
bQ = bL / R,
S = +bS.toFixed(2),
d = +bQ.toFixed(2);
if (S < +bm(E, g).toFixed(2) || S > +m(E, g).toFixed(2) || S < +bm(b, bT).toFixed(2) || S > +m(b, bT).toFixed(2) || d < +bm(bR, bP).toFixed(2) || d > +m(bR, bP).toFixed(2) || d < +bm(bO, bN).toFixed(2) || d > +m(bO, bN).toFixed(2)) { return }
return { x: bS, y: bQ }
}
function ay(d, b) { return af(d, b) }
function t(d, b) { return af(d, b, 1) }
function af(b2, b1, b0) {
var E = aR.bezierBBox(b2),
d = aR.bezierBBox(b1);
if (!aR.isBBoxIntersect(E, d)) { return b0 ? 0 : [] }
var bV = q.apply(0, b2),
bU = q.apply(0, b1),
bM = ~~(bV / 5),
bL = ~~(bU / 5),
bS = [],
bR = [],
g = {},
b3 = b0 ? 0 : [];
for (var bX = 0; bX < bM + 1; bX++) {
var bT = aR.findDotsAtSegment.apply(aR, b2.concat(bX / bM));
bS.push({ x: bT.x, y: bT.y, t: bX / bM })
}
for (bX = 0; bX < bL + 1; bX++) {
bT = aR.findDotsAtSegment.apply(aR, b1.concat(bX / bL));
bR.push({ x: bT.x, y: bT.y, t: bX / bL })
}
for (bX = 0; bX < bM; bX++) {
for (var bW = 0; bW < bL; bW++) {
var bZ = bS[bX],
b = bS[bX + 1],
bY = bR[bW],
S = bR[bW + 1],
bQ = aw(b.x - bZ.x) < 0.001 ? "y" : "x",
bP = aw(S.x - bY.x) < 0.001 ? "y" : "x",
R = O(bZ.x, bZ.y, b.x, b.y, bY.x, bY.y, S.x, S.y);
if (R) {
if (g[R.x.toFixed(4)] == R.y.toFixed(4)) { continue } g[R.x.toFixed(4)] = R.y.toFixed(4);
var bO = bZ.t + aw((R[bQ] - bZ[bQ]) / (b[bQ] - bZ[bQ])) * (b.t - bZ.t),
bN = bY.t + aw((R[bP] - bY[bP]) / (S[bP] - bY[bP])) * (S.t - bY.t);
if (bO >= 0 && bO <= 1 && bN >= 0 && bN <= 1) { if (b0) { b3++ } else { b3.push({ x: R.x, y: R.y, t1: bO, t2: bN }) } }
}
}
}
return b3
}
aR.pathIntersection = function(d, b) { return D(d, b) };
aR.pathIntersectionNumber = function(d, b) { return D(d, b, 1) };
function D(g, b, bW) {
g = aR._path2curve(g);
b = aR._path2curve(b);
var bU, S, bT, E, bR, bL, d, bO, b0, bZ, b1 = bW ? 0 : [];
for (var bS = 0, bM = g.length; bS < bM; bS++) {
var bY = g[bS];
if (bY[0] == "M") {
bU = bR = bY[1];
S = bL = bY[2]
} else {
if (bY[0] == "C") {
b0 = [bU, S].concat(bY.slice(1));
bU = b0[6];
S = b0[7]
} else {
b0 = [bU, S, bU, S, bR, bL, bR, bL];
bU = bR;
S = bL
}
for (var bQ = 0, bV = b.length; bQ < bV; bQ++) {
var bX = b[bQ];
if (bX[0] == "M") {
bT = d = bX[1];
E = bO = bX[2]
} else {
if (bX[0] == "C") {
bZ = [bT, E].concat(bX.slice(1));
bT = bZ[6];
E = bZ[7]
} else {
bZ = [bT, E, bT, E, d, bO, d, bO];
bT = d;
E = bO
}
var bN = af(b0, bZ, bW);
if (bW) { b1 += bN } else {
for (var bP = 0, R = bN.length; bP < R; bP++) {
bN[bP].segment1 = bS;
bN[bP].segment2 = bQ;
bN[bP].bez1 = b0;
bN[bP].bez2 = bZ
}
b1 = b1.concat(bN)
}
}
}
}
}
return b1
}
aR.isPointInsidePath = function(d, b, E) {
var g = aR.pathBBox(d);
return aR.isPointInsideBBox(g, b, E) && D(d, [
["M", b, E],
["H", g.x2 + 10]
], 1) % 2 == 1
};
aR._removedFactory = function(b) { return function() { eve("raphael.log", null, "Rapha\xebl: you are calling to method \u201c" + b + "\u201d of removed object", b) } };
var am = aR.pathBBox = function(bT) {
var bN = Y(bT);
if (bN.bbox) { return bN.bbox }
if (!bT) { return { x: 0, y: 0, width: 0, height: 0, x2: 0, y2: 0 } } bT = W(bT);
var bQ = 0,
bP = 0,
R = [],
d = [],
g;
for (var bL = 0, bS = bT.length; bL < bS; bL++) {
g = bT[bL];
if (g[0] == "M") {
bQ = g[1];
bP = g[2];
R.push(bQ);
d.push(bP)
} else {
var bM = ba(bQ, bP, g[1], g[2], g[3], g[4], g[5], g[6]);
R = R[bE](bM.min.x, bM.max.x);
d = d[bE](bM.min.y, bM.max.y);
bQ = g[5];
bP = g[6]
}
}
var b = bm[bG](0, R),
bR = bm[bG](0, d),
S = m[bG](0, R),
E = m[bG](0, d),
bO = { x: b, y: bR, x2: S, y2: E, width: S - b, height: E - bR };
bN.bbox = X(bO);
return bO
},
aZ = function(d) {
var b = X(d);
b.toString = aR._path2string;
return b
},
aC = aR._pathToRelative = function(E) {
var bM = Y(E);
if (bM.rel) { return aZ(bM.rel) }
if (!aR.is(E, bd) || !aR.is(E && E[0], bd)) { E = aR.parsePathString(E) }
var bP = [],
bR = 0,
bQ = 0,
bU = 0,
bT = 0,
g = 0;
if (E[0][0] == "M") {
bR = E[0][1];
bQ = E[0][2];
bU = bR;
bT = bQ;
g++;
bP.push(["M", bR, bQ])
}
for (var bL = g, bV = E.length; bL < bV; bL++) {
var b = bP[bL] = [],
bS = E[bL];
if (bS[0] != bK.call(bS[0])) {
b[0] = bK.call(bS[0]);
switch (b[0]) {
case "a":
b[1] = bS[1];
b[2] = bS[2];
b[3] = bS[3];
b[4] = bS[4];
b[5] = bS[5];
b[6] = +(bS[6] - bR).toFixed(3);
b[7] = +(bS[7] - bQ).toFixed(3);
break;
case "v":
b[1] = +(bS[1] - bQ).toFixed(3);
break;
case "m":
bU = bS[1];
bT = bS[2];
default:
for (var S = 1, bN = bS.length; S < bN; S++) { b[S] = +(bS[S] - ((S % 2) ? bR : bQ)).toFixed(3) }
}
} else {
b = bP[bL] = [];
if (bS[0] == "m") {
bU = bS[1] + bR;
bT = bS[2] + bQ
}
for (var R = 0, d = bS.length; R < d; R++) { bP[bL][R] = bS[R] }
}
var bO = bP[bL].length;
switch (bP[bL][0]) {
case "z":
bR = bU;
bQ = bT;
break;
case "h":
bR += +bP[bL][bO - 1];
break;
case "v":
bQ += +bP[bL][bO - 1];
break;
default:
bR += +bP[bL][bO - 2];
bQ += +bP[bL][bO - 1]
}
}
bP.toString = aR._path2string;
bM.rel = aZ(bP);
return bP
},
w = aR._pathToAbsolute = function(bQ) {
var g = Y(bQ);
if (g.abs) { return aZ(g.abs) }
if (!aR.is(bQ, bd) || !aR.is(bQ && bQ[0], bd)) { bQ = aR.parsePathString(bQ) }
if (!bQ || !bQ.length) {
return [
["M", 0, 0]
]
}
var bW = [],
bL = 0,
S = 0,
bO = 0,
bN = 0,
E = 0;
if (bQ[0][0] == "M") {
bL = +bQ[0][1];
S = +bQ[0][2];
bO = bL;
bN = S;
E++;
bW[0] = ["M", bL, S]
}
var bV = bQ.length == 3 && bQ[0][0] == "M" && bQ[1][0].toUpperCase() == "R" && bQ[2][0].toUpperCase() == "Z";
for (var bP, b, bT = E, bM = bQ.length; bT < bM; bT++) {
bW.push(bP = []);
b = bQ[bT];
if (b[0] != bt.call(b[0])) {
bP[0] = bt.call(b[0]);
switch (bP[0]) {
case "A":
bP[1] = b[1];
bP[2] = b[2];
bP[3] = b[3];
bP[4] = b[4];
bP[5] = b[5];
bP[6] = +(b[6] + bL);
bP[7] = +(b[7] + S);
break;
case "V":
bP[1] = +b[1] + S;
break;
case "H":
bP[1] = +b[1] + bL;
break;
case "R":
var R = [bL, S][bE](b.slice(1));
for (var bS = 2, bU = R.length; bS < bU; bS++) {
R[bS] = +R[bS] + bL;
R[++bS] = +R[bS] + S
}
bW.pop();
bW = bW[bE](bb(R, bV));
break;
case "M":
bO = +b[1] + bL;
bN = +b[2] + S;
default:
for (bS = 1, bU = b.length; bS < bU; bS++) { bP[bS] = +b[bS] + ((bS % 2) ? bL : S) }
}
} else {
if (b[0] == "R") {
R = [bL, S][bE](b.slice(1));
bW.pop();
bW = bW[bE](bb(R, bV));
bP = ["R"][bE](b.slice(-2))
} else { for (var bR = 0, d = b.length; bR < d; bR++) { bP[bR] = b[bR] } }
}
switch (bP[0]) {
case "Z":
bL = bO;
S = bN;
break;
case "H":
bL = bP[1];
break;
case "V":
S = bP[1];
break;
case "M":
bO = bP[bP.length - 2];
bN = bP[bP.length - 1];
default:
bL = bP[bP.length - 2];
S = bP[bP.length - 1]
}
}
bW.toString = aR._path2string;
g.abs = aZ(bW);
return bW
},
bI = function(d, E, b, g) { return [d, E, b, g, b, g] },
bn = function(d, E, bL, R, b, g) {
var S = 1 / 3,
bM = 2 / 3;
return [S * d + bM * bL, S * E + bM * R, S * b + bM * bL, S * g + bM * R, b, g]
},
ae = function(bS, cn, b1, bZ, bT, bN, E, bR, cm, bU) {
var bY = aV * 120 / 180,
b = aV / 180 * (+bT || 0),
b5 = [],
b2, cj = aG(function(cp, cs, co) {
var cr = cp * au.cos(co) - cs * au.sin(co),
cq = cp * au.sin(co) + cs * au.cos(co);
return { x: cr, y: cq }
});
if (!bU) {
b2 = cj(bS, cn, -b);
bS = b2.x;
cn = b2.y;
b2 = cj(bR, cm, -b);
bR = b2.x;
cm = b2.y;
var d = au.cos(aV / 180 * bT),
bP = au.sin(aV / 180 * bT),
b7 = (bS - bR) / 2,
b6 = (cn - cm) / 2;
var ch = (b7 * b7) / (b1 * b1) + (b6 * b6) / (bZ * bZ);
if (ch > 1) {
ch = au.sqrt(ch);
b1 = ch * b1;
bZ = ch * bZ
}
var g = b1 * b1,
ca = bZ * bZ,
cc = (bN == E ? -1 : 1) * au.sqrt(aw((g * ca - g * b6 * b6 - ca * b7 * b7) / (g * b6 * b6 + ca * b7 * b7))),
bW = cc * b1 * b6 / bZ + (bS + bR) / 2,
bV = cc * -bZ * b7 / b1 + (cn + cm) / 2,
bM = au.asin(((cn - bV) / bZ).toFixed(9)),
bL = au.asin(((cm - bV) / bZ).toFixed(9));
bM = bS < bW ? aV - bM : bM;
bL = bR < bW ? aV - bL : bL;
bM < 0 && (bM = aV * 2 + bM);
bL < 0 && (bL = aV * 2 + bL);
if (E && bM > bL) { bM = bM - aV * 2 }
if (!E && bL > bM) { bL = bL - aV * 2 }
} else {
bM = bU[0];
bL = bU[1];
bW = bU[2];
bV = bU[3]
}
var bQ = bL - bM;
if (aw(bQ) > bY) {
var bX = bL,
b0 = bR,
bO = cm;
bL = bM + bY * (E && bL > bM ? 1 : -1);
bR = bW + b1 * au.cos(bL);
cm = bV + bZ * au.sin(bL);
b5 = ae(bR, cm, b1, bZ, bT, 0, E, b0, bO, [bL, bX, bW, bV])
}
bQ = bL - bM;
var S = au.cos(bM),
cl = au.sin(bM),
R = au.cos(bL),
ck = au.sin(bL),
b8 = au.tan(bQ / 4),
cb = 4 / 3 * b1 * b8,
b9 = 4 / 3 * bZ * b8,
ci = [bS, cn],
cg = [bS + cb * cl, cn - b9 * S],
cf = [bR + cb * ck, cm - b9 * R],
cd = [bR, cm];
cg[0] = 2 * ci[0] - cg[0];
cg[1] = 2 * ci[1] - cg[1];
if (bU) { return [cg, cf, cd][bE](b5) } else { b5 = [cg, cf, cd][bE](b5).join()[F](","); var b3 = []; for (var ce = 0, b4 = b5.length; ce < b4; ce++) { b3[ce] = ce % 2 ? cj(b5[ce - 1], b5[ce], b).y : cj(b5[ce], b5[ce + 1], b).x } return b3 }
},
ag = function(d, b, E, g, bN, bM, bL, S, bO) { var R = 1 - bO; return { x: bp(R, 3) * d + bp(R, 2) * 3 * bO * E + R * 3 * bO * bO * bN + bp(bO, 3) * bL, y: bp(R, 3) * b + bp(R, 2) * 3 * bO * g + R * 3 * bO * bO * bM + bp(bO, 3) * S } },
ba = aG(function(E, d, S, R, bV, bU, bR, bO) {
var bT = (bV - 2 * S + E) - (bR - 2 * bV + S),
bQ = 2 * (S - E) - 2 * (bV - S),
bN = E - S,
bM = (-bQ + au.sqrt(bQ * bQ - 4 * bT * bN)) / 2 / bT,
bL = (-bQ - au.sqrt(bQ * bQ - 4 * bT * bN)) / 2 / bT,
bP = [d, bO],
bS = [E, bR],
g;
aw(bM) > "1e12" && (bM = 0.5);
aw(bL) > "1e12" && (bL = 0.5);
if (bM > 0 && bM < 1) {
g = ag(E, d, S, R, bV, bU, bR, bO, bM);
bS.push(g.x);
bP.push(g.y)
}
if (bL > 0 && bL < 1) {
g = ag(E, d, S, R, bV, bU, bR, bO, bL);
bS.push(g.x);
bP.push(g.y)
}
bT = (bU - 2 * R + d) - (bO - 2 * bU + R);
bQ = 2 * (R - d) - 2 * (bU - R);
bN = d - R;
bM = (-bQ + au.sqrt(bQ * bQ - 4 * bT * bN)) / 2 / bT;
bL = (-bQ - au.sqrt(bQ * bQ - 4 * bT * bN)) / 2 / bT;
aw(bM) > "1e12" && (bM = 0.5);
aw(bL) > "1e12" && (bL = 0.5);
if (bM > 0 && bM < 1) {
g = ag(E, d, S, R, bV, bU, bR, bO, bM);
bS.push(g.x);
bP.push(g.y)
}
if (bL > 0 && bL < 1) {
g = ag(E, d, S, R, bV, bU, bR, bO, bL);
bS.push(g.x);
bP.push(g.y)
}
return { min: { x: bm[bG](0, bS), y: bm[bG](0, bP) }, max: { x: m[bG](0, bS), y: m[bG](0, bP) } }
}),
W = aR._path2curve = aG(function(bU, bP) {
var bN = !bP && Y(bU);
if (!bP && bN.curve) { return aZ(bN.curve) }
var E = w(bU),
bQ = bP && w(bP),
bR = { x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null },
d = { x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null },
S = function(bW, bX) {
var bV, bY;
if (!bW) { return ["C", bX.x, bX.y, bX.x, bX.y, bX.x, bX.y] }!(bW[0] in { T: 1, Q: 1 }) && (bX.qx = bX.qy = null);
switch (bW[0]) {
case "M":
bX.X = bW[1];
bX.Y = bW[2];
break;
case "A":
bW = ["C"][bE](ae[bG](0, [bX.x, bX.y][bE](bW.slice(1))));
break;
case "S":
bV = bX.x + (bX.x - (bX.bx || bX.x));
bY = bX.y + (bX.y - (bX.by || bX.y));
bW = ["C", bV, bY][bE](bW.slice(1));
break;
case "T":
bX.qx = bX.x + (bX.x - (bX.qx || bX.x));
bX.qy = bX.y + (bX.y - (bX.qy || bX.y));
bW = ["C"][bE](bn(bX.x, bX.y, bX.qx, bX.qy, bW[1], bW[2]));
break;
case "Q":
bX.qx = bW[1];
bX.qy = bW[2];
bW = ["C"][bE](bn(bX.x, bX.y, bW[1], bW[2], bW[3], bW[4]));
break;
case "L":
bW = ["C"][bE](bI(bX.x, bX.y, bW[1], bW[2]));
break;
case "H":
bW = ["C"][bE](bI(bX.x, bX.y, bW[1], bX.y));
break;
case "V":
bW = ["C"][bE](bI(bX.x, bX.y, bX.x, bW[1]));
break;
case "Z":
bW = ["C"][bE](bI(bX.x, bX.y, bX.X, bX.Y));
break
}
return bW
},
b = function(bV, bW) {
if (bV[bW].length > 7) {
bV[bW].shift();
var bX = bV[bW];
while (bX.length) { bV.splice(bW++, 0, ["C"][bE](bX.splice(0, 6))) } bV.splice(bW, 1);
bS = m(E.length, bQ && bQ.length || 0)
}
},
g = function(bZ, bY, bW, bV, bX) {
if (bZ && bY && bZ[bX][0] == "M" && bY[bX][0] != "M") {
bY.splice(bX, 0, ["M", bV.x, bV.y]);
bW.bx = 0;
bW.by = 0;
bW.x = bZ[bX][1];
bW.y = bZ[bX][2];
bS = m(E.length, bQ && bQ.length || 0)
}
};
for (var bM = 0, bS = m(E.length, bQ && bQ.length || 0); bM < bS; bM++) {
E[bM] = S(E[bM], bR);
b(E, bM);
bQ && (bQ[bM] = S(bQ[bM], d));
bQ && b(bQ, bM);
g(E, bQ, bR, d, bM);
g(bQ, E, d, bR, bM);
var bL = E[bM],
bT = bQ && bQ[bM],
R = bL.length,
bO = bQ && bT.length;
bR.x = bL[R - 2];
bR.y = bL[R - 1];
bR.bx = an(bL[R - 4]) || bR.x;
bR.by = an(bL[R - 3]) || bR.y;
d.bx = bQ && (an(bT[bO - 4]) || d.x);
d.by = bQ && (an(bT[bO - 3]) || d.y);
d.x = bQ && bT[bO - 2];
d.y = bQ && bT[bO - 1]
}
if (!bQ) { bN.curve = aZ(E) }
return bQ ? [E, bQ] : E
}, null, aZ),
v = aR._parseDots = aG(function(bO) {
var bN = [];
for (var S = 0, bP = bO.length; S < bP; S++) {
var b = {},
bM = bO[S].match(/^([^:]*):?([\d\.]*)/);
b.color = aR.getRGB(bM[1]);
if (b.color.error) { return null } b.color = b.color.hex;
bM[2] && (b.offset = bM[2] + "%");
bN.push(b)
}
for (S = 1, bP = bN.length - 1; S < bP; S++) {
if (!bN[S].offset) {
var g = an(bN[S - 1].offset || 0),
E = 0;
for (var R = S + 1; R < bP; R++) { if (bN[R].offset) { E = bN[R].offset; break } }
if (!E) {
E = 100;
R = bP
}
E = an(E);
var bL = (E - g) / (R - S + 1);
for (; S < R; S++) {
g += bL;
bN[S].offset = g + "%"
}
}
}
return bN
}),
aK = aR._tear = function(b, d) {
b == d.top && (d.top = b.prev);
b == d.bottom && (d.bottom = b.next);
b.next && (b.next.prev = b.prev);
b.prev && (b.prev.next = b.next)
},
ap = aR._tofront = function(b, d) {
if (d.top === b) { return } aK(b, d);
b.next = null;
b.prev = d.top;
d.top.next = b;
d.top = b
},
p = aR._toback = function(b, d) {
if (d.bottom === b) { return } aK(b, d);
b.next = d.bottom;
b.prev = null;
d.bottom.prev = b;
d.bottom = b
},
G = aR._insertafter = function(d, b, g) {
aK(d, g);
b == g.top && (g.top = d);
b.next && (b.next.prev = d);
d.next = b.next;
d.prev = b;
b.next = d
},
aT = aR._insertbefore = function(d, b, g) {
aK(d, g);
b == g.bottom && (g.bottom = d);
b.prev && (b.prev.next = d);
d.prev = b.prev;
b.prev = d;
d.next = b
},
bl = aR.toMatrix = function(g, b) {
var E = am(g),
d = { _: { transform: aX }, getBBox: function() { return E } };
aO(d, b);
return d.matrix
},
T = aR.transformPath = function(d, b) { return L(d, bl(d, b)) },
aO = aR._extractTransform = function(d, bZ) {
if (bZ == null) { return d._.transform } bZ = bH(bZ).replace(/\.{3}|\u2026/g, d._.transform || aX);
var bR = aR.parseTransformString(bZ),
bP = 0,
bN = 0,
bM = 0,
bT = 1,
bS = 1,
b0 = d._,
bU = new aF;
b0.transform = bR || [];
if (bR) {
for (var bV = 0, bO = bR.length; bV < bO; bV++) {
var bQ = bR[bV],
b = bQ.length,
R = bH(bQ[0]).toLowerCase(),
bY = bQ[0] != R,
bL = bY ? bU.invert() : 0,
bX, E, bW, g, S;
if (R == "t" && b == 3) {
if (bY) {
bX = bL.x(0, 0);
E = bL.y(0, 0);
bW = bL.x(bQ[1], bQ[2]);
g = bL.y(bQ[1], bQ[2]);
bU.translate(bW - bX, g - E)
} else { bU.translate(bQ[1], bQ[2]) }
} else {
if (R == "r") {
if (b == 2) {
S = S || d.getBBox(1);
bU.rotate(bQ[1], S.x + S.width / 2, S.y + S.height / 2);
bP += bQ[1]
} else {
if (b == 4) {
if (bY) {
bW = bL.x(bQ[2], bQ[3]);
g = bL.y(bQ[2], bQ[3]);
bU.rotate(bQ[1], bW, g)
} else { bU.rotate(bQ[1], bQ[2], bQ[3]) } bP += bQ[1]
}
}
} else {
if (R == "s") {
if (b == 2 || b == 3) {
S = S || d.getBBox(1);
bU.scale(bQ[1], bQ[b - 1], S.x + S.width / 2, S.y + S.height / 2);
bT *= bQ[1];
bS *= bQ[b - 1]
} else {
if (b == 5) {
if (bY) {
bW = bL.x(bQ[3], bQ[4]);
g = bL.y(bQ[3], bQ[4]);
bU.scale(bQ[1], bQ[2], bW, g)
} else { bU.scale(bQ[1], bQ[2], bQ[3], bQ[4]) } bT *= bQ[1];
bS *= bQ[2]
}
}
} else { if (R == "m" && b == 7) { bU.add(bQ[1], bQ[2], bQ[3], bQ[4], bQ[5], bQ[6]) } }
}
}
b0.dirtyT = 1;
d.matrix = bU
}
}
d.matrix = bU;
b0.sx = bT;
b0.sy = bS;
b0.deg = bP;
b0.dx = bN = bU.e;
b0.dy = bM = bU.f;
if (bT == 1 && bS == 1 && !bP && b0.bbox) {
b0.bbox.x += +bN;
b0.bbox.y += +bM
} else { b0.dirtyT = 1 }
},
l = function(d) {
var b = d[0];
switch (b.toLowerCase()) {
case "t":
return [b, 0, 0];
case "m":
return [b, 1, 0, 0, 1, 0, 0];
case "r":
if (d.length == 4) { return [b, 0, d[2], d[3]] } else { return [b, 0] }
case "s":
if (d.length == 5) { return [b, 1, 1, d[3], d[4]] } else { if (d.length == 3) { return [b, 1, 1] } else { return [b, 1] } }
}
},
aB = aR._equaliseTransform = function(R, E) {
E = bH(E).replace(/\.{3}|\u2026/g, R);
R = aR.parseTransformString(R) || [];
E = aR.parseTransformString(E) || [];
var b = m(R.length, E.length),
bN = [],
bO = [],
g = 0,
d, S, bM, bL;
for (; g < b; g++) {
bM = R[g] || l(E[g]);
bL = E[g] || l(bM);
if ((bM[0] != bL[0]) || (bM[0].toLowerCase() == "r" && (bM[2] != bL[2] || bM[3] != bL[3])) || (bM[0].toLowerCase() == "s" && (bM[3] != bL[3] || bM[4] != bL[4]))) { return } bN[g] = [];
bO[g] = [];
for (d = 0, S = m(bM.length, bL.length); d < S; d++) {
d in bM && (bN[g][d] = bM[d]);
d in bL && (bO[g][d] = bL[d])
}
}
return { from: bN, to: bO }
};
aR._getContainer = function(b, R, g, E) {
var d;
d = E == null && !aR.is(b, "object") ? aA.doc.getElementById(b) : b;
if (d == null) { return }
if (d.tagName) { if (R == null) { return { container: d, width: d.style.pixelWidth || d.offsetWidth, height: d.style.pixelHeight || d.offsetHeight } } else { return { container: d, width: R, height: g } } }
return { container: 1, x: b, y: R, width: g, height: E }
};
aR.pathToRelative = aC;
aR._engine = {};
aR.path2curve = W;
aR.matrix = function(E, g, bM, bL, S, R) { return new aF(E, g, bM, bL, S, R) };
function aF(E, g, bM, bL, S, R) {
if (E != null) {
this.a = +E;
this.b = +g;
this.c = +bM;
this.d = +bL;
this.e = +S;
this.f = +R
} else {
this.a = 1;
this.b = 0;
this.c = 0;
this.d = 1;
this.e = 0;
this.f = 0
}
}(function(g) {
g.add = function(bU, bR, bP, bN, bL, S) {
var R = [
[],
[],
[]
],
E = [
[this.a, this.c, this.e],
[this.b, this.d, this.f],
[0, 0, 1]
],
bT = [
[bU, bP, bL],
[bR, bN, S],
[0, 0, 1]
],
bS, bQ, bO, bM;
if (bU && bU instanceof aF) {
bT = [
[bU.a, bU.c, bU.e],
[bU.b, bU.d, bU.f],
[0, 0, 1]
]
}
for (bS = 0; bS < 3; bS++) { for (bQ = 0; bQ < 3; bQ++) { bM = 0; for (bO = 0; bO < 3; bO++) { bM += E[bS][bO] * bT[bO][bQ] } R[bS][bQ] = bM } } this.a = R[0][0];
this.b = R[1][0];
this.c = R[0][1];
this.d = R[1][1];
this.e = R[0][2];
this.f = R[1][2]
};
g.invert = function() {
var R = this,
E = R.a * R.d - R.b * R.c;
return new aF(R.d / E, -R.b / E, -R.c / E, R.a / E, (R.c * R.f - R.d * R.e) / E, (R.b * R.e - R.a * R.f) / E)
};
g.clone = function() { return new aF(this.a, this.b, this.c, this.d, this.e, this.f) };
g.translate = function(E, R) { this.add(1, 0, 0, 1, E, R) };
g.scale = function(R, bL, E, S) {
bL == null && (bL = R);
(E || S) && this.add(1, 0, 0, 1, E, S);
this.add(R, 0, 0, bL, 0, 0);
(E || S) && this.add(1, 0, 0, 1, -E, -S)
};
g.rotate = function(R, E, bM) {
R = aR.rad(R);
E = E || 0;
bM = bM || 0;
var bL = +au.cos(R).toFixed(9),
S = +au.sin(R).toFixed(9);
this.add(bL, S, -S, bL, E, bM);
this.add(1, 0, 0, 1, -E, -bM)
};
g.x = function(E, R) { return E * this.a + R * this.c + this.e };
g.y = function(E, R) { return E * this.b + R * this.d + this.f };
g.get = function(E) { return +this[bH.fromCharCode(97 + E)].toFixed(4) };
g.toString = function() { return aR.svg ? "matrix(" + [this.get(0), this.get(1), this.get(2), this.get(3), this.get(4), this.get(5)].join() + ")" : [this.get(0), this.get(2), this.get(1), this.get(3), 0, 0].join() };
g.toFilter = function() { return "progid:DXImageTransform.Microsoft.Matrix(M11=" + this.get(0) + ", M12=" + this.get(2) + ", M21=" + this.get(1) + ", M22=" + this.get(3) + ", Dx=" + this.get(4) + ", Dy=" + this.get(5) + ", sizingmethod='auto expand')" };
g.offset = function() { return [this.e.toFixed(4), this.f.toFixed(4)] };
function d(E) { return E[0] * E[0] + E[1] * E[1] }
function b(E) {
var R = au.sqrt(d(E));
E[0] && (E[0] /= R);
E[1] && (E[1] /= R)
}
g.split = function() {
var R = {};
R.dx = this.e;
R.dy = this.f;
var bL = [
[this.a, this.c],
[this.b, this.d]
];
R.scalex = au.sqrt(d(bL[0]));
b(bL[0]);
R.shear = bL[0][0] * bL[1][0] + bL[0][1] * bL[1][1];
bL[1] = [bL[1][0] - bL[0][0] * R.shear, bL[1][1] - bL[0][1] * R.shear];
R.scaley = au.sqrt(d(bL[1]));
b(bL[1]);
R.shear /= R.scaley;
var E = -bL[0][1],
S = bL[1][1];
if (S < 0) { R.rotate = aR.deg(au.acos(S)); if (E < 0) { R.rotate = 360 - R.rotate } } else { R.rotate = aR.deg(au.asin(E)) } R.isSimple = !+R.shear.toFixed(9) && (R.scalex.toFixed(9) == R.scaley.toFixed(9) || !R.rotate);
R.isSuperSimple = !+R.shear.toFixed(9) && R.scalex.toFixed(9) == R.scaley.toFixed(9) && !R.rotate;
R.noRotation = !+R.shear.toFixed(9) && !R.rotate;
return R
};
g.toTransformString = function(E) {
var R = E || this[F]();
if (R.isSimple) {
R.scalex = +R.scalex.toFixed(4);
R.scaley = +R.scaley.toFixed(4);
R.rotate = +R.rotate.toFixed(4);
return (R.dx || R.dy ? "t" + [R.dx, R.dy] : aX) + (R.scalex != 1 || R.scaley != 1 ? "s" + [R.scalex, R.scaley, 0, 0] : aX) + (R.rotate ? "r" + [R.rotate, 0, 0] : aX)
} else { return "m" + [this.get(0), this.get(1), this.get(2), this.get(3), this.get(4), this.get(5)] }
}
})(aF.prototype);
var V = navigator.userAgent.match(/Version\/(.*?)\s/) || navigator.userAgent.match(/Chrome\/(\d+)/);
if ((navigator.vendor == "Apple Computer, Inc.") && (V && V[1] < 4 || navigator.platform.slice(0, 2) == "iP") || (navigator.vendor == "Google Inc." && V && V[1] < 8)) {
a4.safari = function() {
var b = this.rect(-99, -99, this.width + 99, this.height + 99).attr({ stroke: "none" });
setTimeout(function() { b.remove() })
}
} else { a4.safari = I }
var P = function() { this.returnValue = false },
bD = function() { return this.originalEvent.preventDefault() },
a8 = function() { this.cancelBubble = true },
aJ = function() { return this.originalEvent.stopPropagation() },
aD = (function() {
if (aA.doc.addEventListener) {
return function(S, E, g, d) {
var b = Z && bx[E] ? bx[E] : E,
R = function(bQ) {
var bP = aA.doc.documentElement.scrollTop || aA.doc.body.scrollTop,
bR = aA.doc.documentElement.scrollLeft || aA.doc.body.scrollLeft,
bL = bQ.clientX + bR,
bS = bQ.clientY + bP;
if (Z && bx[ak](E)) {
for (var bN = 0, bO = bQ.targetTouches && bQ.targetTouches.length; bN < bO; bN++) {
if (bQ.targetTouches[bN].target == S) {
var bM = bQ;
bQ = bQ.targetTouches[bN];
bQ.originalEvent = bM;
bQ.preventDefault = bD;
bQ.stopPropagation = aJ;
break
}
}
}
return g.call(d, bQ, bL, bS)
};
S.addEventListener(b, R, false);
return function() { S.removeEventListener(b, R, false); return true }
}
} else {
if (aA.doc.attachEvent) {
return function(S, E, g, d) {
var R = function(bN) {
bN = bN || aA.win.event;
var bM = aA.doc.documentElement.scrollTop || aA.doc.body.scrollTop,
bO = aA.doc.documentElement.scrollLeft || aA.doc.body.scrollLeft,
bL = bN.clientX + bO,
bP = bN.clientY + bM;
bN.preventDefault = bN.preventDefault || P;
bN.stopPropagation = bN.stopPropagation || a8;
return g.call(d, bN, bL, bP)
};
S.attachEvent("on" + E, R);
var b = function() { S.detachEvent("on" + E, R); return true };
return b
}
}
}
})(),
be = [],
by = function(bM) {
var bP = bM.clientX,
bO = bM.clientY,
bR = aA.doc.documentElement.scrollTop || aA.doc.body.scrollTop,
bS = aA.doc.documentElement.scrollLeft || aA.doc.body.scrollLeft,
g, E = be.length;
while (E--) {
g = be[E];
if (Z) {
var S = bM.touches.length,
R;
while (S--) {
R = bM.touches[S];
if (R.identifier == g.el._drag.id) {
bP = R.clientX;
bO = R.clientY;
(bM.originalEvent ? bM.originalEvent : bM).preventDefault();
break
}
}
} else { bM.preventDefault() }
var d = g.el.node,
b, bL = d.nextSibling,
bQ = d.parentNode,
bN = d.style.display;
aA.win.opera && bQ.removeChild(d);
d.style.display = "none";
b = g.el.paper.getElementByPoint(bP, bO);
d.style.display = bN;
aA.win.opera && (bL ? bQ.insertBefore(d, bL) : bQ.appendChild(d));
b && eve("raphael.drag.over." + g.el.id, g.el, b);
bP += bS;
bO += bR;
eve("raphael.drag.move." + g.el.id, g.move_scope || g.el, bP - g.el._drag.x, bO - g.el._drag.y, bP, bO, bM)
}
},
e = function(g) {
aR.unmousemove(by).unmouseup(e);
var d = be.length,
b;
while (d--) {
b = be[d];
b.el._drag = {};
eve("raphael.drag.end." + b.el.id, b.end_scope || b.start_scope || b.move_scope || b.el, g)
}
be = []
},
bh = aR.el = {};
for (var ax = Q.length; ax--;) {
(function(b) {
aR[b] = bh[b] = function(g, d) {
if (aR.is(g, "function")) {
this.events = this.events || [];
this.events.push({ name: b, f: g, unbind: aD(this.shape || this.node || aA.doc, b, g, d || this) })
}
return this
};
aR["un" + b] = bh["un" + b] = function(E) {
var g = this.events || [],
d = g.length;
while (d--) {
if (g[d].name == b && g[d].f == E) {
g[d].unbind();
g.splice(d, 1);
!g.length && delete this.events;
return this
}
}
return this
}
})(Q[ax])
}
bh.data = function(d, E) {
var g = aU[this.id] = aU[this.id] || {};
if (arguments.length == 1) { if (aR.is(d, "object")) { for (var b in d) { if (d[ak](b)) { this.data(b, d[b]) } } return this } eve("raphael.data.get." + this.id, this, g[d], d); return g[d] } g[d] = E;
eve("raphael.data.set." + this.id, this, E, d);
return this
};
bh.removeData = function(b) { if (b == null) { aU[this.id] = {} } else { aU[this.id] && delete aU[this.id][b] } return this };
bh.hover = function(E, b, g, d) { return this.mouseover(E, g).mouseout(b, d || g) };
bh.unhover = function(d, b) { return this.unmouseover(d).unmouseout(b) };
var bu = [];
bh.drag = function(d, S, R, b, g, E) {
function bL(bN) {
(bN.originalEvent || bN).preventDefault();
var bM = aA.doc.documentElement.scrollTop || aA.doc.body.scrollTop,
bO = aA.doc.documentElement.scrollLeft || aA.doc.body.scrollLeft;
this._drag.x = bN.clientX + bO;
this._drag.y = bN.clientY + bM;
this._drag.id = bN.identifier;
!be.length && aR.mousemove(by).mouseup(e);
be.push({ el: this, move_scope: b, start_scope: g, end_scope: E });
S && eve.on("raphael.drag.start." + this.id, S);
d && eve.on("raphael.drag.move." + this.id, d);
R && eve.on("raphael.drag.end." + this.id, R);
eve("raphael.drag.start." + this.id, g || b || this, bN.clientX + bO, bN.clientY + bM, bN)
}
this._drag = {};
bu.push({ el: this, start: bL });
this.mousedown(bL);
return this
};
bh.onDragOver = function(b) { b ? eve.on("raphael.drag.over." + this.id, b) : eve.unbind("raphael.drag.over." + this.id) };
bh.undrag = function() {
var b = bu.length;
while (b--) {
if (bu[b].el == this) {
this.unmousedown(bu[b].start);
bu.splice(b, 1);
eve.unbind("raphael.drag.*." + this.id)
}
}!bu.length && aR.unmousemove(by).unmouseup(e)
};
a4.circle = function(b, E, g) {
var d = aR._engine.circle(this, b || 0, E || 0, g || 0);
this.__set__ && this.__set__.push(d);
return d
};
a4.rect = function(b, S, d, E, R) {
var g = aR._engine.rect(this, b || 0, S || 0, d || 0, E || 0, R || 0);
this.__set__ && this.__set__.push(g);
return g
};
a4.ellipse = function(b, R, E, g) {
var d = aR._engine.ellipse(this, b || 0, R || 0, E || 0, g || 0);
this.__set__ && this.__set__.push(d);
return d
};
a4.path = function(b) {
b && !aR.is(b, aj) && !aR.is(b[0], bd) && (b += aX);
var d = aR._engine.path(aR.format[bG](aR, arguments), this);
this.__set__ && this.__set__.push(d);
return d
};
a4.image = function(R, b, S, d, E) {
var g = aR._engine.image(this, R || "about:blank", b || 0, S || 0, d || 0, E || 0);
this.__set__ && this.__set__.push(g);
return g
};
a4.text = function(b, E, g) {
var d = aR._engine.text(this, b || 0, E || 0, bH(g));
this.__set__ && this.__set__.push(d);
return d
};
a4.set = function(d) {
!aR.is(d, "array") && (d = Array.prototype.splice.call(arguments, 0, arguments.length));
var b = new al(d);
this.__set__ && this.__set__.push(b);
return b
};
a4.setStart = function(b) { this.__set__ = b || this.set() };
a4.setFinish = function(d) {
var b = this.__set__;
delete this.__set__;
return b
};
a4.setSize = function(d, b) { return aR._engine.setSize.call(this, d, b) };
a4.setViewBox = function(b, R, d, E, g) { return aR._engine.setViewBox.call(this, b, R, d, E, g) };
a4.top = a4.bottom = null;
a4.raphael = aR;
var bs = function(g) {
var R = g.getBoundingClientRect(),
bN = g.ownerDocument,
S = bN.body,
b = bN.documentElement,
E = b.clientTop || S.clientTop || 0,
bL = b.clientLeft || S.clientLeft || 0,
bM = R.top + (aA.win.pageYOffset || b.scrollTop || S.scrollTop) - E,
d = R.left + (aA.win.pageXOffset || b.scrollLeft || S.scrollLeft) - bL;
return { y: bM, x: d }
};
a4.getElementByPoint = function(d, bM) {
var bL = this,
g = bL.canvas,
S = aA.doc.elementFromPoint(d, bM);
if (aA.win.opera && S.tagName == "svg") {
var R = bs(g),
E = g.createSVGRect();
E.x = d - R.x;
E.y = bM - R.y;
E.width = E.height = 1;
var b = g.getIntersectionList(E, null);
if (b.length) { S = b[b.length - 1] }
}
if (!S) { return null }
while (S.parentNode && S != g.parentNode && !S.raphael) { S = S.parentNode } S == bL.canvas.parentNode && (S = g);
S = S && S.raphael ? bL.getById(S.raphaelid) : null;
return S
};
a4.getById = function(d) { var b = this.bottom; while (b) { if (b.id == d) { return b } b = b.next } return null };
a4.forEach = function(g, b) { var d = this.bottom; while (d) { if (g.call(b, d) === false) { return this } d = d.next } return this };
a4.getElementsByPoint = function(b, g) {
var d = this.set();
this.forEach(function(E) { if (E.isPointInside(b, g)) { d.push(E) } });
return d
};
function y() { return this.x + aQ + this.y }
function at() { return this.x + aQ + this.y + aQ + this.width + " \xd7 " + this.height } bh.isPointInside = function(b, g) { var d = this.realPath = this.realPath || N[this.type](this); return aR.isPointInsidePath(d, b, g) };
bh.getBBox = function(d) {
if (this.removed) { return {} }
var b = this._;
if (d) {
if (b.dirty || !b.bboxwt) {
this.realPath = N[this.type](this);
b.bboxwt = am(this.realPath);
b.bboxwt.toString = at;
b.dirty = 0
}
return b.bboxwt
}
if (b.dirty || b.dirtyT || !b.bbox) {
if (b.dirty || !this.realPath) {
b.bboxwt = 0;
this.realPath = N[this.type](this)
}
b.bbox = am(L(this.realPath, this.matrix));
b.bbox.toString = at;
b.dirty = b.dirtyT = 0
}
return b.bbox
};
bh.clone = function() {
if (this.removed) { return null }
var b = this.paper[this.type]().attr(this.attr());
this.__set__ && this.__set__.push(b);
return b
};
bh.glow = function(bL) {
if (this.type == "text") { return null } bL = bL || {};
var g = { width: (bL.width || 10) + (+this.attr("stroke-width") || 1), fill: bL.fill || false, opacity: bL.opacity || 0.5, offsetx: bL.offsetx || 0, offsety: bL.offsety || 0, color: bL.color || "#000" },
S = g.width / 2,
E = this.paper,
b = E.set(),
R = this.realPath || N[this.type](this);
R = this.matrix ? L(R, this.matrix) : R;
for (var d = 1; d < S + 1; d++) { b.push(E.path(R).attr({ stroke: g.color, fill: g.fill ? g.color : "none", "stroke-linejoin": "round", "stroke-linecap": "round", "stroke-width": +(g.width / S * d).toFixed(3), opacity: +(g.opacity / S).toFixed(3) })) }
return b.insertBefore(this).translate(g.offsetx, g.offsety)
};
var a7 = {},
k = function(d, b, R, E, bN, bM, bL, S, g) { if (g == null) { return q(d, b, R, E, bN, bM, bL, S) } else { return aR.findDotsAtSegment(d, b, R, E, bN, bM, bL, S, C(d, b, R, E, bN, bM, bL, S, g)) } },
a6 = function(b, d) {
return function(bT, R, S) {
bT = W(bT);
var bP, bO, g, bL, E = "",
bS = {},
bQ, bN = 0;
for (var bM = 0, bR = bT.length; bM < bR; bM++) {
g = bT[bM];
if (g[0] == "M") {
bP = +g[1];
bO = +g[2]
} else {
bL = k(bP, bO, g[1], g[2], g[3], g[4], g[5], g[6]);
if (bN + bL > R) {
if (d && !bS.start) {
bQ = k(bP, bO, g[1], g[2], g[3], g[4], g[5], g[6], R - bN);
E += ["C" + bQ.start.x, bQ.start.y, bQ.m.x, bQ.m.y, bQ.x, bQ.y];
if (S) { return E } bS.start = E;
E = ["M" + bQ.x, bQ.y + "C" + bQ.n.x, bQ.n.y, bQ.end.x, bQ.end.y, g[5], g[6]].join();
bN += bL;
bP = +g[5];
bO = +g[6];
continue
}
if (!b && !d) { bQ = k(bP, bO, g[1], g[2], g[3], g[4], g[5], g[6], R - bN); return { x: bQ.x, y: bQ.y, alpha: bQ.alpha } }
}
bN += bL;
bP = +g[5];
bO = +g[6]
}
E += g.shift() + g
}
bS.end = E;
bQ = b ? bN : d ? bS : aR.findDotsAtSegment(bP, bO, g[0], g[1], g[2], g[3], g[4], g[5], 1);
bQ.alpha && (bQ = { x: bQ.x, y: bQ.y, alpha: bQ.alpha });
return bQ
}
};
var aS = a6(1),
J = a6(),
ad = a6(0, 1);
aR.getTotalLength = aS;
aR.getPointAtLength = J;
aR.getSubpath = function(d, E, g) { if (this.getTotalLength(d) - g < 0.000001) { return ad(d, E).end } var b = ad(d, g, 1); return E ? ad(b, E).end : b };
bh.getTotalLength = function() { if (this.type != "path") { return } if (this.node.getTotalLength) { return this.node.getTotalLength() } return aS(this.attrs.path) };
bh.getPointAtLength = function(b) { if (this.type != "path") { return } return J(this.attrs.path, b) };
bh.getSubpath = function(d, b) { if (this.type != "path") { return } return aR.getSubpath(this.attrs.path, d, b) };
var o = aR.easing_formulas = {
linear: function(b) { return b },
"<": function(b) { return bp(b, 1.7) },
">": function(b) { return bp(b, 0.48) },
"<>": function(bM) {
var E = 0.48 - bM / 1.04,
g = au.sqrt(0.1734 + E * E),
b = g - E,
bL = bp(aw(b), 1 / 3) * (b < 0 ? -1 : 1),
S = -g - E,
R = bp(aw(S), 1 / 3) * (S < 0 ? -1 : 1),
d = bL + R + 0.5;
return (1 - d) * 3 * d * d + d * d * d
},
backIn: function(d) { var b = 1.70158; return d * d * ((b + 1) * d - b) },
backOut: function(d) { d = d - 1; var b = 1.70158; return d * d * ((b + 1) * d + b) + 1 },
elastic: function(b) { if (b == !!b) { return b } return bp(2, -10 * b) * au.sin((b - 0.075) * (2 * aV) / 0.3) + 1 },
bounce: function(E) {
var d = 7.5625,
g = 2.75,
b;
if (E < (1 / g)) { b = d * E * E } else {
if (E < (2 / g)) {
E -= (1.5 / g);
b = d * E * E + 0.75
} else {
if (E < (2.5 / g)) {
E -= (2.25 / g);
b = d * E * E + 0.9375
} else {
E -= (2.625 / g);
b = d * E * E + 0.984375
}
}
}
return b
}
};
o.easeIn = o["ease-in"] = o["<"];
o.easeOut = o["ease-out"] = o[">"];
o.easeInOut = o["ease-in-out"] = o["<>"];
o["back-in"] = o.backIn;
o["back-out"] = o.backOut;
var ab = [],
aN = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(b) { setTimeout(b, 16) },
bC = function() {
var bL = +new Date,
bT = 0;
for (; bT < ab.length; bT++) {
var bZ = ab[bT];
if (bZ.el.removed || bZ.paused) { continue }
var E = bL - bZ.start,
bR = bZ.ms,
bQ = bZ.easing,
bU = bZ.from,
bO = bZ.diff,
d = bZ.to,
bN = bZ.t,
S = bZ.el,
bP = {},
b, bX = {},
b1;
if (bZ.initstatus) {
E = (bZ.initstatus * bZ.anim.top - bZ.prev) / (bZ.percent - bZ.prev) * bR;
bZ.status = bZ.initstatus;
delete bZ.initstatus;
bZ.stop && ab.splice(bT--, 1)
} else { bZ.status = (bZ.prev + (bZ.percent - bZ.prev) * (E / bR)) / bZ.anim.top }
if (E < 0) { continue }
if (E < bR) {
var g = bQ(E / bR);
for (var bS in bU) {
if (bU[ak](bS)) {
switch (ar[bS]) {
case aL:
b = +bU[bS] + g * bR * bO[bS];
break;
case "colour":
b = "rgb(" + [H(ah(bU[bS].r + g * bR * bO[bS].r)), H(ah(bU[bS].g + g * bR * bO[bS].g)), H(ah(bU[bS].b + g * bR * bO[bS].b))].join(",") + ")";
break;
case "path":
b = [];
for (var bW = 0, bM = bU[bS].length; bW < bM; bW++) { b[bW] = [bU[bS][bW][0]]; for (var bV = 1, bY = bU[bS][bW].length; bV < bY; bV++) { b[bW][bV] = +bU[bS][bW][bV] + g * bR * bO[bS][bW][bV] } b[bW] = b[bW].join(aQ) } b = b.join(aQ);
break;
case "transform":
if (bO[bS].real) { b = []; for (bW = 0, bM = bU[bS].length; bW < bM; bW++) { b[bW] = [bU[bS][bW][0]]; for (bV = 1, bY = bU[bS][bW].length; bV < bY; bV++) { b[bW][bV] = bU[bS][bW][bV] + g * bR * bO[bS][bW][bV] } } } else {
var b0 = function(b2) { return +bU[bS][b2] + g * bR * bO[bS][b2] };
b = [
["m", b0(0), b0(1), b0(2), b0(3), b0(4), b0(5)]
]
}
break;
case "csv":
if (bS == "clip-rect") {
b = [];
bW = 4;
while (bW--) { b[bW] = +bU[bS][bW] + g * bR * bO[bS][bW] }
}
break;
default:
var R = [][bE](bU[bS]);
b = [];
bW = S.paper.customAttributes[bS].length;
while (bW--) { b[bW] = +R[bW] + g * bR * bO[bS][bW] }
break
}
bP[bS] = b
}
}
S.attr(bP);
(function(b4, b2, b3) { setTimeout(function() { eve("raphael.anim.frame." + b4, b2, b3) }) })(S.id, S, bZ.anim)
} else {
(function(b4, b3, b2) {
setTimeout(function() {
eve("raphael.anim.frame." + b3.id, b3, b2);
eve("raphael.anim.finish." + b3.id, b3, b2);
aR.is(b4, "function") && b4.call(b3)
})
})(bZ.callback, S, bZ.anim);
S.attr(d);
ab.splice(bT--, 1);
if (bZ.repeat > 1 && !bZ.next) {
for (b1 in d) { if (d[ak](b1)) { bX[b1] = bZ.totalOrigin[b1] } } bZ.el.attr(bX);
aM(bZ.anim, bZ.el, bZ.anim.percents[0], null, bZ.totalOrigin, bZ.repeat - 1)
}
if (bZ.next && !bZ.stop) { aM(bZ.anim, bZ.el, bZ.next, null, bZ.totalOrigin, bZ.repeat) }
}
}
aR.svg && S && S.paper && S.paper.safari();
ab.length && aN(bC)
},
H = function(b) { return b > 255 ? 255 : b < 0 ? 0 : b };
bh.animateWith = function(d, E, g, b, bL, bQ) {
var S = this;
if (S.removed) { bQ && bQ.call(S); return S }
var bO = g instanceof bA ? g : aR.animation(g, b, bL, bQ),
bN, bM;
aM(bO, S, bO.percents[0], null, S.attr());
for (var R = 0, bP = ab.length; R < bP; R++) { if (ab[R].anim == E && ab[R].el == d) { ab[bP - 1].start = ab[R].start; break } }
return S
};
function a3(bS, E, d, bR, bQ, bM) {
var bN = 3 * E,
bP = 3 * (bR - E) - bN,
b = 1 - bN - bP,
bL = 3 * d,
bO = 3 * (bQ - d) - bL,
bT = 1 - bL - bO;
function S(bU) { return ((b * bU + bP) * bU + bN) * bU }
function g(bU, bW) { var bV = R(bU, bW); return ((bT * bV + bO) * bV + bL) * bV }
function R(bU, b1) {
var b0, bZ, bX, bV, bY, bW;
for (bX = bU, bW = 0; bW < 8; bW++) { bV = S(bX) - bU; if (aw(bV) < b1) { return bX } bY = (3 * b * bX + 2 * bP) * bX + bN; if (aw(bY) < 0.000001) { break } bX = bX - bV / bY } b0 = 0;
bZ = 1;
bX = bU;
if (bX < b0) { return b0 }
if (bX > bZ) { return bZ }
while (b0 < bZ) { bV = S(bX); if (aw(bV - bU) < b1) { return bX } if (bU > bV) { b0 = bX } else { bZ = bX } bX = (bZ - b0) / 2 + b0 }
return bX
}
return g(bS, 1 / (200 * bM))
}
bh.onAnimation = function(b) { b ? eve.on("raphael.anim.frame." + this.id, b) : eve.unbind("raphael.anim.frame." + this.id); return this };
function bA(R, g) {
var d = [],
E = {};
this.ms = g;
this.times = 1;
if (R) {
for (var b in R) {
if (R[ak](b)) {
E[an(b)] = R[b];
d.push(an(b))
}
}
d.sort(u)
}
this.anim = E;
this.top = d[d.length - 1];
this.percents = d
}
bA.prototype.delay = function(d) {
var b = new bA(this.anim, this.ms);
b.times = this.times;
b.del = +d || 0;
return b
};
bA.prototype.repeat = function(d) {
var b = new bA(this.anim, this.ms);
b.del = this.del;
b.times = au.floor(m(d, 0)) || 1;
return b
};
function aM(b3, g, b, b1, bL, bP) {
b = an(b);
var ca, S, bO, cb = [],
bV, bU, R, bX = b3.ms,
b2 = {},
E = {},
bR = {};
if (b1) {
for (b6 = 0, bQ = ab.length; b6 < bQ; b6++) {
var b8 = ab[b6];
if (b8.el.id == g.id && b8.anim == b3) {
if (b8.percent != b) {
ab.splice(b6, 1);
bO = 1
} else { S = b8 } g.attr(b8.totalOrigin);
break
}
}
} else { b1 = +E }
for (var b6 = 0, bQ = b3.percents.length; b6 < bQ; b6++) {
if (b3.percents[b6] == b || b3.percents[b6] > b1 * b3.top) {
b = b3.percents[b6];
bU = b3.percents[b6 - 1] || 0;
bX = bX / b3.top * (b - bU);
bV = b3.percents[b6 + 1];
ca = b3.anim[b];
break
} else { if (b1) { g.attr(b3.anim[b3.percents[b6]]) } }
}
if (!ca) { return }
if (!S) {
for (var bZ in ca) {
if (ca[ak](bZ)) {
if (ar[ak](bZ) || g.paper.customAttributes[ak](bZ)) {
b2[bZ] = g.attr(bZ);
(b2[bZ] == null) && (b2[bZ] = r[bZ]);
E[bZ] = ca[bZ];
switch (ar[bZ]) {
case aL:
bR[bZ] = (E[bZ] - b2[bZ]) / bX;
break;
case "colour":
b2[bZ] = aR.getRGB(b2[bZ]);
var b0 = aR.getRGB(E[bZ]);
bR[bZ] = { r: (b0.r - b2[bZ].r) / bX, g: (b0.g - b2[bZ].g) / bX, b: (b0.b - b2[bZ].b) / bX };
break;
case "path":
var bM = W(b2[bZ], E[bZ]),
bT = bM[1];
b2[bZ] = bM[0];
bR[bZ] = [];
for (b6 = 0, bQ = b2[bZ].length; b6 < bQ; b6++) { bR[bZ][b6] = [0]; for (var b5 = 1, b7 = b2[bZ][b6].length; b5 < b7; b5++) { bR[bZ][b6][b5] = (bT[b6][b5] - b2[bZ][b6][b5]) / bX } }
break;
case "transform":
var cd = g._,
cc = aB(cd[bZ], E[bZ]);
if (cc) {
b2[bZ] = cc.from;
E[bZ] = cc.to;
bR[bZ] = [];
bR[bZ].real = true;
for (b6 = 0, bQ = b2[bZ].length; b6 < bQ; b6++) { bR[bZ][b6] = [b2[bZ][b6][0]]; for (b5 = 1, b7 = b2[bZ][b6].length; b5 < b7; b5++) { bR[bZ][b6][b5] = (E[bZ][b6][b5] - b2[bZ][b6][b5]) / bX } }
} else {
var bY = (g.matrix || new aF),
b9 = { _: { transform: cd.transform }, getBBox: function() { return g.getBBox(1) } };
b2[bZ] = [bY.a, bY.b, bY.c, bY.d, bY.e, bY.f];
aO(b9, E[bZ]);
E[bZ] = b9._.transform;
bR[bZ] = [(b9.matrix.a - bY.a) / bX, (b9.matrix.b - bY.b) / bX, (b9.matrix.c - bY.c) / bX, (b9.matrix.d - bY.d) / bX, (b9.matrix.e - bY.e) / bX, (b9.matrix.f - bY.f) / bX]
}
break;
case "csv":
var d = bH(ca[bZ])[F](a),
bN = bH(b2[bZ])[F](a);
if (bZ == "clip-rect") {
b2[bZ] = bN;
bR[bZ] = [];
b6 = bN.length;
while (b6--) { bR[bZ][b6] = (d[b6] - b2[bZ][b6]) / bX }
}
E[bZ] = d;
break;
default:
d = [][bE](ca[bZ]);
bN = [][bE](b2[bZ]);
bR[bZ] = [];
b6 = g.paper.customAttributes[bZ].length;
while (b6--) { bR[bZ][b6] = ((d[b6] || 0) - (bN[b6] || 0)) / bX }
break
}
}
}
}
var bW = ca.easing,
b4 = aR.easing_formulas[bW];
if (!b4) {
b4 = bH(bW).match(c);
if (b4 && b4.length == 5) {
var bS = b4;
b4 = function(ce) { return a3(ce, +bS[1], +bS[2], +bS[3], +bS[4], bX) }
} else { b4 = bB }
}
R = ca.start || b3.start || +new Date;
b8 = { anim: b3, percent: b, timestamp: R, start: R + (b3.del || 0), status: 0, initstatus: b1 || 0, stop: false, ms: bX, easing: b4, from: b2, diff: bR, to: E, el: g, callback: ca.callback, prev: bU, next: bV, repeat: bP || b3.times, origin: g.attr(), totalOrigin: bL };
ab.push(b8);
if (b1 && !S && !bO) {
b8.stop = true;
b8.start = new Date - bX * b1;
if (ab.length == 1) { return bC() }
}
if (bO) { b8.start = new Date - b8.ms * b1 } ab.length == 1 && aN(bC)
} else {
S.initstatus = b1;
S.start = new Date - S.ms * b1
}
eve("raphael.anim.start." + g.id, g, b3)
}
aR.animation = function(R, d, bL, S) {
if (R instanceof bA) { return R }
if (aR.is(bL, "function") || !bL) {
S = S || bL || null;
bL = null
}
R = Object(R);
d = +d || 0;
var E = {},
g, b;
for (b in R) {
if (R[ak](b) && an(b) != b && an(b) + "%" != b) {
g = true;
E[b] = R[b]
}
}
if (!g) { return new bA(R, d) } else {
bL && (E.easing = bL);
S && (E.callback = S);
return new bA({ 100: E }, d)
}
};
bh.animate = function(E, b, S, R) {
var d = this;
if (d.removed) { R && R.call(d); return d }
var g = E instanceof bA ? E : aR.animation(E, b, S, R);
aM(g, d, g.percents[0], null, d.attr());
return d
};
bh.setTime = function(d, b) { if (d && b != null) { this.status(d, bm(b, d.ms) / d.ms) } return this };
bh.status = function(R, E) {
var d = [],
g = 0,
b, S;
if (E != null) { aM(R, this, -1, bm(E, 1)); return this } else { b = ab.length; for (; g < b; g++) { S = ab[g]; if (S.el.id == this.id && (!R || S.anim == R)) { if (R) { return S.status } d.push({ anim: S.anim, status: S.status }) } } if (R) { return 0 } return d }
};
bh.pause = function(d) { for (var b = 0; b < ab.length; b++) { if (ab[b].el.id == this.id && (!d || ab[b].anim == d)) { if (eve("raphael.anim.pause." + this.id, this, ab[b].anim) !== false) { ab[b].paused = true } } } return this };
bh.resume = function(d) {
for (var b = 0; b < ab.length; b++) {
if (ab[b].el.id == this.id && (!d || ab[b].anim == d)) {
var g = ab[b];
if (eve("raphael.anim.resume." + this.id, this, g.anim) !== false) {
delete g.paused;
this.status(g.anim, g.status)
}
}
}
return this
};
bh.stop = function(d) { for (var b = 0; b < ab.length; b++) { if (ab[b].el.id == this.id && (!d || ab[b].anim == d)) { if (eve("raphael.anim.stop." + this.id, this, ab[b].anim) !== false) { ab.splice(b--, 1) } } } return this };
function aa(d) { for (var b = 0; b < ab.length; b++) { if (ab[b].el.paper == d) { ab.splice(b--, 1) } } } eve.on("raphael.remove", aa);
eve.on("raphael.clear", aa);
bh.toString = function() { return "Rapha\xebl\u2019s object" };
var al = function(b) {
this.items = [];
this.length = 0;
this.type = "set";
if (b) {
for (var d = 0, g = b.length; d < g; d++) {
if (b[d] && (b[d].constructor == bh.constructor || b[d].constructor == al)) {
this[this.items.length] = this.items[this.items.length] = b[d];
this.length++
}
}
}
},
bc = al.prototype;
bc.push = function() {
var E, b;
for (var d = 0, g = arguments.length; d < g; d++) {
E = arguments[d];
if (E && (E.constructor == bh.constructor || E.constructor == al)) {
b = this.items.length;
this[b] = this.items[b] = E;
this.length++
}
}
return this
};
bc.pop = function() { this.length && delete this[this.length--]; return this.items.pop() };
bc.forEach = function(E, b) { for (var d = 0, g = this.items.length; d < g; d++) { if (E.call(b, this.items[d], d) === false) { return this } } return this };
for (var B in bh) { if (bh[ak](B)) { bc[B] = (function(b) { return function() { var d = arguments; return this.forEach(function(g) { g[b][bG](g, d) }) } })(B) } } bc.attr = function(d, S) { if (d && aR.is(d, bd) && aR.is(d[0], "object")) { for (var b = 0, R = d.length; b < R; b++) { this.items[b].attr(d[b]) } } else { for (var g = 0, E = this.items.length; g < E; g++) { this.items[g].attr(d, S) } } return this };
bc.clear = function() { while (this.length) { this.pop() } };
bc.splice = function(E, bL, bM) {
E = E < 0 ? m(this.length + E, 0) : E;
bL = m(0, bm(this.length - E, bL));
var g = [],
b = [],
d = [],
R;
for (R = 2; R < arguments.length; R++) { d.push(arguments[R]) }
for (R = 0; R < bL; R++) { b.push(this[E + R]) }
for (; R < this.length - E; R++) { g.push(this[E + R]) }
var S = d.length;
for (R = 0; R < S + g.length; R++) { this.items[E + R] = this[E + R] = R < S ? d[R] : g[R - S] } R = this.items.length = this.length -= bL - S;
while (this[R]) { delete this[R++] }
return new al(b)
};
bc.exclude = function(g) { for (var b = 0, d = this.length; b < d; b++) { if (this[b] == g) { this.splice(b, 1); return true } } };
bc.animate = function(g, b, bL, bN) {
(aR.is(bL, "function") || !bL) && (bN = bL || null);
var S = this.items.length,
E = S,
bO, bM = this,
R;
if (!S) { return this } bN && (R = function() {!--S && bN.call(bM) });
bL = aR.is(bL, aj) ? bL : R;
var d = aR.animation(g, b, bL, R);
bO = this.items[--E].animate(d);
while (E--) { this.items[E] && !this.items[E].removed && this.items[E].animateWith(bO, d, d) }
return this
};
bc.insertAfter = function(d) { var b = this.items.length; while (b--) { this.items[b].insertAfter(d) } return this };
bc.getBBox = function() {
var b = [],
S = [],
d = [],
E = [];
for (var g = this.items.length; g--;) {
if (!this.items[g].removed) {
var R = this.items[g].getBBox();
b.push(R.x);
S.push(R.y);
d.push(R.x + R.width);
E.push(R.y + R.height)
}
}
b = bm[bG](0, b);
S = bm[bG](0, S);
d = m[bG](0, d);
E = m[bG](0, E);
return { x: b, y: S, x2: d, y2: E, width: d - b, height: E - S }
};
bc.clone = function(g) { g = new al; for (var b = 0, d = this.items.length; b < d; b++) { g.push(this.items[b].clone()) } return g };
bc.toString = function() { return "Rapha\xebl\u2018s set" };
aR.registerFont = function(d) {
if (!d.face) { return d } this.fonts = this.fonts || {};
var E = { w: d.w, face: {}, glyphs: {} },
g = d.face["font-family"];
for (var bL in d.face) { if (d.face[ak](bL)) { E.face[bL] = d.face[bL] } }
if (this.fonts[g]) { this.fonts[g].push(E) } else { this.fonts[g] = [E] }
if (!d.svg) {
E.face["units-per-em"] = U(d.face["units-per-em"], 10);
for (var R in d.glyphs) {
if (d.glyphs[ak](R)) {
var S = d.glyphs[R];
E.glyphs[R] = { w: S.w, k: {}, d: S.d && "M" + S.d.replace(/[mlcxtrv]/g, function(bM) { return { l: "L", c: "C", x: "z", t: "m", r: "l", v: "c" } [bM] || "M" }) + "z" };
if (S.k) { for (var b in S.k) { if (S[ak](b)) { E.glyphs[R].k[b] = S.k[b] } } }
}
}
}
return d
};
a4.getFont = function(bM, bN, d, E) {
E = E || "normal";
d = d || "normal";
bN = +bN || { normal: 400, bold: 700, lighter: 300, bolder: 800 } [bN] || 400;
if (!aR.fonts) { return }
var R = aR.fonts[bM];
if (!R) { var g = new RegExp("(^|\\s)" + bM.replace(/[^\w\d\s+!~.:_-]/g, aX) + "(\\s|$)", "i"); for (var b in aR.fonts) { if (aR.fonts[ak](b)) { if (g.test(b)) { R = aR.fonts[b]; break } } } }
var S;
if (R) { for (var bL = 0, bO = R.length; bL < bO; bL++) { S = R[bL]; if (S.face["font-weight"] == bN && (S.face["font-style"] == d || !S.face["font-style"]) && S.face["font-stretch"] == E) { break } } }
return S
};
a4.print = function(bL, S, b, bO, bP, bY, d) {
bY = bY || "middle";
d = m(bm(d || 0, 1), -1);
var bX = bH(b)[F](aX),
bU = 0,
bW = 0,
bS = aX,
bZ;
aR.is(bO, b) && (bO = this.getFont(bO));
if (bO) {
bZ = (bP || 16) / bO.face["units-per-em"];
var E = bO.face.bbox[F](a),
bN = +E[0],
g = E[3] - E[1],
R = 0,
bQ = +E[1] + (bY == "baseline" ? g + (+bO.face.descent) : g / 2);
for (var bT = 0, bM = bX.length; bT < bM; bT++) {
if (bX[bT] == "\n") {
bU = 0;
bV = 0;
bW = 0;
R += g
} else {
var bR = bW && bO.glyphs[bX[bT - 1]] || {},
bV = bO.glyphs[bX[bT]];
bU += bW ? (bR.w || bO.w) + (bR.k && bR.k[bX[bT]] || 0) + (bO.w * d) : 0;
bW = 1
}
if (bV && bV.d) { bS += aR.transformPath(bV.d, ["t", bU * bZ, R * bZ, "s", bZ, bZ, bN, bQ, "t", (bL - bN) / bZ, (S - bQ) / bZ]) }
}
}
return this.path(bS).attr({ fill: "#000", stroke: "none" })
};
a4.add = function(E) {
if (aR.is(E, "array")) {
var g = this.set(),
d = 0,
R = E.length,
b;
for (; d < R; d++) {
b = E[d] || {};
bw[ak](b.type) && g.push(this[b.type]().attr(b))
}
}
return g
};
aR.format = function(d, g) {
var b = aR.is(g, bd) ? [0][bE](g) : arguments;
d && aR.is(d, aj) && b.length - 1 && (d = d.replace(br, function(R, E) { return b[++E] == null ? aX : b[E] }));
return d || aX
};
aR.fullfill = (function() {
var g = /\{([^\}]+)\}/g,
b = /(?:(?:^|\.)(.+?)(?=\[|\.|$|\()|\[('|")(.+?)\2\])(\(\))?/g,
d = function(S, R, bL) {
var E = bL;
R.replace(b, function(bO, bN, bM, bQ, bP) { bN = bN || bQ; if (E) { if (bN in E) { E = E[bN] } typeof E == "function" && bP && (E = E()) } });
E = (E == null || E == bL ? S : E) + "";
return E
};
return function(R, E) { return String(R).replace(g, function(bL, S) { return d(bL, S, E) }) }
})();
aR.ninja = function() { s.was ? (aA.win.Raphael = s.is) : delete Raphael; return aR };
aR.st = bc;
(function(E, d, g) {
if (E.readyState == null && E.addEventListener) {
E.addEventListener(d, g = function() {
E.removeEventListener(d, g, false);
E.readyState = "complete"
}, false);
E.readyState = "loading"
}
function b() {
(/in/).test(E.readyState) ? setTimeout(b, 9) : aR.eve("raphael.DOMload")
}
b()
})(document, "DOMContentLoaded");
s.was ? (aA.win.Raphael = aR) : (Raphael = aR);
eve.on("raphael.DOMload", function() { ao = true })
})();
window.Raphael.svg && function(m) {
var d = "hasOwnProperty",
C = String,
o = parseFloat,
r = parseInt,
f = Math,
D = f.max,
t = f.abs,
h = f.pow,
g = /[, ]+/,
A = m.eve,
s = "",
k = " ";
var p = "http://www.w3.org/1999/xlink",
z = { block: "M5,0 0,2.5 5,5z", classic: "M5,0 0,2.5 5,5 3.5,3 3.5,2z", diamond: "M2.5,0 5,2.5 2.5,5 0,2.5z", open: "M6,1 1,3.5 6,6", oval: "M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z" },
v = {};
m.toString = function() { return "Your browser supports SVG.\nYou are running Rapha\xebl " + this.version };
var j = function(G, E) {
if (E) { if (typeof G == "string") { G = j(G) } for (var F in E) { if (E[d](F)) { if (F.substring(0, 6) == "xlink:") { G.setAttributeNS(p, F.substring(6), C(E[F])) } else { G.setAttribute(F, C(E[F])) } } } } else {
G = m._g.doc.createElementNS("http://www.w3.org/2000/svg", G);
G.style && (G.style.webkitTapHighlightColor = "rgba(0,0,0,0)")
}
return G
},
a = function(N, R) {
var P = "linear",
F = N.id + R,
L = 0.5,
J = 0.5,
H = N.node,
E = N.paper,
T = H.style,
G = m._g.doc.getElementById(F);
if (!G) {
R = C(R).replace(m._radial_gradient, function(W, U, X) {
P = "radial";
if (U && X) {
L = o(U);
J = o(X);
var V = ((J > 0.5) * 2 - 1);
h(L - 0.5, 2) + h(J - 0.5, 2) > 0.25 && (J = f.sqrt(0.25 - h(L - 0.5, 2)) * V + 0.5) && J != 0.5 && (J = J.toFixed(5) - 0.00001 * V)
}
return s
});
R = R.split(/\s*\-\s*/);
if (P == "linear") {
var K = R.shift();
K = -o(K);
if (isNaN(K)) { return null }
var I = [0, 0, f.cos(m.rad(K)), f.sin(m.rad(K))],
Q = 1 / (D(t(I[2]), t(I[3])) || 1);
I[2] *= Q;
I[3] *= Q;
if (I[2] < 0) {
I[0] = -I[2];
I[2] = 0
}
if (I[3] < 0) {
I[1] = -I[3];
I[3] = 0
}
}
var O = m._parseDots(R);
if (!O) { return null } F = F.replace(/[\(\)\s,\xb0#]/g, "_");
if (N.gradient && F != N.gradient.id) {
E.defs.removeChild(N.gradient);
delete N.gradient
}
if (!N.gradient) {
G = j(P + "Gradient", { id: F });
N.gradient = G;
j(G, P == "radial" ? { fx: L, fy: J } : { x1: I[0], y1: I[1], x2: I[2], y2: I[3], gradientTransform: N.matrix.invert() });
E.defs.appendChild(G);
for (var M = 0, S = O.length; M < S; M++) { G.appendChild(j("stop", { offset: O[M].offset ? O[M].offset : M ? "100%" : "0%", "stop-color": O[M].color || "#fff" })) }
}
}
j(H, { fill: "url(#" + F + ")", opacity: 1, "fill-opacity": 1 });
T.fill = s;
T.opacity = 1;
T.fillOpacity = 1;
return 1
},
b = function(F) {
var E = F.getBBox(1);
j(F.pattern, { patternTransform: F.matrix.invert() + " translate(" + E.x + "," + E.y + ")" })
},
c = function(P, R, K) {
if (P.type == "path") {
var E = C(R).toLowerCase().split("-"),
O = P.paper,
ac = K ? "end" : "start",
T = P.node,
Q = P.attrs,
J = Q["stroke-width"],
X = E.length,
H = "classic",
W, G, M, U, S, L = 3,
Y = 3,
N = 5;
while (X--) {
switch (E[X]) {
case "block":
case "classic":
case "oval":
case "diamond":
case "open":
case "none":
H = E[X];
break;
case "wide":
Y = 5;
break;
case "narrow":
Y = 2;
break;
case "long":
L = 5;
break;
case "short":
L = 2;
break
}
}
if (H == "open") {
L += 2;
Y += 2;
N += 2;
M = 1;
U = K ? 4 : 1;
S = { fill: "none", stroke: Q.stroke }
} else {
U = M = L / 2;
S = { fill: Q.stroke, stroke: "none" }
}
if (P._.arrows) {
if (K) {
P._.arrows.endPath && v[P._.arrows.endPath]--;
P._.arrows.endMarker && v[P._.arrows.endMarker]--
} else {
P._.arrows.startPath && v[P._.arrows.startPath]--;
P._.arrows.startMarker && v[P._.arrows.startMarker]--
}
} else { P._.arrows = {} }
if (H != "none") {
var F = "raphael-marker-" + H,
ab = "raphael-marker-" + ac + H + L + Y;
if (!m._g.doc.getElementById(F)) {
O.defs.appendChild(j(j("path"), { "stroke-linecap": "round", d: z[H], id: F }));
v[F] = 1
} else { v[F]++ }
var I = m._g.doc.getElementById(ab),
V;
if (!I) {
I = j(j("marker"), { id: ab, markerHeight: Y, markerWidth: L, orient: "auto", refX: U, refY: Y / 2 });
V = j(j("use"), { "xlink:href": "#" + F, transform: (K ? "rotate(180 " + L / 2 + " " + Y / 2 + ") " : s) + "scale(" + L / N + "," + Y / N + ")", "stroke-width": (1 / ((L / N + Y / N) / 2)).toFixed(4) });
I.appendChild(V);
O.defs.appendChild(I);
v[ab] = 1
} else {
v[ab]++;
V = I.getElementsByTagName("use")[0]
}
j(V, S);
var aa = M * (H != "diamond" && H != "oval");
if (K) {
W = P._.arrows.startdx * J || 0;
G = m.getTotalLength(Q.path) - aa * J
} else {
W = aa * J;
G = m.getTotalLength(Q.path) - (P._.arrows.enddx * J || 0)
}
S = {};
S["marker-" + ac] = "url(#" + ab + ")";
if (G || W) { S.d = Raphael.getSubpath(Q.path, W, G) } j(T, S);
P._.arrows[ac + "Path"] = F;
P._.arrows[ac + "Marker"] = ab;
P._.arrows[ac + "dx"] = aa;
P._.arrows[ac + "Type"] = H;
P._.arrows[ac + "String"] = R
} else {
if (K) {
W = P._.arrows.startdx * J || 0;
G = m.getTotalLength(Q.path) - W
} else {
W = 0;
G = m.getTotalLength(Q.path) - (P._.arrows.enddx * J || 0)
}
P._.arrows[ac + "Path"] && j(T, { d: Raphael.getSubpath(Q.path, W, G) });
delete P._.arrows[ac + "Path"];
delete P._.arrows[ac + "Marker"];
delete P._.arrows[ac + "dx"];
delete P._.arrows[ac + "Type"];
delete P._.arrows[ac + "String"]
}
for (S in v) {
if (v[d](S) && !v[S]) {
var Z = m._g.doc.getElementById(S);
Z && Z.parentNode.removeChild(Z)
}
}
}
},
w = { "": [0], none: [0], "-": [3, 1], ".": [1, 1], "-.": [3, 1, 1, 1], "-..": [3, 1, 1, 1, 1, 1], ". ": [1, 3], "- ": [4, 3], "--": [8, 3], "- .": [4, 3, 1, 3], "--.": [8, 3, 1, 3], "--..": [8, 3, 1, 3, 1, 3] },
l = function(K, I, J) {
I = w[C(I).toLowerCase()];
if (I) {
var G = K.attrs["stroke-width"] || "1",
E = { round: G, square: G, butt: 0 } [K.attrs["stroke-linecap"] || J["stroke-linecap"]] || 0,
H = [],
F = I.length;
while (F--) { H[F] = I[F] * G + ((F % 2) ? 1 : -1) * E } j(K.node, { "stroke-dasharray": H.join(",") })
}
},
x = function(P, X) {
var T = P.node,
Q = P.attrs,
N = T.style.visibility;
T.style.visibility = "hidden";
for (var S in X) {
if (X[d](S)) {
if (!m._availableAttrs[d](S)) { continue }
var R = X[S];
Q[S] = R;
switch (S) {
case "blur":
P.blur(R);
break;
case "href":
case "title":
case "target":
var V = T.parentNode;
if (V.tagName.toLowerCase() != "a") {
var I = j("a");
V.insertBefore(I, T);
I.appendChild(T);
V = I
}
if (S == "target") { V.setAttributeNS(p, "show", R == "blank" ? "new" : R) } else { V.setAttributeNS(p, S, R) }
break;
case "cursor":
T.style.cursor = R;
break;
case "transform":
P.transform(R);
break;
case "arrow-start":
c(P, R);
break;
case "arrow-end":
c(P, R, 1);
break;
case "clip-rect":
var F = C(R).split(g);
if (F.length == 4) {
P.clip && P.clip.parentNode.parentNode.removeChild(P.clip.parentNode);
var G = j("clipPath"),
U = j("rect");
G.id = m.createUUID();
j(U, { x: F[0], y: F[1], width: F[2], height: F[3] });
G.appendChild(U);
P.paper.defs.appendChild(G);
j(T, { "clip-path": "url(#" + G.id + ")" });
P.clip = U
}
if (!R) {
var O = T.getAttribute("clip-path");
if (O) {
var W = m._g.doc.getElementById(O.replace(/(^url\(#|\)$)/g, s));
W && W.parentNode.removeChild(W);
j(T, { "clip-path": s });
delete P.clip
}
}
break;
case "path":
if (P.type == "path") {
j(T, { d: R ? Q.path = m._pathToAbsolute(R) : "M0,0" });
P._.dirty = 1;
if (P._.arrows) { "startString" in P._.arrows && c(P, P._.arrows.startString); "endString" in P._.arrows && c(P, P._.arrows.endString, 1) }
}
break;
case "width":
T.setAttribute(S, R);
P._.dirty = 1;
if (Q.fx) {
S = "x";
R = Q.x
} else { break }
case "x":
if (Q.fx) { R = -Q.x - (Q.width || 0) }
case "rx":
if (S == "rx" && P.type == "rect") { break }
case "cx":
T.setAttribute(S, R);
P.pattern && b(P);
P._.dirty = 1;
break;
case "height":
T.setAttribute(S, R);
P._.dirty = 1;
if (Q.fy) {
S = "y";
R = Q.y
} else { break }
case "y":
if (Q.fy) { R = -Q.y - (Q.height || 0) }
case "ry":
if (S == "ry" && P.type == "rect") { break }
case "cy":
T.setAttribute(S, R);
P.pattern && b(P);
P._.dirty = 1;
break;
case "r":
if (P.type == "rect") { j(T, { rx: R, ry: R }) } else { T.setAttribute(S, R) } P._.dirty = 1;
break;
case "src":
if (P.type == "image") { T.setAttributeNS(p, "href", R) }
break;
case "stroke-width":
if (P._.sx != 1 || P._.sy != 1) { R /= D(t(P._.sx), t(P._.sy)) || 1 }
if (P.paper._vbSize) { R *= P.paper._vbSize } T.setAttribute(S, R);
if (Q["stroke-dasharray"]) { l(P, Q["stroke-dasharray"], X) }
if (P._.arrows) { "startString" in P._.arrows && c(P, P._.arrows.startString); "endString" in P._.arrows && c(P, P._.arrows.endString, 1) }
break;
case "stroke-dasharray":
l(P, R, X);
break;
case "fill":
var J = C(R).match(m._ISURL);
if (J) {
G = j("pattern");
var M = j("image");
G.id = m.createUUID();
j(G, { x: 0, y: 0, patternUnits: "userSpaceOnUse", height: 1, width: 1 });
j(M, { x: 0, y: 0, "xlink:href": J[1] });
G.appendChild(M);
(function(Y) {
m._preload(J[1], function() {
var Z = this.offsetWidth,
aa = this.offsetHeight;
j(Y, { width: Z, height: aa });
j(M, { width: Z, height: aa });
P.paper.safari()
})
})(G);
P.paper.defs.appendChild(G);
j(T, { fill: "url(#" + G.id + ")" });
P.pattern = G;
P.pattern && b(P);
break
}
var H = m.getRGB(R);
if (!H.error) {
delete X.gradient;
delete Q.gradient;
!m.is(Q.opacity, "undefined") && m.is(X.opacity, "undefined") && j(T, { opacity: Q.opacity });
!m.is(Q["fill-opacity"], "undefined") && m.is(X["fill-opacity"], "undefined") && j(T, { "fill-opacity": Q["fill-opacity"] })
} else {
if ((P.type == "circle" || P.type == "ellipse" || C(R).charAt() != "r") && a(P, R)) {
if ("opacity" in Q || "fill-opacity" in Q) {
var E = m._g.doc.getElementById(T.getAttribute("fill").replace(/^url\(#|\)$/g, s));
if (E) {
var K = E.getElementsByTagName("stop");
j(K[K.length - 1], { "stop-opacity": ("opacity" in Q ? Q.opacity : 1) * ("fill-opacity" in Q ? Q["fill-opacity"] : 1) })
}
}
Q.gradient = R;
Q.fill = "none";
break
}
}
H[d]("opacity") && j(T, { "fill-opacity": H.opacity > 1 ? H.opacity / 100 : H.opacity });
case "stroke":
H = m.getRGB(R);
T.setAttribute(S, H.hex);
S == "stroke" && H[d]("opacity") && j(T, { "stroke-opacity": H.opacity > 1 ? H.opacity / 100 : H.opacity });
if (S == "stroke" && P._.arrows) { "startString" in P._.arrows && c(P, P._.arrows.startString); "endString" in P._.arrows && c(P, P._.arrows.endString, 1) }
break;
case "gradient":
(P.type == "circle" || P.type == "ellipse" || C(R).charAt() != "r") && a(P, R);
break;
case "opacity":
if (Q.gradient && !Q[d]("stroke-opacity")) { j(T, { "stroke-opacity": R > 1 ? R / 100 : R }) }
case "fill-opacity":
if (Q.gradient) {
E = m._g.doc.getElementById(T.getAttribute("fill").replace(/^url\(#|\)$/g, s));
if (E) {
K = E.getElementsByTagName("stop");
j(K[K.length - 1], { "stop-opacity": R })
}
break
}
default:
S == "font-size" && (R = r(R, 10) + "px");
var L = S.replace(/(\-.)/g, function(Y) { return Y.substring(1).toUpperCase() });
T.style[L] = R;
P._.dirty = 1;
T.setAttribute(S, R);
break
}
}
}
q(P, X);
T.style.visibility = N
},
B = 1.2,
q = function(E, I) {
if (E.type != "text" || !(I[d]("text") || I[d]("font") || I[d]("font-size") || I[d]("x") || I[d]("y"))) { return }
var N = E.attrs,
G = E.node,
P = G.firstChild ? r(m._g.doc.defaultView.getComputedStyle(G.firstChild, s).getPropertyValue("font-size"), 10) : 10;
if (I[d]("text")) {
N.text = I.text;
while (G.firstChild) { G.removeChild(G.firstChild) }
var H = C(I.text).split("\n"),
F = [],
L;
for (var J = 0, O = H.length; J < O; J++) {
L = j("tspan");
J && j(L, { dy: P * B, x: N.x });
L.appendChild(m._g.doc.createTextNode(H[J]));
G.appendChild(L);
F[J] = L
}
} else { F = G.getElementsByTagName("tspan"); for (J = 0, O = F.length; J < O; J++) { if (J) { j(F[J], { dy: P * B, x: N.x }) } else { j(F[0], { dy: 0 }) } } } j(G, { x: N.x, y: N.y });
E._.dirty = 1;
var K = E._getBBox(),
M = N.y - (K.y + K.height / 2);
M && m.is(M, "finite") && j(F[0], { dy: M })
},
u = function(F, E) {
var H = 0,
G = 0;
this[0] = this.node = F;
F.raphael = true;
this.id = m._oid++;
F.raphaelid = this.id;
this.matrix = m.matrix();
this.realPath = null;
this.paper = E;
this.attrs = this.attrs || {};
this._ = { transform: [], sx: 1, sy: 1, deg: 0, dx: 0, dy: 0, dirty: 1 };
!E.bottom && (E.bottom = this);
this.prev = E.top;
E.top && (E.top.next = this);
E.top = this;
this.next = null
},
n = m.el;
u.prototype = n;
n.constructor = u;
m._engine.path = function(E, H) {
var F = j("path");
H.canvas && H.canvas.appendChild(F);
var G = new u(F, H);
G.type = "path";
x(G, { fill: "none", stroke: "#000", path: E });
return G
};
n.rotate = function(F, E, H) {
if (this.removed) { return this } F = C(F).split(g);
if (F.length - 1) {
E = o(F[1]);
H = o(F[2])
}
F = o(F[0]);
(H == null) && (E = H);
if (E == null || H == null) {
var G = this.getBBox(1);
E = G.x + G.width / 2;
H = G.y + G.height / 2
}
this.transform(this._.transform.concat([
["r", F, E, H]
]));
return this
};
n.scale = function(I, G, E, H) {
if (this.removed) { return this } I = C(I).split(g);
if (I.length - 1) {
G = o(I[1]);
E = o(I[2]);
H = o(I[3])
}
I = o(I[0]);
(G == null) && (G = I);
(H == null) && (E = H);
if (E == null || H == null) { var F = this.getBBox(1) } E = E == null ? F.x + F.width / 2 : E;
H = H == null ? F.y + F.height / 2 : H;
this.transform(this._.transform.concat([
["s", I, G, E, H]
]));
return this
};
n.translate = function(F, E) {
if (this.removed) { return this } F = C(F).split(g);
if (F.length - 1) { E = o(F[1]) } F = o(F[0]) || 0;
E = +E || 0;
this.transform(this._.transform.concat([
["t", F, E]
]));
return this
};
n.transform = function(F) {
var G = this._;
if (F == null) { return G.transform } m._extractTransform(this, F);
this.clip && j(this.clip, { transform: this.matrix.invert() });
this.pattern && b(this);
this.node && j(this.node, { transform: this.matrix });
if (G.sx != 1 || G.sy != 1) {
var E = this.attrs[d]("stroke-width") ? this.attrs["stroke-width"] : 1;
this.attr({ "stroke-width": E })
}
return this
};
n.hide = function() {!this.removed && this.paper.safari(this.node.style.display = "none"); return this };
n.show = function() {!this.removed && this.paper.safari(this.node.style.display = ""); return this };
n.remove = function() {
if (this.removed || !this.node.parentNode) { return }
var F = this.paper;
F.__set__ && F.__set__.exclude(this);
A.unbind("raphael.*.*." + this.id);
if (this.gradient) { F.defs.removeChild(this.gradient) } m._tear(this, F);
if (this.node.parentNode.tagName.toLowerCase() == "a") { this.node.parentNode.parentNode.removeChild(this.node.parentNode) } else { this.node.parentNode.removeChild(this.node) }
for (var E in this) { this[E] = typeof this[E] == "function" ? m._removedFactory(E) : null } this.removed = true
};
n._getBBox = function() { if (this.node.style.display == "none") { this.show(); var E = true } var G = {}; try { G = this.node.getBBox() } catch (F) {} finally { G = G || {} } E && this.hide(); return G };
n.attr = function(E, N) {
if (this.removed) { return this }
if (E == null) {
var K = {};
for (var M in this.attrs) { if (this.attrs[d](M)) { K[M] = this.attrs[M] } } K.gradient && K.fill == "none" && (K.fill = K.gradient) && delete K.gradient;
K.transform = this._.transform;
return K
}
if (N == null && m.is(E, "string")) {
if (E == "fill" && this.attrs.fill == "none" && this.attrs.gradient) { return this.attrs.gradient }
if (E == "transform") { return this._.transform }
var L = E.split(g),
H = {};
for (var I = 0, P = L.length; I < P; I++) { E = L[I]; if (E in this.attrs) { H[E] = this.attrs[E] } else { if (m.is(this.paper.customAttributes[E], "function")) { H[E] = this.paper.customAttributes[E].def } else { H[E] = m._availableAttrs[E] } } }
return P - 1 ? H : H[L[0]]
}
if (N == null && m.is(E, "array")) { H = {}; for (I = 0, P = E.length; I < P; I++) { H[E[I]] = this.attr(E[I]) } return H }
if (N != null) {
var F = {};
F[E] = N
} else { if (E != null && m.is(E, "object")) { F = E } }
for (var O in F) { A("raphael.attr." + O + "." + this.id, this, F[O]) }
for (O in this.paper.customAttributes) {
if (this.paper.customAttributes[d](O) && F[d](O) && m.is(this.paper.customAttributes[O], "function")) {
var J = this.paper.customAttributes[O].apply(this, [].concat(F[O]));
this.attrs[O] = F[O];
for (var G in J) { if (J[d](G)) { F[G] = J[G] } }
}
}
x(this, F);
return this
};
n.toFront = function() {
if (this.removed) { return this }
if (this.node.parentNode.tagName.toLowerCase() == "a") { this.node.parentNode.parentNode.appendChild(this.node.parentNode) } else { this.node.parentNode.appendChild(this.node) }
var E = this.paper;
E.top != this && m._tofront(this, E);
return this
};
n.toBack = function() { if (this.removed) { return this } var F = this.node.parentNode; if (F.tagName.toLowerCase() == "a") { F.parentNode.insertBefore(this.node.parentNode, this.node.parentNode.parentNode.firstChild) } else { if (F.firstChild != this.node) { F.insertBefore(this.node, this.node.parentNode.firstChild) } } m._toback(this, this.paper); var E = this.paper; return this };
n.insertAfter = function(E) { if (this.removed) { return this } var F = E.node || E[E.length - 1].node; if (F.nextSibling) { F.parentNode.insertBefore(this.node, F.nextSibling) } else { F.parentNode.appendChild(this.node) } m._insertafter(this, E, this.paper); return this };
n.insertBefore = function(E) {
if (this.removed) { return this }
var F = E.node || E[0].node;
F.parentNode.insertBefore(this.node, F);
m._insertbefore(this, E, this.paper);
return this
};
n.blur = function(F) {
var E = this;
if (+F !== 0) {
var G = j("filter"),
H = j("feGaussianBlur");
E.attrs.blur = F;
G.id = m.createUUID();
j(H, { stdDeviation: +F || 1.5 });
G.appendChild(H);
E.paper.defs.appendChild(G);
E._blur = G;
j(E.node, { filter: "url(#" + G.id + ")" })
} else {
if (E._blur) {
E._blur.parentNode.removeChild(E._blur);
delete E._blur;
delete E.attrs.blur
}
E.node.removeAttribute("filter")
}
};
m._engine.circle = function(F, E, J, I) {
var H = j("circle");
F.canvas && F.canvas.appendChild(H);
var G = new u(H, F);
G.attrs = { cx: E, cy: J, r: I, fill: "none", stroke: "#000" };
G.type = "circle";
j(H, G.attrs);
return G
};
m._engine.rect = function(G, E, L, F, J, K) {
var I = j("rect");
G.canvas && G.canvas.appendChild(I);
var H = new u(I, G);
H.attrs = { x: E, y: L, width: F, height: J, r: K || 0, rx: K || 0, ry: K || 0, fill: "none", stroke: "#000" };
H.type = "rect";
j(I, H.attrs);
return H
};
m._engine.ellipse = function(F, E, K, J, I) {
var H = j("ellipse");
F.canvas && F.canvas.appendChild(H);
var G = new u(H, F);
G.attrs = { cx: E, cy: K, rx: J, ry: I, fill: "none", stroke: "#000" };
G.type = "ellipse";
j(H, G.attrs);
return G
};
m._engine.image = function(G, K, E, L, F, J) {
var I = j("image");
j(I, { x: E, y: L, width: F, height: J, preserveAspectRatio: "none" });
I.setAttributeNS(p, "href", K);
G.canvas && G.canvas.appendChild(I);
var H = new u(I, G);
H.attrs = { x: E, y: L, width: F, height: J, src: K };
H.type = "image";
return H
};
m._engine.text = function(F, E, J, I) {
var H = j("text");
F.canvas && F.canvas.appendChild(H);
var G = new u(H, F);
G.attrs = { x: E, y: J, "text-anchor": "middle", text: I, font: m._availableAttrs.font, stroke: "none", fill: "#000" };
G.type = "text";
x(G, G.attrs);
return G
};
m._engine.setSize = function(F, E) {
this.width = F || this.width;
this.height = E || this.height;
this.canvas.setAttribute("width", this.width);
this.canvas.setAttribute("height", this.height);
if (this._viewBox) { this.setViewBox.apply(this, this._viewBox) }
return this
};
m._engine.create = function() {
var H = m._getContainer.apply(0, arguments),
F = H && H.container,
L = H.x,
K = H.y,
G = H.width,
M = H.height;
if (!F) { throw new Error("SVG container not found.") }
var E = j("svg"),
J = "overflow:hidden;",
I;
L = L || 0;
K = K || 0;
G = G || 512;
M = M || 342;
j(E, { height: M, version: 1.1, width: G, xmlns: "http://www.w3.org/2000/svg" });
if (F == 1) {
E.style.cssText = J + "position:absolute;left:" + L + "px;top:" + K + "px";
m._g.doc.body.appendChild(E);
I = 1
} else { E.style.cssText = J + "position:relative"; if (F.firstChild) { F.insertBefore(E, F.firstChild) } else { F.appendChild(E) } } F = new m._Paper;
F.width = G;
F.height = M;
F.canvas = E;
F.clear();
F._left = F._top = 0;
I && (F.renderfix = function() {});
F.renderfix();
return F
};
m._engine.setViewBox = function(J, H, L, E, F) {
A("raphael.setViewBox", this, this._viewBox, [J, H, L, E, F]);
var N = D(L / this.width, E / this.height),
I = this.top,
M = F ? "meet" : "xMinYMin",
G, K;
if (J == null) {
if (this._vbSize) { N = 1 } delete this._vbSize;
G = "0 0 " + this.width + k + this.height
} else {
this._vbSize = N;
G = J + k + H + k + L + k + E
}
j(this.canvas, { viewBox: G, preserveAspectRatio: M });
while (N && I) {
K = "stroke-width" in I.attrs ? I.attrs["stroke-width"] : 1;
I.attr({ "stroke-width": K });
I._.dirty = 1;
I._.dirtyT = 1;
I = I.prev
}
this._viewBox = [J, H, L, E, !!F];
return this
};
m.prototype.renderfix = function() {
var J = this.canvas,
E = J.style,
I;
try { I = J.getScreenCTM() || J.createSVGMatrix() } catch (H) { I = J.createSVGMatrix() }
var G = -I.e % 1,
F = -I.f % 1;
if (G || F) {
if (G) {
this._left = (this._left + G) % 1;
E.left = this._left + "px"
}
if (F) {
this._top = (this._top + F) % 1;
E.top = this._top + "px"
}
}
};
m.prototype.clear = function() {
m.eve("raphael.clear", this);
var E = this.canvas;
while (E.firstChild) { E.removeChild(E.firstChild) } this.bottom = this.top = null;
(this.desc = j("desc")).appendChild(m._g.doc.createTextNode("Created with Rapha\xebl " + m.version));
E.appendChild(this.desc);
E.appendChild(this.defs = j("defs"))
};
m.prototype.remove = function() {
A("raphael.remove", this);
this.canvas.parentNode && this.canvas.parentNode.removeChild(this.canvas);
for (var E in this) { this[E] = typeof this[E] == "function" ? m._removedFactory(E) : null }
};
var y = m.st;
for (var e in n) { if (n[d](e) && !y[d](e)) { y[e] = (function(E) { return function() { var F = arguments; return this.forEach(function(G) { G[E].apply(G, F) }) } })(e) } }
}(window.Raphael);
window.Raphael.vml && function(m) {
var e = "hasOwnProperty",
G = String,
o = parseFloat,
h = Math,
C = h.round,
J = h.max,
D = h.min,
t = h.abs,
w = "fill",
j = /[, ]+/,
B = m.eve,
x = " progid:DXImageTransform.Microsoft",
l = " ",
r = "",
F = { M: "m", L: "l", C: "c", Z: "x", m: "t", l: "r", c: "v", z: "x" },
k = /([clmz]),?([^clmz]*)/gi,
u = / progid:\S+Blur\([^\)]+\)/g,
I = /-?[^,\s-]+/g,
d = "position:absolute;left:0;top:0;width:1px;height:1px",
b = 21600,
A = { path: 1, rect: 1, image: 1 },
s = { circle: 1, ellipse: 1 },
f = function(T) {
var Q = /[ahqstv]/ig,
L = m._pathToAbsolute;
G(T).match(Q) && (L = m._path2curve);
Q = /[clmz]/g;
if (L == m._pathToAbsolute && !G(T).match(Q)) {
var P = G(T).replace(k, function(X, Z, V) {
var Y = [],
U = Z.toLowerCase() == "m",
W = F[Z];
V.replace(I, function(aa) {
if (U && Y.length == 2) {
W += Y + F[Z == "m" ? "l" : "L"];
Y = []
}
Y.push(C(aa * b))
});
return W + Y
});
return P
}
var R = L(T),
K, E;
P = [];
for (var N = 0, S = R.length; N < S; N++) {
K = R[N];
E = R[N][0].toLowerCase();
E == "z" && (E = "x");
for (var M = 1, O = K.length; M < O; M++) { E += C(K[M] * b) + (M != O - 1 ? "," : r) } P.push(E)
}
return P.join(l)
},
p = function(M, L, K) {
var E = m.matrix();
E.rotate(-M, 0.5, 0.5);
return { dx: E.x(L, K), dy: E.y(L, K) }
},
q = function(S, R, Q, N, M, O) {
var aa = S._,
U = S.matrix,
E = aa.fillpos,
T = S.node,
P = T.style,
L = 1,
K = "",
W, Y = b / R,
X = b / Q;
P.visibility = "hidden";
if (!R || !Q) { return } T.coordsize = t(Y) + l + t(X);
P.rotation = O * (R * Q < 0 ? -1 : 1);
if (O) {
var Z = p(O, N, M);
N = Z.dx;
M = Z.dy
}
R < 0 && (K += "x");
Q < 0 && (K += " y") && (L = -1);
P.flip = K;
T.coordorigin = (N * -Y) + l + (M * -X);
if (E || aa.fillsize) {
var V = T.getElementsByTagName(w);
V = V && V[0];
T.removeChild(V);
if (E) {
Z = p(O, U.x(E[0], E[1]), U.y(E[0], E[1]));
V.position = Z.dx * L + l + Z.dy * L
}
if (aa.fillsize) { V.size = aa.fillsize[0] * t(R) + l + aa.fillsize[1] * t(Q) } T.appendChild(V)
}
P.visibility = "visible"
};
m.toString = function() { return "Your browser doesn\u2019t support SVG. Falling down to VML.\nYou are running Rapha\xebl " + this.version };
var c = function(E, P, K) {
var R = G(P).toLowerCase().split("-"),
N = K ? "end" : "start",
L = R.length,
O = "classic",
Q = "medium",
M = "medium";
while (L--) {
switch (R[L]) {
case "block":
case "classic":
case "oval":
case "diamond":
case "open":
case "none":
O = R[L];
break;
case "wide":
case "narrow":
M = R[L];
break;
case "long":
case "short":
Q = R[L];
break
}
}
var S = E.node.getElementsByTagName("stroke")[0];
S[N + "arrow"] = O;
S[N + "arrowlength"] = Q;
S[N + "arrowwidth"] = M
},
y = function(aa, ak) {
aa.attrs = aa.attrs || {};
var af = aa.node,
ao = aa.attrs,
W = af.style,
S, ai = A[aa.type] && (ak.x != ao.x || ak.y != ao.y || ak.width != ao.width || ak.height != ao.height || ak.cx != ao.cx || ak.cy != ao.cy || ak.rx != ao.rx || ak.ry != ao.ry || ak.r != ao.r),
Z = s[aa.type] && (ao.cx != ak.cx || ao.cy != ak.cy || ao.r != ak.r || ao.rx != ak.rx || ao.ry != ak.ry),
ar = aa;
for (var X in ak) { if (ak[e](X)) { ao[X] = ak[X] } }
if (ai) {
ao.path = m._getPath[aa.type](aa);
aa._.dirty = 1
}
ak.href && (af.href = ak.href);
ak.title && (af.title = ak.title);
ak.target && (af.target = ak.target);
ak.cursor && (W.cursor = ak.cursor);
"blur" in ak && aa.blur(ak.blur);
if (ak.path && aa.type == "path" || ai) {
af.path = f(~G(ao.path).toLowerCase().indexOf("r") ? m._pathToAbsolute(ao.path) : ao.path);
if (aa.type == "image") {
aa._.fillpos = [ao.x, ao.y];
aa._.fillsize = [ao.width, ao.height];
q(aa, 1, 1, 0, 0, 0)
}
}
"transform" in ak && aa.transform(ak.transform);
if (Z) {
var N = +ao.cx,
L = +ao.cy,
R = +ao.rx || +ao.r || 0,
Q = +ao.ry || +ao.r || 0;
af.path = m.format("ar{0},{1},{2},{3},{4},{1},{4},{1}x", C((N - R) * b), C((L - Q) * b), C((N + R) * b), C((L + Q) * b), C(N * b))
}
if ("clip-rect" in ak) {
var K = G(ak["clip-rect"]).split(j);
if (K.length == 4) {
K[2] = +K[2] + (+K[0]);
K[3] = +K[3] + (+K[1]);
var Y = af.clipRect || m._g.doc.createElement("div"),
aq = Y.style;
aq.clip = m.format("rect({1}px {2}px {3}px {0}px)", K);
if (!af.clipRect) {
aq.position = "absolute";
aq.top = 0;
aq.left = 0;
aq.width = aa.paper.width + "px";
aq.height = aa.paper.height + "px";
af.parentNode.insertBefore(Y, af);
Y.appendChild(af);
af.clipRect = Y
}
}
if (!ak["clip-rect"]) { af.clipRect && (af.clipRect.style.clip = "auto") }
}
if (aa.textpath) {
var am = aa.textpath.style;
ak.font && (am.font = ak.font);
ak["font-family"] && (am.fontFamily = '"' + ak["font-family"].split(",")[0].replace(/^['"]+|['"]+$/g, r) + '"');
ak["font-size"] && (am.fontSize = ak["font-size"]);
ak["font-weight"] && (am.fontWeight = ak["font-weight"]);
ak["font-style"] && (am.fontStyle = ak["font-style"])
}
if ("arrow-start" in ak) { c(ar, ak["arrow-start"]) }
if ("arrow-end" in ak) { c(ar, ak["arrow-end"], 1) }
if (ak.opacity != null || ak["stroke-width"] != null || ak.fill != null || ak.src != null || ak.stroke != null || ak["stroke-width"] != null || ak["stroke-opacity"] != null || ak["fill-opacity"] != null || ak["stroke-dasharray"] != null || ak["stroke-miterlimit"] != null || ak["stroke-linejoin"] != null || ak["stroke-linecap"] != null) {
var ag = af.getElementsByTagName(w),
an = false;
ag = ag && ag[0];
!ag && (an = ag = H(w));
if (aa.type == "image" && ak.src) { ag.src = ak.src } ak.fill && (ag.on = true);
if (ag.on == null || ak.fill == "none" || ak.fill === null) { ag.on = false }
if (ag.on && ak.fill) {
var P = G(ak.fill).match(m._ISURL);
if (P) {
ag.parentNode == af && af.removeChild(ag);
ag.rotate = true;
ag.src = P[1];
ag.type = "tile";
var E = aa.getBBox(1);
ag.position = E.x + l + E.y;
aa._.fillpos = [E.x, E.y];
m._preload(P[1], function() { aa._.fillsize = [this.offsetWidth, this.offsetHeight] })
} else {
ag.color = m.getRGB(ak.fill).hex;
ag.src = r;
ag.type = "solid";
if (m.getRGB(ak.fill).error && (ar.type in { circle: 1, ellipse: 1 } || G(ak.fill).charAt() != "r") && a(ar, ak.fill, ag)) {
ao.fill = "none";
ao.gradient = ak.fill;
ag.rotate = false
}
}
}
if ("fill-opacity" in ak || "opacity" in ak) {
var O = ((+ao["fill-opacity"] + 1 || 2) - 1) * ((+ao.opacity + 1 || 2) - 1) * ((+m.getRGB(ak.fill).o + 1 || 2) - 1);
O = D(J(O, 0), 1);
ag.opacity = O;
if (ag.src) { ag.color = "none" }
}
af.appendChild(ag);
var T = (af.getElementsByTagName("stroke") && af.getElementsByTagName("stroke")[0]),
ap = false;
!T && (ap = T = H("stroke"));
if ((ak.stroke && ak.stroke != "none") || ak["stroke-width"] || ak["stroke-opacity"] != null || ak["stroke-dasharray"] || ak["stroke-miterlimit"] || ak["stroke-linejoin"] || ak["stroke-linecap"]) { T.on = true }(ak.stroke == "none" || ak.stroke === null || T.on == null || ak.stroke == 0 || ak["stroke-width"] == 0) && (T.on = false);
var ae = m.getRGB(ak.stroke);
T.on && ak.stroke && (T.color = ae.hex);
O = ((+ao["stroke-opacity"] + 1 || 2) - 1) * ((+ao.opacity + 1 || 2) - 1) * ((+ae.o + 1 || 2) - 1);
var ab = (o(ak["stroke-width"]) || 1) * 0.75;
O = D(J(O, 0), 1);
ak["stroke-width"] == null && (ab = ao["stroke-width"]);
ak["stroke-width"] && (T.weight = ab);
ab && ab < 1 && (O *= ab) && (T.weight = 1);
T.opacity = O;
ak["stroke-linejoin"] && (T.joinstyle = ak["stroke-linejoin"] || "miter");
T.miterlimit = ak["stroke-miterlimit"] || 8;
ak["stroke-linecap"] && (T.endcap = ak["stroke-linecap"] == "butt" ? "flat" : ak["stroke-linecap"] == "square" ? "square" : "round");
if (ak["stroke-dasharray"]) {
var ad = { "-": "shortdash", ".": "shortdot", "-.": "shortdashdot", "-..": "shortdashdotdot", ". ": "dot", "- ": "dash", "--": "longdash", "- .": "dashdot", "--.": "longdashdot", "--..": "longdashdotdot" };
T.dashstyle = ad[e](ak["stroke-dasharray"]) ? ad[ak["stroke-dasharray"]] : r
}
ap && af.appendChild(T)
}
if (ar.type == "text") {
ar.paper.canvas.style.display = r;
var ah = ar.paper.span,
ac = 100,
M = ao.font && ao.font.match(/\d+(?:\.\d*)?(?=px)/);
W = ah.style;
ao.font && (W.font = ao.font);
ao["font-family"] && (W.fontFamily = ao["font-family"]);
ao["font-weight"] && (W.fontWeight = ao["font-weight"]);
ao["font-style"] && (W.fontStyle = ao["font-style"]);
M = o(ao["font-size"] || M && M[0]) || 10;
W.fontSize = M * ac + "px";
ar.textpath.string && (ah.innerHTML = G(ar.textpath.string).replace(/</g, "&#60;").replace(/&/g, "&#38;").replace(/\n/g, "<br>"));
var V = ah.getBoundingClientRect();
ar.W = ao.w = (V.right - V.left) / ac;
ar.H = ao.h = (V.bottom - V.top) / ac;
ar.X = ao.x;
ar.Y = ao.y + ar.H / 2;
("x" in ak || "y" in ak) && (ar.path.v = m.format("m{0},{1}l{2},{1}", C(ao.x * b), C(ao.y * b), C(ao.x * b) + 1));
var U = ["x", "y", "text", "font", "font-family", "font-weight", "font-style", "font-size"];
for (var aj = 0, al = U.length; aj < al; aj++) { if (U[aj] in ak) { ar._.dirty = 1; break } }
switch (ao["text-anchor"]) {
case "start":
ar.textpath.style["v-text-align"] = "left";
ar.bbx = ar.W / 2;
break;
case "end":
ar.textpath.style["v-text-align"] = "right";
ar.bbx = -ar.W / 2;
break;
default:
ar.textpath.style["v-text-align"] = "center";
ar.bbx = 0;
break
}
ar.textpath.style["v-text-kern"] = true
}
},
a = function(E, S, V) {
E.attrs = E.attrs || {};
var T = E.attrs,
M = Math.pow,
N, O, Q = "linear",
R = ".5 .5";
E.attrs.gradient = S;
S = G(S).replace(m._radial_gradient, function(Y, Z, X) {
Q = "radial";
if (Z && X) {
Z = o(Z);
X = o(X);
M(Z - 0.5, 2) + M(X - 0.5, 2) > 0.25 && (X = h.sqrt(0.25 - M(Z - 0.5, 2)) * ((X > 0.5) * 2 - 1) + 0.5);
R = Z + l + X
}
return r
});
S = S.split(/\s*\-\s*/);
if (Q == "linear") {
var K = S.shift();
K = -o(K);
if (isNaN(K)) { return null }
}
var P = m._parseDots(S);
if (!P) { return null } E = E.shape || E.node;
if (P.length) {
E.removeChild(V);
V.on = true;
V.method = "none";
V.color = P[0].color;
V.color2 = P[P.length - 1].color;
var W = [];
for (var L = 0, U = P.length; L < U; L++) { P[L].offset && W.push(P[L].offset + l + P[L].color) } V.colors = W.length ? W.join() : "0% " + V.color;
if (Q == "radial") {
V.type = "gradientTitle";
V.focus = "100%";
V.focussize = "0 0";
V.focusposition = R;
V.angle = 0
} else {
V.type = "gradient";
V.angle = (270 - K) % 360
}
E.appendChild(V)
}
return 1
},
v = function(K, E) {
this[0] = this.node = K;
K.raphael = true;
this.id = m._oid++;
K.raphaelid = this.id;
this.X = 0;
this.Y = 0;
this.attrs = {};
this.paper = E;
this.matrix = m.matrix();
this._ = { transform: [], sx: 1, sy: 1, dx: 0, dy: 0, deg: 0, dirty: 1, dirtyT: 1 };
!E.bottom && (E.bottom = this);
this.prev = E.top;
E.top && (E.top.next = this);
E.top = this;
this.next = null
};
var n = m.el;
v.prototype = n;
n.constructor = v;
n.transform = function(N) {
if (N == null) { return this._.transform }
var P = this.paper._viewBoxShift,
O = P ? "s" + [P.scale, P.scale] + "-1-1t" + [P.dx, P.dy] : r,
S;
if (P) { S = N = G(N).replace(/\.{3}|\u2026/g, this._.transform || r) } m._extractTransform(this, O + N);
var T = this.matrix.clone(),
V = this.skew,
L = this.node,
R, M = ~G(this.attrs.fill).indexOf("-"),
E = !G(this.attrs.fill).indexOf("url(");
T.translate(-0.5, -0.5);
if (E || M || this.type == "image") {
V.matrix = "1 0 0 1";
V.offset = "0 0";
R = T.split();
if ((M && R.noRotation) || !R.isSimple) {
L.style.filter = T.toFilter();
var Q = this.getBBox(),
K = this.getBBox(1),
W = Q.x - K.x,
U = Q.y - K.y;
L.coordorigin = (W * -b) + l + (U * -b);
q(this, 1, 1, W, U, 0)
} else {
L.style.filter = r;
q(this, R.scalex, R.scaley, R.dx, R.dy, R.rotate)
}
} else {
L.style.filter = r;
V.matrix = G(T);
V.offset = T.offset()
}
S && (this._.transform = S);
return this
};
n.rotate = function(K, E, M) {
if (this.removed) { return this }
if (K == null) { return } K = G(K).split(j);
if (K.length - 1) {
E = o(K[1]);
M = o(K[2])
}
K = o(K[0]);
(M == null) && (E = M);
if (E == null || M == null) {
var L = this.getBBox(1);
E = L.x + L.width / 2;
M = L.y + L.height / 2
}
this._.dirtyT = 1;
this.transform(this._.transform.concat([
["r", K, E, M]
]));
return this
};
n.translate = function(K, E) {
if (this.removed) { return this } K = G(K).split(j);
if (K.length - 1) { E = o(K[1]) } K = o(K[0]) || 0;
E = +E || 0;
if (this._.bbox) {
this._.bbox.x += K;
this._.bbox.y += E
}
this.transform(this._.transform.concat([
["t", K, E]
]));
return this
};
n.scale = function(N, L, E, M) {
if (this.removed) { return this } N = G(N).split(j);
if (N.length - 1) {
L = o(N[1]);
E = o(N[2]);
M = o(N[3]);
isNaN(E) && (E = null);
isNaN(M) && (M = null)
}
N = o(N[0]);
(L == null) && (L = N);
(M == null) && (E = M);
if (E == null || M == null) { var K = this.getBBox(1) } E = E == null ? K.x + K.width / 2 : E;
M = M == null ? K.y + K.height / 2 : M;
this.transform(this._.transform.concat([
["s", N, L, E, M]
]));
this._.dirtyT = 1;
return this
};
n.hide = function() {!this.removed && (this.node.style.display = "none"); return this };
n.show = function() {!this.removed && (this.node.style.display = r); return this };
n._getBBox = function() { if (this.removed) { return {} } return { x: this.X + (this.bbx || 0) - this.W / 2, y: this.Y - this.H, width: this.W, height: this.H } };
n.remove = function() {
if (this.removed || !this.node.parentNode) { return } this.paper.__set__ && this.paper.__set__.exclude(this);
m.eve.unbind("raphael.*.*." + this.id);
m._tear(this, this.paper);
this.node.parentNode.removeChild(this.node);
this.shape && this.shape.parentNode.removeChild(this.shape);
for (var E in this) { this[E] = typeof this[E] == "function" ? m._removedFactory(E) : null } this.removed = true
};
n.attr = function(E, S) {
if (this.removed) { return this }
if (E == null) {
var P = {};
for (var R in this.attrs) { if (this.attrs[e](R)) { P[R] = this.attrs[R] } } P.gradient && P.fill == "none" && (P.fill = P.gradient) && delete P.gradient;
P.transform = this._.transform;
return P
}
if (S == null && m.is(E, "string")) {
if (E == w && this.attrs.fill == "none" && this.attrs.gradient) { return this.attrs.gradient }
var Q = E.split(j),
M = {};
for (var N = 0, U = Q.length; N < U; N++) { E = Q[N]; if (E in this.attrs) { M[E] = this.attrs[E] } else { if (m.is(this.paper.customAttributes[E], "function")) { M[E] = this.paper.customAttributes[E].def } else { M[E] = m._availableAttrs[E] } } }
return U - 1 ? M : M[Q[0]]
}
if (this.attrs && S == null && m.is(E, "array")) { M = {}; for (N = 0, U = E.length; N < U; N++) { M[E[N]] = this.attr(E[N]) } return M }
var K;
if (S != null) {
K = {};
K[E] = S
}
S == null && m.is(E, "object") && (K = E);
for (var T in K) { B("raphael.attr." + T + "." + this.id, this, K[T]) }
if (K) {
for (T in this.paper.customAttributes) {
if (this.paper.customAttributes[e](T) && K[e](T) && m.is(this.paper.customAttributes[T], "function")) {
var O = this.paper.customAttributes[T].apply(this, [].concat(K[T]));
this.attrs[T] = K[T];
for (var L in O) { if (O[e](L)) { K[L] = O[L] } }
}
}
if (K.text && this.type == "text") { this.textpath.string = K.text } y(this, K)
}
return this
};
n.toFront = function() {
!this.removed && this.node.parentNode.appendChild(this.node);
this.paper && this.paper.top != this && m._tofront(this, this.paper);
return this
};
n.toBack = function() {
if (this.removed) { return this }
if (this.node.parentNode.firstChild != this.node) {
this.node.parentNode.insertBefore(this.node, this.node.parentNode.firstChild);
m._toback(this, this.paper)
}
return this
};
n.insertAfter = function(E) { if (this.removed) { return this } if (E.constructor == m.st.constructor) { E = E[E.length - 1] } if (E.node.nextSibling) { E.node.parentNode.insertBefore(this.node, E.node.nextSibling) } else { E.node.parentNode.appendChild(this.node) } m._insertafter(this, E, this.paper); return this };
n.insertBefore = function(E) {
if (this.removed) { return this }
if (E.constructor == m.st.constructor) { E = E[0] } E.node.parentNode.insertBefore(this.node, E.node);
m._insertbefore(this, E, this.paper);
return this
};
n.blur = function(E) {
var K = this.node.runtimeStyle,
L = K.filter;
L = L.replace(u, r);
if (+E !== 0) {
this.attrs.blur = E;
K.filter = L + l + x + ".Blur(pixelradius=" + (+E || 1.5) + ")";
K.margin = m.format("-{0}px 0 0 -{0}px", C(+E || 1.5))
} else {
K.filter = L;
K.margin = 0;
delete this.attrs.blur
}
};
m._engine.path = function(M, K) {
var N = H("shape");
N.style.cssText = d;
N.coordsize = b + l + b;
N.coordorigin = K.coordorigin;
var O = new v(N, K),
E = { fill: "none", stroke: "#000" };
M && (E.path = M);
O.type = "path";
O.path = [];
O.Path = r;
y(O, E);
K.canvas.appendChild(N);
var L = H("skew");
L.on = true;
N.appendChild(L);
O.skew = L;
O.transform(r);
return O
};
m._engine.rect = function(K, P, N, Q, L, E) {
var R = m._rectPath(P, N, Q, L, E),
M = K.path(R),
O = M.attrs;
M.X = O.x = P;
M.Y = O.y = N;
M.W = O.width = Q;
M.H = O.height = L;
O.r = E;
O.path = R;
M.type = "rect";
return M
};
m._engine.ellipse = function(K, E, P, O, N) {
var M = K.path(),
L = M.attrs;
M.X = E - O;
M.Y = P - N;
M.W = O * 2;
M.H = N * 2;
M.type = "ellipse";
y(M, { cx: E, cy: P, rx: O, ry: N });
return M
};
m._engine.circle = function(K, E, O, N) {
var M = K.path(),
L = M.attrs;
M.X = E - N;
M.Y = O - N;
M.W = M.H = N * 2;
M.type = "circle";
y(M, { cx: E, cy: O, r: N });
return M
};
m._engine.image = function(K, E, Q, O, R, M) {
var T = m._rectPath(Q, O, R, M),
N = K.path(T).attr({ stroke: "none" }),
P = N.attrs,
L = N.node,
S = L.getElementsByTagName(w)[0];
P.src = E;
N.X = P.x = Q;
N.Y = P.y = O;
N.W = P.width = R;
N.H = P.height = M;
P.path = T;
N.type = "image";
S.parentNode == L && L.removeChild(S);
S.rotate = true;
S.src = E;
S.type = "tile";
N._.fillpos = [Q, O];
N._.fillsize = [R, M];
L.appendChild(S);
q(N, 1, 1, 0, 0, 0);
return N
};
m._engine.text = function(E, P, O, Q) {
var M = H("shape"),
S = H("path"),
L = H("textpath");
P = P || 0;
O = O || 0;
Q = Q || "";
S.v = m.format("m{0},{1}l{2},{1}", C(P * b), C(O * b), C(P * b) + 1);
S.textpathok = true;
L.string = G(Q);
L.on = true;
M.style.cssText = d;
M.coordsize = b + l + b;
M.coordorigin = "0 0";
var K = new v(M, E),
N = { fill: "#000", stroke: "none", font: m._availableAttrs.font, text: Q };
K.shape = M;
K.path = S;
K.textpath = L;
K.type = "text";
K.attrs.text = G(Q);
K.attrs.x = P;
K.attrs.y = O;
K.attrs.w = 1;
K.attrs.h = 1;
y(K, N);
M.appendChild(L);
M.appendChild(S);
E.canvas.appendChild(M);
var R = H("skew");
R.on = true;
M.appendChild(R);
K.skew = R;
K.transform(r);
return K
};
m._engine.setSize = function(L, E) {
var K = this.canvas.style;
this.width = L;
this.height = E;
L == +L && (L += "px");
E == +E && (E += "px");
K.width = L;
K.height = E;
K.clip = "rect(0 " + L + " " + E + " 0)";
if (this._viewBox) { m._engine.setViewBox.apply(this, this._viewBox) }
return this
};
m._engine.setViewBox = function(O, N, P, L, M) {
m.eve("raphael.setViewBox", this, this._viewBox, [O, N, P, L, M]);
var E = this.width,
R = this.height,
S = 1 / J(P / E, L / R),
Q, K;
if (M) {
Q = R / L;
K = E / P;
if (P * Q < E) { O -= (E - P * Q) / 2 / Q }
if (L * K < R) { N -= (R - L * K) / 2 / K }
}
this._viewBox = [O, N, P, L, !!M];
this._viewBoxShift = { dx: -O, dy: -N, scale: S };
this.forEach(function(T) { T.transform("...") });
return this
};
var H;
m._engine.initWin = function(L) {
var K = L.document;
K.createStyleSheet().addRule(".rvml", "behavior:url(#default#VML)");
try {
!K.namespaces.rvml && K.namespaces.add("rvml", "urn:schemas-microsoft-com:vml");
H = function(M) { return K.createElement("<rvml:" + M + ' class="rvml">') }
} catch (E) { H = function(M) { return K.createElement("<" + M + ' xmlns="urn:schemas-microsoft.com:vml" class="rvml">') } }
};
m._engine.initWin(m._g.win);
m._engine.create = function() {
var L = m._getContainer.apply(0, arguments),
E = L.container,
R = L.height,
S, K = L.width,
Q = L.x,
P = L.y;
if (!E) { throw new Error("VML container not found.") }
var N = new m._Paper,
O = N.canvas = m._g.doc.createElement("div"),
M = O.style;
Q = Q || 0;
P = P || 0;
K = K || 512;
R = R || 342;
N.width = K;
N.height = R;
K == +K && (K += "px");
R == +R && (R += "px");
N.coordsize = b * 1000 + l + b * 1000;
N.coordorigin = "0 0";
N.span = m._g.doc.createElement("span");
N.span.style.cssText = "position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;";
O.appendChild(N.span);
M.cssText = m.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden", K, R);
if (E == 1) {
m._g.doc.body.appendChild(O);
M.left = Q + "px";
M.top = P + "px";
M.position = "absolute"
} else { if (E.firstChild) { E.insertBefore(O, E.firstChild) } else { E.appendChild(O) } } N.renderfix = function() {};
return N
};
m.prototype.clear = function() {
m.eve("raphael.clear", this);
this.canvas.innerHTML = r;
this.span = m._g.doc.createElement("span");
this.span.style.cssText = "position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;";
this.canvas.appendChild(this.span);
this.bottom = this.top = null
};
m.prototype.remove = function() {
m.eve("raphael.remove", this);
this.canvas.parentNode.removeChild(this.canvas);
for (var E in this) { this[E] = typeof this[E] == "function" ? m._removedFactory(E) : null }
return true
};
var z = m.st;
for (var g in n) { if (n[e](g) && !z[e](g)) { z[g] = (function(E) { return function() { var K = arguments; return this.forEach(function(L) { L[E].apply(L, K) }) } })(g) } }
}(window.Raphael);
function TRAVizConnection(c, b, a) {
this.v1 = c;
this.v2 = b;
this.type = a;
this.links = []
}
TRAVizConnection.prototype.addLink = function(a) { this.links.push(a) };
function TRAVizVerticalConnection(c, b, a) {
this.v1 = c;
this.v2 = b;
this.type = a
}
TRAVizVerticalConnection.prototype.position = function(a, c, b) {
this.x1 = a;
this.x2 = a;
this.y1 = c;
this.y2 = b
};
TRAVizVerticalConnection.prototype.yMin = function() { return Math.min(this.y1, this.y2) };
TRAVizVerticalConnection.prototype.yMax = function() { return Math.max(this.y1, this.y2) };
function TRAVizHorizontalConnection(c, b, a) {
this.v1 = c;
this.v2 = b;
this.type = a
}
TRAVizHorizontalConnection.prototype.position = function(b, a, c) {
this.x1 = b;
this.x2 = a;
this.y1 = c;
this.y2 = c
};
function TRAVizGraph(a) {
this.config = a;
this.vertices = [];
this.vertexMap = []
}
TRAVizGraph.prototype.getVertex = function(a) { return this.vertexMap[a] };
TRAVizGraph.prototype.removeVertex = function(b) { var a = this.vertexMap[b]; for (var c = 0; c < a.successors.length; c++) { this.vertexMap[a.successors[c]].removePredecessor(b) } for (var c = 0; c < a.predecessors.length; c++) { this.vertexMap[a.predecessors[c]].removeSuccessor(b) } for (var c = 0; c < this.vertices.length; c++) { if (this.vertices[c] == a) { this.vertices.splice(c, 1); break } } delete this.vertexMap[b] };
TRAVizGraph.prototype.addVertex = function(a) {
this.vertices.push(a);
this.vertexMap[a.index] = a
};
TRAVizGraph.prototype.clone = function() {
var e = new TRAVizGraph();
e.config = this.config;
for (var d = 0; d < this.vertices.length; d++) { e.addVertex(new TRAVizVertex(e, this.vertices[d].index, this.vertices[d].token)) }
for (var d = 0; d < this.vertices.length; d++) {
var a = this.vertices[d];
var c = e.vertices[d];
c.count = a.count;
for (var b = 0; b < a.sources.length; b++) { c.sources.push(a.sources[b]) }
for (var b = 0; b < a.successors.length; b++) {
c.addSuccessor(a.successors[b]);
e.vertexMap[a.successors[b]].addPredecessor(c.index)
}
for (var b = 0; b < a.predecessors.length; b++) {
c.addPredecessor(a.predecessors[b]);
e.vertexMap[a.predecessors[b]].addSuccessor(c.index)
}
}
return e
};
TRAVizGraph.prototype.isAcyclicFromVertex = function(k, h) {
var l = new TRAVizVertex(this, this.config.getVertexIndex(), k.token);
this.addVertex(l);
l.count = k.count + h.count;
for (var f = 0; f < k.sources.length; f++) { l.sources.push(k.sources[f]) }
for (var f = 0; f < h.sources.length; f++) { l.sources.push(h.sources[f]) }
for (var f = 0; f < k.predecessors.length; f++) {
var a = k.predecessors[f];
if (a == k.index || a == h.index) { a = l.index } l.addPredecessor(a);
this.vertexMap[a].addSuccessor(l.index)
}
for (var f = 0; f < h.successors.length; f++) {
var a = h.successors[f];
if (a == k.index || a == h.index) { a = l.index } l.addSuccessor(a);
this.vertexMap[a].addPredecessor(l.index)
}
for (var f = 0; f < k.successors.length; f++) {
var a = k.successors[f];
if (a == k.index || a == h.index) { a = l.index } l.addSuccessor(a);
this.vertexMap[a].addPredecessor(l.index)
}
for (var f = 0; f < h.predecessors.length; f++) {
var a = h.predecessors[f];
if (a == k.index || a == h.index) { a = l.index } l.addPredecessor(a);
this.vertexMap[a].addSuccessor(l.index)
}
for (var f = 0; f < this.vertices.length; f++) {
this.vertices[f].visited = 0;
this.vertices[f].limit = this.vertices[f].predecessors.length;
for (var b = 0; b < this.vertices[f].predecessors.length; b++) { if (this.vertices[f].predecessors[b] == k.index) { this.vertices[f].limit-- } if (this.vertices[f].predecessors[b] == h.index) { this.vertices[f].limit-- } }
}
l.visited = l.limit;
var c = [];
for (var f = 0; f < l.successors.length; f++) { if (l.successors[f] != k.index && l.successors[f] != h.index) { c.push({ head: l, tail: this.getVertex(l.successors[f]) }) } }
while (c.length > 0) {
var d = [];
for (var f = 0; f < c.length; f++) {
var g = c[f];
g.tail.visited++;
if (g.tail.visited > g.tail.limit) { this.removeVertex(l.index); return false }
for (var b = 0; b < g.tail.successors.length; b++) { if (l.successors[f] != k.index && l.successors[f] != h.index && g.tail.visited == 1) { d.push({ head: g.tail, tail: this.getVertex(g.tail.successors[b]) }) } }
}
c = d
}
this.removeVertex(k.index);
this.removeVertex(h.index);
return l
};
TRAVizGraph.prototype.isAcyclic = function() {
do {
var f = this.vertices.length;
for (var d = 0; d < this.vertices.length; d++) {
var e = this.vertices[d];
var c = e.successors,
a = e.predecessors;
if (c.length == 0) { for (var b = 0; b < a.length; b++) { this.vertexMap[a[b]].removeSuccessor(e.index) } e.predecessors = [] }
}
for (var d = this.vertices.length; d > 0; d--) { var e = this.vertices[d - 1]; if (e.successors.length == 0 && e.predecessors.length == 0) { this.removeVertex(e.index) } }
} while (f > this.vertices.length);
if (this.vertices.length > 0) { return false }
return true
};
TRAVizGraph.prototype.printVertices = function() {
for (var c = 0; c < this.vertices.length; c++) {
var a = this.vertices[c];
for (var b = 0; b < a.successors.length; b++) {
var d = this.getVertex(a.successors[b]);
console.info(a.id + " ---> " + d.id, a.token + " ---> " + d.token)
}
}
};
function TRAVizVertex(c, a, b) {
this.graph = c;
this.token = b;
this.successors = [];
this.predecessors = [];
this.count = 1;
this.traced = false;
this.linked = true;
this.sources = [];
this.index = a
}
TRAVizVertex.prototype.removeSuccessor = function(b) { for (var a = 0; a < this.successors.length; a++) { if (this.successors[a] == b) { this.successors.splice(a, 1); return } } };
TRAVizVertex.prototype.removePredecessor = function(a) { for (var b = 0; b < this.predecessors.length; b++) { if (this.predecessors[b] == a) { this.predecessors.splice(b, 1); return } } };
TRAVizVertex.prototype.addSuccessor = function(b) { var c = false; for (var a = 0; a < this.successors.length; a++) { if (b == this.successors[a]) { c = true; break } } if (!c) { this.successors.push(b) } };
TRAVizVertex.prototype.addPredecessor = function(a) { var c = false; for (var b = 0; b < this.predecessors.length; b++) { if (a == this.predecessors[b]) { c = true; break } } if (!c) { this.predecessors.push(a) } };
function TRAVizAligner(b, a) {
this.graph = b;
this.config = a
}
TRAVizAligner.prototype.normalize = function(a) {
a = $("<p>" + a + "</p>").text();
if (this.config.options.normalize) {
a = a.toLowerCase();
a = a.replace(/--/g, "");
a = a.replace(/,/g, "");
a = a.replace(/\./g, "");
a = a.replace(/;/g, "");
a = a.replace(/:/g, "");
a = a.replace(/\(/g, "");
a = a.replace(/\)/g, "");
a = a.replace(/\[/g, "");
a = a.replace(/\]/g, "");
a = a.replace(/\'/g, "");
a = a.replace(/\"/g, "");
a = a.replace(/´/g, "");
a = a.replace(/`/g, "");
a = a.replace(/“/g, "");
a = a.replace(/”/g, "");
if (a.lastIndexOf(" ") == a.length - 1) { a = a.substring(0, a.length - 1) }
}
a = a.replace(/ /g, " ");
return a
};
TRAVizAligner.prototype.alignSentences = function(I) {
var h = this;
var x = [];
var f = [];
var M = [];
var a = undefined;
var J = [];
var L = [];
for (var G = 0; G < I.length; G++) {
var H = [];
a = undefined;
var m = this.normalize(I[G]);
var s = m.split(" ");
var r = [];
for (var D = 0; D < s.length; D++) {
var l = s[D];
var g = s[D];
var y = false;
if (l.indexOf("<>") != -1) {
y = l.substring(1, l.indexOf(">"));
g = l.substring(l.indexOf(">") + 1);
g = g.substring(0, g.indexOf("<"));
l = l.substring(0, l.indexOf(">") + 1) + "<>"
}
var K = { id: G + "-" + D, word: l, sid: G, wid: D, gid: x.length };
x.push(K);
H.push(K);
r.push(K);
var q = new TRAVizVertex(this.graph, this.config.getVertexIndex(), l);
if (y) {
q.preferenceId = y;
if (typeof L[y] == "undefined") { L[y] = { vertices: [q], tokens: [g] } } else {
L[y].vertices.push(q);
L[y].tokens.push(g)
}
}
q.sources.push({ sourceId: G, token: l });
this.graph.addVertex(q);
if (typeof a != "undefined") {
a.addSuccessor(q.index);
q.addPredecessor(a.index)
}
a = q;
f[K.id] = q
}
J.push(H);
M.push(r)
}
var F = function(k, j) { if (k.length > j.length) { return -1 } if (k.length == j.length) { return 0 } return 1 };
var N = [];
var w = [];
var A = [];
var u = [];
for (var G = 0; G < x.length; G++) {
w.push([]);
A.push(false);
u.push(false)
}
for (var G = 0; G < M.length - 1; G++) {
for (var D = G + 1; D < M.length; D++) {
var b = this.pairAlignment(M[G], M[D], []);
if (b.length == 0) { continue } b.sort(F);
var z = "";
for (var C = 0; C < b[0].length; C++) {
N.push({ pair: b[0][C], value: 2 });
var o = b[0][C].w1;
var n = b[0][C].w2;
w[o.gid].push(n);
w[n.gid].push(o)
}
}
}
if (this.config.options.optimizeAlignment) {
for (var G = 0; G < N.length; G++) { var o = N[G].pair.w1; var n = N[G].pair.w2; for (var D = 0; D < w[o.gid].length; D++) { if (w[o.gid][D] == n) { continue } for (var C = 0; C < w[n.gid].length; C++) { if (w[n.gid][C] == o) { continue } if (w[o.gid][D] == w[n.gid][C]) { N[G].value++ } } } }
var p = function(k, j) { if (k.value > j.value) { return -1 } if (k.value == j.value) { return 0 } return 1 };
N.sort(p)
}
for (var G = 0; G < L.length; G++) { for (var D = 0; D < L[G].vertices.length; D++) { L[G].vertices[D].token = L[G].tokens[D] } }
var B = function(k, j) {
var Q = h.graph.getVertex(f[k.id].index),
P = h.graph.getVertex(f[j.id].index);
if (Q == P) { return }
var t = h.graph.isAcyclicFromVertex(Q, P);
if (t) { for (var O = 0; O < x.length; O++) { if (f[x[O].id] == Q || f[x[O].id] == P) { f[x[O].id] = t } } }
};
if (L.length > 0) {
for (var G = 0; G < N.length; G++) {
var d = h.graph.getVertex(f[o.id].index),
c = h.graph.getVertex(f[n.id].index);
if (d.preferenceId && d.preferenceId == c.preferenceId) {
B(N[G].pair.w1, N[G].pair.w2);
N[G].mark = true
}
}
}
for (var G = 0; G < N.length; G++) { if (!N[G].mark) { B(N[G].pair.w1, N[G].pair.w2) } }
var e = [];
for (var G = 0; G < J.length; G++) {
var E = [this.graph.startVertex];
for (var D = 0; D < J[G].length; D++) {
var q = f[J[G][D].id];
if (D == 0) {
this.graph.startVertex.addSuccessor(q.index);
q.addPredecessor(this.graph.startVertex.index)
}
if (D == J[G].length - 1) {
q.addSuccessor(this.graph.endVertex.index);
this.graph.endVertex.addPredecessor(q.index)
}
E.push(q)
}
E.push(this.graph.endVertex);
e.push(E)
}
return e
};
TRAVizAligner.prototype.getEditDistance = function(d, c) { if (d.length === 0) { return c.length } if (c.length === 0) { return d.length } var e = []; var g; for (g = 0; g <= c.length; g++) { e[g] = [g] } var f; for (f = 0; f <= d.length; f++) { e[0][f] = f } for (g = 1; g <= c.length; g++) { for (f = 1; f <= d.length; f++) { if (c.charAt(g - 1) == d.charAt(f - 1)) { e[g][f] = e[g - 1][f - 1] } else { e[g][f] = Math.min(e[g - 1][f - 1] + 1, Math.min(e[g][f - 1] + 1, e[g - 1][f] + 1)) } } } return e[c.length][d.length] };
TRAVizAligner.prototype.pairAlignment = function(n, m) {
var l = [];
for (var h = 0; h < n.length; h++) { l.push([]); for (var g = 0; g < m.length; g++) { if (this.config.options.editDistance) { var a = this.getEditDistance(n[h].word, m[g].word); var e = 2 * a / (n[h].word.length + m[g].word.length); if (e <= this.config.options.editDistance) { l[h].push(m[g]) } } else { if (n[h].word == m[g].word) { l[h].push(m[g]) } } } }
var q = [];
for (var h = 0; h < l.length; h++) {
var d = [];
var o = function(w) {
var r = w[w.length - 1];
var t = false;
var v = [];
for (var s = d.length; s > 0; s--) {
var u = d[s - 1];
var k = u[u.length - 1];
if (r.w2 == k.w2 && w.length != u.length) {
if (w.length <= u.length) {
v.push(u);
t = true
}
} else {
if (r.w2 == k.w2 && w.length == u.length) {
v.push(u);
t = true
} else { v.push(u) }
}
}
if (!t) { v.push(w) } d = v
};
for (var f = 0; f < q.length; f++) {
var p = q[f];
o(p);
var b = p[p.length - 1].w2;
for (var g = 0; g < l[h].length; g++) { var c = l[h][g]; if (c.wid > b.wid) { o(p.concat([{ w1: n[h], w2: c }])) } }
}
for (var g = 0; g < l[h].length; g++) { o([{ w1: n[h], w2: l[h][g] }]) } q = d
}
return q
};
TRAVizAligner.prototype.strongestShortestPath = function(o) {
var c = 0,
b = 1000000;
var n = undefined;
for (var e = 0; e < o.successors.length; e++) {
var g = [o];
var f = o.count;
var l = 1;
var h = this.graph.getVertex(o.successors[e]);
g.push(h);
if (!h.traced) {
var m = h.successors;
f += h.count;
while (m.length > 0) {
var a = this.graph.getVertex(m[0]).count;
var k = this.graph.getVertex(m[0]);
for (var d = 1; d < m.length; d++) {
if (this.graph.getVertex(m[d]).count > a) {
a = this.graph.getVertex(m[d]).count;
k = this.graph.getVertex(m[d])
}
}
l++;
g.push(k);
if (!k.traced) {
f += a;
m = k.successors
} else { m = [] }
}
}
if (l < b || l == b && f > c) {
b = l;
c = f;
n = g
}
}
return { strength: c, length: b, path: n }
};
TRAVizAligner.prototype.getPaths = function(b) {
for (var f = 0; f < this.graph.vertices.length; f++) { this.graph.vertices[f].traced = false }
var a = b;
for (var f = 0; f < a.length; f++) { a[f].traced = true }
var l = [a];
var g = true;
var e = 0;
while (g) {
e++;
g = false;
var h = undefined;
for (var f = 0; f < this.graph.vertices.length; f++) {
var j = this.graph.vertices[f];
if (j.traced) {
for (var d = 0; d < j.successors.length; d++) {
if (!this.graph.getVertex(j.successors[d]).traced) {
var a = this.strongestShortestPath(this.graph.getVertex(j.successors[d]));
a.path.splice(0, 0, j);
if (typeof h == "undefined" || h.length > a.length || h.length == a.length && a.strength > h.strength) { h = a }
}
}
} else { g = true }
}
if (typeof h != "undefined") { for (var f = 0; f < h.path.length; f++) { h.path[f].traced = true } l.push(h.path) }
}
return l
};
TRAVizAligner.prototype.getPathsByEdition = function(d, k) {
var h = [];
for (var f = 0; f < k.length; f++) { if (d != k[f]) { h.push(k[f]) } }
for (var f = 0; f < this.graph.vertices.length; f++) { this.graph.vertices[f].traced = false }
var b = d;
for (var f = 0; f < b.length; f++) { b[f].traced = true }
var o = [b];
while (h.length > 0) {
var n = false,
a = false,
c = false;
for (var f = 0; f < h.length; f++) {
var m = 0;
var l = 0;
for (var e = 0; e < h[f].length; e++) { if (h[f][e].traced) { m++ } else { l += h[f][e].count } }
if (!n || m > n || m == n && l > c) {
n = m;
a = f;
c = l
}
}
var g = false;
for (var f = 0; f < h[a].length; f++) {
if (!g && !h[a][f].traced) { g = [h[a][f - 1], h[a][f]] } else {
if (g && h[a][f].traced) {
g.push(h[a][f]);
o.push(g);
g = false
} else { if (g && !h[a][f].traced) { g.push(h[a][f]) } }
}
h[a][f].traced = true
}
if (g) { o.push(g) } h.splice(a, 1)
}
return o
};
function TRAViz(b, a) {
this.div = b;
this.config = new TRAVizConfig(a);
this.curveRadius = this.config.options.curveRadius;
this.graph = new TRAVizGraph(this.config);
this.startVertex = new TRAVizVertex(this.graph, "first", "");
this.graph.addVertex(this.startVertex);
this.endVertex = new TRAVizVertex(this.graph, "last", "");
this.graph.addVertex(this.endVertex);
this.graph.startVertex = this.startVertex;
this.graph.endVertex = this.endVertex
}
TRAViz.prototype.align = function(a) {
this.editions = [];
this.sentences = [];
this.colorMap = [];
var b = this.config.getColors(a.length);
for (var g = 0; g < a.length; g++) {
this.editions.push(a[g].edition);
this.sentences.push(a[g].text);
this.colorMap[a[g].edition] = b[g]
}
this.mainBranch = this.editions[0];
this.aligner = new TRAVizAligner(this.graph, this.config);
this.sentencePaths = this.aligner.alignSentences(this.sentences);
console.log(this.sentencePaths)
this.sentencePathHash = [];
for (var g = 0; g < this.editions.length; g++) { this.sentencePathHash[this.editions[g]] = this.sentencePaths[g] } this.vertices = this.aligner.graph.vertices;
for (var g = 0; g < this.vertices.length; g++) {
var m = this.vertices[g];
var n = "";
var h = 0;
var l = [];
for (var f = 0; f < m.sources.length; f++) {
var d = m.sources[f].token;
var o = false;
for (var e = 0; e < l.length; e++) {
if (l[e].t == d) {
l[e].c++;
o = true;
if (l[e].c > h) {
n = d;
h = l[e].c
}
break
}
}
if (!o) {
l.push({ t: d, c: 1 });
if (h == 0) {
n = d;
h = 1
}
}
}
m.token = n
}
this.originGraph = this.graph.clone();
this.originSentencePaths = [];
for (var g = 0; g < this.sentencePaths.length; g++) { this.originSentencePaths.push([]); for (var f = 0; f < this.sentencePaths[g].length; f++) { this.originSentencePaths.push(this.sentencePaths[g][f]) } }
};
TRAViz.prototype.loadGraphML = function(g) {
this.editions = [];
this.sentences = [];
this.colorMap = [];
var a = this.config.getColors(sources.length);
for (var f = 0; f < sources.length; f++) {
this.editions.push(sources[f].edition);
this.sentences.push(sources[f].text);
this.colorMap[sources[f].edition] = a[f]
}
this.mainBranch = this.editions[0];
this.aligner = new TRAVizAligner(this.graph, this.config);
this.sentencePaths = this.aligner.alignSentences(this.sentences);
this.sentencePathHash = [];
for (var f = 0; f < this.editions.length; f++) { this.sentencePathHash[this.editions[f]] = this.sentencePaths[f] } this.vertices = this.aligner.graph.vertices;
for (var f = 0; f < this.vertices.length; f++) {
var m = this.vertices[f];
var n = "";
var h = 0;
var l = [];
for (var e = 0; e < m.sources.length; e++) {
var b = m.sources[e].token;
var o = false;
for (var d = 0; d < l.length; d++) {
if (l[d].t == b) {
l[d].c++;
o = true;
if (l[d].c > h) {
n = b;
h = l[d].c
}
break
}
}
if (!o) {
l.push({ t: b, c: 1 });
if (h == 0) {
n = b;
h = 1
}
}
}
m.token = n
}
this.originGraph = this.graph.clone();
this.originSentencePaths = [];
for (var f = 0; f < this.sentencePaths.length; f++) { this.originSentencePaths.push([]); for (var e = 0; e < this.sentencePaths[f].length; e++) { this.originSentencePaths.push(this.sentencePaths[f][e]) } }
};
TRAViz.prototype.reset = function(l) {
for (var f = 0; f < this.sentencePaths.length; f++) { var a = this.sentencePaths[f]; for (var e = a.length; e > 0; e--) { if (a[e - 1].dummy) { a.splice(e - 1, 1) } } }
for (var f = 0; f < this.originGraph.vertices.length; f++) {
var l = this.originGraph.vertices[f];
l.predecessors = [];
l.successors = []
}
for (var f = 0; f < this.sentencePaths.length; f++) {
var a = this.sentencePaths[f];
for (var e = 0; e < a.length - 1; e++) {
this.originGraph.getVertex(a[e].index).addSuccessor(a[e + 1].index);
this.originGraph.getVertex(a[e + 1].index).addPredecessor(a[e].index)
}
}
this.graph = this.originGraph.clone();
this.aligner.graph = this.graph;
this.vertices = this.graph.vertices;
this.startVertex = this.graph.getVertex("first");
this.endVertex = this.graph.getVertex("last");
for (var f = 0; f < this.sentencePaths.length; f++) { var a = this.sentencePaths[f]; for (var e = a.length; e > 0; e--) { a[e - 1] = this.graph.getVertex(a[e - 1].index) } }
for (var f = 0; f < this.vertices.length; f++) {
var l = this.vertices[f];
l.layer = undefined;
l.originLayer = undefined;
var m = "";
var g = 0;
var h = [];
for (var e = 0; e < l.sources.length; e++) {
var b = l.sources[e].token;
var n = false;
for (var d = 0; d < h.length; d++) {
if (h[d].t == b) {
h[d].c++;
n = true;
if (h[d].c > g) {
m = b;
g = h[d].c
}
break
}
}
if (!n) {
h.push({ t: b, c: 1 });
if (g == 0) {
m = b;
g = 1
}
}
}
l.token = m
}
};
TRAViz.prototype.setColorMap = function(a) { this.colorMap = a };
TRAViz.prototype.prepareConnections = function() {
this.connections = [];
var f = [];
for (var m = 0; m < this.layers.length; m++) {
var t = { height: 0, paths: [], index: this.layers[m].index };
f.push(t)
}
var n = function(k, p) { for (var j = 0; j < f.length; j++) { if (f[j].index == k) { f[j].paths.push(p); break } } };
var q = this;
var l = function() {
var p = 1000000,
B = 0;
for (var A = 0; A < q.layout.length; A++) { var E = q.layout[A]; if (E.x1 < p) { p = E.x1 } if (E.x2 > B) { B = E.x2 } }
var x = function(k, j) { if (k.length != j.length) { return false } for (var v = 0; v < k.length; v++) { if (k[v] != j[v]) { return false } } return true };
for (var A = 0; A < f.length; A++) {
var F = f[A];
var C = 0;
var w = [];
for (var z = p; z < B; z++) { var D = []; for (var y = 0; y < F.paths.length; y++) { if (F.paths[y].v1.x2 < z && F.paths[y].v2.x1 > z) { D.push(F.paths[y]) } } if (D.length > 0 && (w.length == 0 || !x(w[w.length - 1], D))) { w.push(D) } }
var C = 0;
for (var z = 0; z < w.length; z++) { if (w[z].length > C) { C = w[z].length } } F.height = C * 3 + 2 * q.curveRadius;
F.groups = w
}
};
for (var m = 0; m < this.vertices.length; m++) {
var u = this.vertices[m];
var d = u.successors;
for (var h = 0; h < d.length; h++) {
var s = u;
var r = this.graph.getVertex(d[h]);
if (!this.config.options.startAndEnd && (s == this.startVertex || r == this.endVertex)) { continue }
if (u.token == "" && r.token == "" && !r.linebreak && r != this.endVertex) { continue }
if (s.layer == r.layer) {
var e = false;
for (var g = 0; g < this.vertices.length; g++) { if (this.vertices[g] == s || this.vertices[g] == r) { continue } if (this.vertices[g].layer == s.layer && s.x1 < this.vertices[g].x1 && this.vertices[g].x1 < r.x1) { e = true; break } }
if (e) {
var c = new TRAVizConnection(s, r, 0);
var b = new TRAVizVerticalConnection(s, r, "source");
var o = new TRAVizHorizontalConnection(s, r, 0);
var a = new TRAVizVerticalConnection(s, r, "sink");
this.connections.push(c);
c.addLink(b);
c.addLink(o);
c.addLink(a);
n(s.layer, o)
} else { this.connections.push(new TRAVizConnection(s, r, -1)) }
} else {
var c = new TRAVizConnection(s, r, 3);
this.connections.push(c);
var b = new TRAVizVerticalConnection(s, r, "source");
var o = new TRAVizHorizontalConnection(s, r, 3);
var a = new TRAVizVerticalConnection(s, r, "sink");
if (Math.abs(s.layer) > Math.abs(r.layer)) { if (s.layer < 0) { n(s.layer + 1, o) } else { n(s.layer, o) } } else { if (r.layer < 0) { n(r.layer + 1, o) } else { n(r.layer, o) } } c.addLink(b);
c.addLink(o);
c.addLink(a)
}
}
}
l();
this.horizontalSlots = f
};
TRAViz.prototype.addEdgeToGroup = function(d, b, k, c) {
var j = false;
for (var a = 0; a < this.edgeGroups.length; a++) {
var f = this.edgeGroups[a];
if (f.h == d && f.t == b) {
f.edges.push(k);
f.ids = f.ids.concat(c);
j = true;
break
}
}
if (!j) { this.edgeGroups.push({ h: d, t: b, edges: [k], ids: c }) }
};
TRAViz.prototype.computeEdgeLabels = function() { for (var c = 0; c < this.edgeGroups.length; c++) { var d = this.edgeGroups[c]; var b = ""; for (var a = 0; a < d.ids.length; a++) { b += "<div style='text-align:center;color:" + this.colorMap[this.editions[d.ids[a]]] + ";'>" + this.editions[d.ids[a]] + "</div>" } for (var a = 0; a < d.edges.length; a++) { $(d.edges[a].node).qtip({ content: { text: b }, style: { tip: true, border: { width: 0, radius: 4 }, width: { min: 100, max: 500 } }, position: { target: "mouse", corner: { tooltip: "bottomMiddle", target: "topMiddle" }, adjust: { x: -6 } }, show: { when: "mouseenter", solo: true }, hide: { when: { event: "mouseleave" } } }) } } };
TRAViz.prototype.generalConnections = function() {
for (var c = 0; c < this.connections.length; c++) {
var d = this.generatePath(this.connections[c], 0, 0);
var a = this.paper.path(d).attr({ stroke: this.config.options.baseColor, "stroke-width": 3, "stroke-linecap": "round", opacity: "0.8" });
this.basicConnections.push(a)
}
for (var c = 0; c < this.vertices.length; c++) { var b = this.vertices[c]; if (b == this.startVertex || b == this.endVertex || b.token == "") { continue } if (this.config.options.vertexBackground) { b.rect.toFront() } if (b.count > this.config.options.collapseLabels) { b.textNode.toFront() } }
};
TRAViz.prototype.adjustVerticalConnections = function() {
var z = [];
for (var V = 0; V < this.connections.length; V++) {
var X = this.connections[V];
var l = X.v1.x2;
var f = X.v2.x1;
var L = (l + f) / 2;
var ac = (X.v1.y1 + X.v1.y2) / 2;
var ab = (X.v2.y1 + X.v2.y2) / 2;
if (X.type == 1) {
var q, o;
if (ac > ab) {
q = ac - this.curveRadius;
o = ab + this.curveRadius
} else {
q = ac + this.curveRadius;
o = ab - this.curveRadius
}
var u = X.links[0];
u.position(L, q, o);
z.push(u)
} else {
if (X.type == 0 || X.type == 3) {
var W = X.links[1];
var a = l + this.curveRadius;
var J, H;
if (X.v1.layer >= X.v2.layer) {
J = ac - this.curveRadius;
H = W.y1 + this.curveRadius
} else {
J = ac + this.curveRadius;
H = W.y1 - this.curveRadius
}
var x = X.links[0];
x.position(a, J, H);
z.push(x);
var I = f - this.curveRadius;
var E, D;
if (X.v1.layer <= X.v2.layer) {
E = W.y1 + this.curveRadius;
D = ab - this.curveRadius
} else {
E = W.y1 - this.curveRadius;
D = ab + this.curveRadius
}
var w = X.links[X.links.length - 1];
w.position(I, E, D);
z.push(w)
}
}
}
this.verticals = z;
var d = function(h, c) { if (h.x1 < c.x1) { return -1 } if (h.x1 == c.x1 && h.yMax() > c.yMax()) { return -1 } return 1 };
z.sort(d);
var e = [];
for (var U = 0; U < z.length; U++) {
var g = false;
var B = false;
for (var S = 0; S < e.length; S++) {
if ((z[U].type == "source" || z[U].type == 1) && e[S].source == z[U].v1) {
g = true;
e[S].paths.push(z[U]);
if (z[U].yMin() < e[S].y1) { e[S].y1 = z[U].yMin() }
if (z[U].yMax() > e[S].y2) { e[S].y2 = z[U].yMax() }
}
if ((z[U].type == "sink" || z[U].type == 1) && e[S].sink == z[U].v2) {
B = true;
e[S].paths.push(z[U]);
if (z[U].yMin() < e[S].y1) { e[S].y1 = z[U].yMin() }
if (z[U].yMax() > e[S].y2) { e[S].y2 = z[U].yMax() }
}
}
if (!g && z[U].type != "sink") { e.push({ vertex: z[U].v1, source: z[U].v1, paths: [z[U]], y1: z[U].yMin(), y2: z[U].yMax(), x: z[U].v1.x2 + this.curveRadius }) }
if (!B && z[U].type != "source") { e.push({ vertex: z[U].v2, sink: z[U].v2, paths: [z[U]], y1: z[U].yMin(), y2: z[U].yMax(), x: z[U].v2.x1 - this.curveRadius }) }
}
var N = function(h, c) { if (h.paths.length > c.paths.length) { return 1 } if (h.paths.length == c.paths.length && Math.abs(h.vertex.originLayer) < Math.abs(c.vertex.originLayer)) { return 1 } return -1 };
e.sort(N);
var t = [];
for (var U = e.length; U > 0; U--) {
var T = e[U - 1];
var b = [];
for (var S = 0; S < T.paths.length; S++) { if (!T.paths[S].placed) { b.push(T.paths[S]) } }
if (b.length < T.paths.length) {
if (b.length == 0) { e.pop(); continue } T.paths = b;
e.sort(N);
U = e.length + 1;
continue
}
for (var S = 0; S < T.paths.length; S++) { T.paths[S].placed = true } t.push(T);
e.pop()
}
e = t;
var C = function(h, c) { if (h.x < c.x) { return 1 } if (h.x == c.x) { if (h.paths.length > c.paths.length && h.source) { return 1 } } return -1 };
e.sort(C);
var F = [];
for (var U = e.length; U > 0; U--) {
var T = e[U - 1];
if (typeof T.source != "undefined") {
var y = T.x;
var P = T.paths[0].v1.x2 + this.curveRadius;
if (y != P) {
T.x = P;
e.sort(C);
U = e.length + 1;
continue
}
}
if (typeof T.sink != "undefined") {
var y = T.x;
var P = T.paths[0].v2.x1 - this.curveRadius;
if (y != P) {
T.x = P;
e.sort(C);
U = e.length + 1;
continue
}
}
do {
var ad = false;
for (var S = 0; S < F.length; S++) {
var R = F[S];
if (Math.abs(T.x - R.x) < this.config.options.edgeGap && !(T.y1 > R.y2 || R.y1 > T.y2)) {
ad = true;
T.x += this.config.options.edgeGap - Math.abs(T.x - R.x)
}
}
} while (ad);
for (var S = 0; S < T.paths.length; S++) {
var M = T.paths[S];
M.x1 = T.x;
M.x2 = T.x;
M.gc = T.paths.length;
var G = M.v2;
if (G.x1 - T.x < this.curveRadius) {
var K = this.curveRadius - (G.x1 - T.x);
G.x1 += K;
G.x2 += K;
var A = [];
for (var Q = 0; Q < G.successors.length; Q++) { if (G.level == this.graph.getVertex(G.successors[Q]).level) { A.push({ head: G, tail: this.graph.getVertex(G.successors[Q]) }) } }
while (A.length > 0) {
var Z = [];
for (var Q = 0; Q < A.length; Q++) {
var aa = A[Q].head;
var Y = A[Q].tail;
if (Y.x1 - aa.x2 < 4 * this.curveRadius) {
var r = 4 * this.curveRadius - (Y.x1 - aa.x2);
Y.x1 += r;
Y.x2 += r;
for (var O = 0; O < Y.successors.length; O++) { Z.push({ head: Y, tail: this.graph.getVertex(Y.successors[O]) }) }
}
}
A = Z
}
}
}
F.push(T);
e.pop()
}
};
TRAViz.prototype.removeVertical = function(a) { for (var b = 0; b < this.verticals.length; b++) { if (this.verticals[b] == a) { this.verticals.splice(b, 1); return } } };
TRAViz.prototype.removeOverlaps = function() {
var w = function(k, j) { if (k.x1 > j.x1) { return 1 } if (k.x1 == j.x1) { return 0 } return -1 };
for (var s = 0; s < this.verticals.length; s++) {
for (var r = 0; r < this.vertices.length; r++) {
if (this.vertices[r].token == "") { continue }
var a = this.verticals[s].x1 - this.curveRadius,
x = this.verticals[s].x2 + this.curveRadius,
o = this.verticals[s].yMin() - this.curveRadius,
n = this.verticals[s].yMax() + this.curveRadius;
var m = this.vertices[r].x1,
l = this.vertices[r].x2,
v = this.vertices[r].y1,
u = this.vertices[r].y2;
if (this.overlap(a, x, m, l, o, n, v, u)) {
var d = this.vertices[r];
var t = Math.abs(this.vertices[r].x2 - a);
var p = Math.abs(d.x1 - x);
var h = false;
var b = true;
for (var q = 0; q < this.vertices.length; q++) { var e = this.vertices[q]; if (d == e) { continue } if (e == this.startVertex && !this.config.options.startAndEnd) { continue } var f = this.getConnection(e, d); if (!f) { b = false } else { if (f.type == 1 && f.links[0].x1 + this.curveRadius >= d.x1 - t) { b = false } else { if (f.type == -1 && f.v2.x1 - f.v1.x2 - 3 * this.curveRadius < t) { b = false } else { if (f.type != -1 && f.type != 1) { b = false } } } } }
if (b) {
h = true;
d.x1 -= t;
d.x2 -= t
}
if (!h) {
var g = true;
for (var q = 0; q < this.vertices.length; q++) { var c = this.vertices[q]; if (d == c) { continue } var f = this.getConnection(d, c); if (c == this.endVertex && !this.config.options.startAndEnd) { continue } if (!f) { g = false } else { if (f.type == 1 && f.links[0].x1 - this.curveRadius < d.x2 + p) { g = false } else { if (f.type == -1 && f.v2.x1 - f.v1.x2 - 3 * this.curveRadius < p) { g = false } else { if (f.type != -1 && f.type != 1) { g = false } } } } }
if (g) {
h = true;
d.x1 += p;
d.x2 += p
}
}
}
}
}
};
TRAViz.prototype.transformEdgeTypes = function() {
var F = [];
for (var w = 0; w < this.connections.length; w++) {
var D = this.connections[w];
if (D.type == 1) {
var p = D.links[0];
var l = (D.v1.y1 + D.v1.y2) / 2;
var k = (D.v2.y1 + D.v2.y2) / 2;
F.push({ x1: D.v1.x2, x2: p.x1, y1: l, y2: l, v1: D.v1, v2: D.v2 });
F.push({ x1: p.x1, x2: D.v2.x1, y1: k, y2: k, v1: D.v1, v2: D.v2 })
}
}
for (var w = 0; w < this.connections.length; w++) {
var D = this.connections[w];
if (D.type == 0 || D.type == 3) {
var g = D.links[0];
var z = D.links[1];
var e = D.links[2];
z.x1 = g.x1 + this.curveRadius;
z.x2 = e.x1 - this.curveRadius
}
}
var r = function(h, c) { if (h.v1.x2 > c.v1.x2) { return 1 } return -1 };
this.connections.sort(r);
for (var w = 0; w < this.connections.length; w++) {
var D = this.connections[w];
if (D.type == 3) {
var z = D.links[1];
var l = (D.v1.y1 + D.v1.y2) / 2;
var k = (D.v2.y1 + D.v2.y2) / 2;
var a = z.x1 - this.curveRadius,
G = z.x2 + this.curveRadius,
u = D.v1.y1,
t = D.v1.y2,
f = D.v2.y1,
d = D.v2.y2;
var q = false;
var o = false;
for (var s = 0; s < this.vertices.length; s++) {
var p = this.vertices[s];
var n = p.x1,
m = p.x2,
E = p.y1,
C = p.y2;
if (this.overlap(a, G, n, m, u, t, E, C)) { q = true; break }
if (this.overlap(D.v2.x1 - 2 * this.curveRadius, D.v2.x1, n, m, Math.min(l, k), Math.max(l, k), E, C)) {}
}
for (var s = 0; s < F.length; s++) { var z = F[s]; if (D.v1 == z.v1 || D.v2 == z.v2) { continue } if (this.overlap(a, G, z.x1, z.x2, u, t, z.y1, z.y2)) { q = true; break } }
for (var s = 0; s < this.verticals.length; s++) { var y = this.verticals[s]; if (D.v2 == y.v2) { continue } if (this.overlap(D.links[2].x1, D.links[2].x1, y.x1 - this.config.options.edgeGap, y.x2 + this.config.options.edgeGap, Math.min(l, k), Math.max(l, k), Math.min(y.y1, y.y2), Math.max(y.y1, y.y2))) { q = true; break } }
for (var s = 0; s < this.vertices.length; s++) {
var p = this.vertices[s];
var n = p.x1,
m = p.x2,
E = p.y1,
C = p.y2;
if (this.overlap(a, G, n, m, f, d, E, C)) { o = true; break }
if (this.overlap(D.v1.x2, D.v1.x2 + 2 * this.curveRadius, n, m, Math.min(l, k), Math.max(l, k), E, C)) {}
}
for (var s = 0; s < F.length; s++) { var z = F[s]; if (D.v1 == z.v1 || D.v2 == z.v2) { continue } if (this.overlap(a, G, z.x1, z.x2, f, d, z.y1, z.y2)) { o = true; break } }
for (var s = 0; s < this.verticals.length; s++) { var y = this.verticals[s]; if (D.v1 == y.v1) { continue } if (this.overlap(D.links[0].x1, D.links[0].x1, y.x1 - this.config.options.edgeGap, y.x2 + this.config.options.edgeGap, Math.min(l, k), Math.max(l, k), Math.min(y.y1, y.y2), Math.max(y.y1, y.y2))) { o = true; break } }
var A = false,
x = false;
if (q && !o) { A = true } else { if (!q && o) { x = true } else { if (!q && !o && D.links[0].gc > D.links[2].gc) { A = true } else { if (!q && !o && D.links[0].gc < D.links[2].gc) { x = true } else { if (!q && !o && Math.abs(D.v1.originLayer) < Math.abs(D.v2.originLayer)) { A = true } else { if (!q && !o && Math.abs(D.v1.originLayer) >= Math.abs(D.v2.originLayer)) { x = true } } } } } }
if (A) {
D.type = 1;
this.removeVertical(D.links[2]);
var b = D.links[0];
b.type = "source";
var B = (b.v1.layer + b.v2.layer) / 2;
if (b.v1.layer < B) {
b.y1 = l + this.curveRadius;
b.y2 = k - this.curveRadius
} else {
b.y1 = l - this.curveRadius;
b.y2 = k + this.curveRadius
}
D.links = [b];
F.push({ x1: a - this.curveRadius, x2: G + this.curveRadius, y1: f - this.curveRadius, y2: d + this.curveRadius, v1: D.v1, v2: D.v2 })
}
if (x) {
D.type = 1;
this.removeVertical(D.links[0]);
var b = D.links[2];
b.type = "sink";
var B = (b.v1.layer + b.v2.layer) / 2;
if (b.v1.layer < B) {
b.y1 = l + this.curveRadius;
b.y2 = k - this.curveRadius
} else {
b.y1 = l - this.curveRadius;
b.y2 = k + this.curveRadius
}
D.links = [b];
F.push({ x1: a - this.curveRadius, x2: G + this.curveRadius, y1: t - this.curveRadius, y2: t + this.curveRadius, v1: D.v1, v2: D.v2 })
}
}
}
};
TRAViz.prototype.adjustHorizontalConnections = function() {
var d = function(k, j) { if (k.type == 0 && j.type == 0) { if (k.x2 - k.x1 < j.x2 - j.x1) { return -1 } return 1 } else { if (k.type == 0) { return -1 } else { if (j.type == 0) { return 1 } else { if (k.x2 == j.x2) { if (k.x1 < j.x1) { return -1 } return 1 } else { if (k.x2 < j.x2) { return -1 } } return 1 } } } };
for (var q = 0; q < this.horizontalSlots.length; q++) {
var m = [];
var v = this.horizontalSlots[q];
var n = v.paths;
for (var p = 0; p < n.length; p++) {
var f = n[p];
var s = f.v1.x2;
var r = f.v2.x1;
var h = v.yMax - 2;
f.position(s + 2 * this.curveRadius, r - 2 * this.curveRadius, h)
}
n.sort(d);
var u = [];
for (var p = 0; p < n.length; p++) {
var g = false;
var l = false;
for (var o = 0; o < u.length; o++) {
if (u[o].source == n[p].v1) {
g = true;
u[o].paths.push(n[p]);
if (n[p].x1 < u[o].x1) { u[o].x1 = n[p].x1 }
if (n[p].x2 > u[o].x2) { u[o].x2 = n[p].x2 }
}
if (u[o].sink == n[p].v2) {
l = true;
u[o].paths.push(n[p]);
if (n[p].x1 < u[o].x1) { u[o].x1 = n[p].x1 }
if (n[p].x2 > u[o].x2) { u[o].x2 = n[p].x2 }
}
}
if (!g) { u.push({ source: n[p].v1, paths: [n[p]], x1: n[p].x1, x2: n[p].x2, y: n[p].y1 }) }
if (!l) { u.push({ sink: n[p].v2, paths: [n[p]], x1: n[p].x1, x2: n[p].x2, y: n[p].y1 }) }
}
var e = function(k, j) { if (k.paths.length > j.paths.length) { return 1 } return -1 };
u.sort(e);
var c = [];
for (var p = u.length; p > 0; p--) {
var b = u[p - 1];
var t = [];
for (var o = 0; o < b.paths.length; o++) { if (!b.paths[o].placed) { t.push(b.paths[o]) } }
if (t.length < b.paths.length) {
b.paths = t;
u.sort(e);
p = u.length + 1;
continue
}
do {
var a = false;
for (var o = 0; o < c.length; o++) {
var w = c[o];
if (b.y == w.y && !(b.x1 - this.curveRadius > w.x2 || w.x1 - this.curveRadius > b.x2)) {
a = true;
b.y -= this.config.options.edgeGap
}
}
} while (a);
for (var o = 0; o < b.paths.length; o++) {
b.paths[o].placed = true;
b.paths[o].y1 = b.y;
b.paths[o].y2 = b.y
}
c.push(b);
u.pop()
}
}
};
TRAViz.prototype.highlightEdition = function(e) { var d = this.sentencePathHash[e]; var c = ""; for (var b = 1; b < d.length; b++) { c += this.generatePath(this.getConnection(d[b - 1], d[b]), 0, 0) } var a = this.paper.path(c).attr({ stroke: this.colorMap[e], "stroke-width": 4, "stroke-linecap": "round", opacity: "1.0" }); return a };
TRAViz.prototype.insertLineNumbering = function(e, h) {
var a = 1;
var c = this.curveRadius;
var b = e - this.curveRadius;
var g = this.layers[0].yLevel - this.layers[0].height / 2 + 0.5 - Math.floor(h / 2) - 26;
var f = "M " + c + " " + g + " L " + b + " " + g;
this.paper.path(f).attr({ stroke: this.config.options.baseColor, "stroke-width": 1, "stroke-linecap": "round", opacity: "1.0" });
this.paper.text(c + 7, g + 14, this.config.options.lineNumberingText + " " + a).attr({ font: "14px " + this.config.options.font, fill: this.config.options.baseColor, "text-anchor": "start", cursor: "default" });
a++;
for (var d = 0; d < this.layers.length - 1; d++) {
if (this.layers[d].level != this.layers[d + 1].level) {
var g = this.layers[d].yLevel + this.layers[d].height / 2 + 0.5 + Math.floor(h / 2);
var f = "M " + c + " " + g + " L " + b + " " + g;
this.paper.path(f).attr({ stroke: this.config.options.baseColor, "stroke-width": 1, "stroke-linecap": "round", opacity: "1.0" });
this.paper.text(c + 7, g + 14, this.config.options.lineNumberingText + " " + a).attr({ font: "14px " + this.config.options.font, fill: this.config.options.baseColor, "text-anchor": "start", cursor: "default" });
a++
}
}
var g = this.layers[this.layers.length - 1].yLevel + this.layers[this.layers.length - 1].height / 2 + 0.5 + Math.floor(h / 2);
var f = "M " + c + " " + g + " L " + b + " " + g;
this.paper.path(f).attr({ stroke: this.config.options.baseColor, "stroke-width": 1, "stroke-linecap": "round", opacity: "1.0" })
};
TRAViz.prototype.generatePath = function(u, e, d) {
var w = function(y, M, N, c, h, L) { return "C " + y + " " + M + " " + N + " " + c + " " + h + " " + L + " " };
var t = function(h, L, c, y) { return "L " + h + " " + L + " " + c + " " + y + " " };
var K = u;
var H = K.v1.x2;
var F = K.v2.x1;
var k = (K.v1.y1 + K.v1.y2) / 2 + e;
var j = (K.v2.y1 + K.v2.y2) / 2 + d;
var B = "M " + H + " " + k + " ";
if (K.type == -1) {
var A = (F + H) / 2;
var J = (j + k) / 2;
B += w(H, k, A, k, A, J);
B += w(A, J, A, j, F, j)
} else {
if (K.type == 0 || K.type == 3) {
var g = K.links[0];
var E = K.links[1];
var f = K.links[2];
var v = g.x1,
s = g.x2,
I = g.y1 + e,
G = g.y2;
var o = E.x1,
m = E.x2,
D = E.y1,
C = E.y2;
var b = f.x1,
a = f.x2,
q = f.y1,
p = f.y2 + d;
var z = this.curveRadius,
x = this.curveRadius;
if (Math.abs(D - k) < 2 * this.curveRadius) {
z = Math.abs(D - k) / 2;
var r = (D + k) / 2;
I = r;
G = r
}
if (Math.abs(D - j) < 2 * this.curveRadius) {
x = Math.abs(D - j) / 2;
var r = (D + j) / 2;
q = r;
p = r
}
if (this.config.options.rtl) {
z *= -1;
x *= -1
}
B += t(H, k, v - z, k);
B += w(v - z, k, v, k, v, I);
B += t(v, I, s, G);
B += w(s, G, s, D, o, D);
B += t(o, D, m, C);
B += w(m, C, b, C, b, q);
B += t(b, q, a, p);
B += w(a, p, a, j, a + x, j);
B += t(a + x, j, F, j)
} else {
if (K.type == 1) {
var l = this.curveRadius;
if (this.config.options.rtl) { l *= -1 }
var n = K.links[0];
B += t(H, k, n.x1 - l, k);
B += w(n.x1 - l, k, n.x1, k, n.x1, n.y1 + e);
B += t(n.x1, n.y1 + e, n.x2, n.y2 + d);
B += w(n.x2, n.y2 + d, n.x2, j, n.x2 + l, j);
B += t(n.x2 + l, j, F, j)
}
}
}
return B
};
TRAViz.prototype.getConnection = function(c, b) { for (var a = 0; a < this.connections.length; a++) { if (this.connections[a].v1 == c && this.connections[a].v2 == b) { return this.connections[a] } } return false };
TRAViz.prototype.displayVertexConnections = function(b, f) {
this.vertexConnections = [];
for (var e = 0; e < this.vertices.length; e++) {
this.vertices[e].ins = [];
this.vertices[e].outs = []
}
for (var e = 0; e < this.sentencePaths.length; e++) { var a = this.sentencePaths[e]; for (var d = 0; d < a.length; d++) { if (a[d] == f) { for (var d = 0; d < a.length; d++) { if (d > 0) { a[d].ins.push({ v: a[d - 1], id: e }) } if (d < a.length - 1) { a[d].outs.push({ v: a[d + 1], id: e }) } } } } }
for (var e = 0; e < this.vertices.length; e++) {
var m = this.vertices[e];
var k = (m.y1 + m.y2) / 2;
if (this.vertices[e].token == "" && (this.vertices[e].ins.length <= 1 || this.vertices[e].outs.length <= 1)) {
this.vertices[e].ins = [{}];
this.vertices[e].outs = [{}]
}
this.vertices[e].ins.sort(function(q, p) { var j = (q.v.y1 + q.v.y2) / 2; var c = (p.v.y1 + p.v.y2) / 2; if (q.v == p.v && q.id > p.id) { return 1 } else { if (q.v != p.v && j == c && q.v.x2 > p.v.x2) { return 1 } else { if (q.v != p.v && j > c) { return 1 } } } return -1 });
this.vertices[e].outs.sort(function(q, p) { var j = (q.v.y1 + q.v.y2) / 2; var c = (p.v.y1 + p.v.y2) / 2; if (q.v == p.v && q.id > p.id) { return 1 } else { if (q.v != p.v && j == c && q.v.x2 < p.v.x2) { return 1 } else { if (q.v != p.v && j > c) { return 1 } } } return -1 })
}
var h = function(p, j) { if (j.length == 1) { return 0 } for (var c = 0; c < j.length; c++) { if (j[c].id == p) { return c * 3 - j.length * 3 / 2 } } };
var l = function(q, p, c) { if (p.length == 1) { return 0 } for (var j = 0; j < p.length; j++) { if (p[j].id == q) { return (j * 3 - p.length * 3 / 2) / (p.length * 2) * c / 2 } } };
for (var e = 0; e < this.sentencePaths.length; e++) {
var a = this.sentencePaths[e];
for (var d = 0; d < a.length; d++) {
if (a[d] == f) {
var o = "";
for (var d = 1; d < a.length; d++) { var g = this.getConnection(a[d - 1], a[d]); if (g) { if (this.config.options.interpolateFontSize) { o += this.generatePath(g, l(e, a[d - 1].outs, a[d - 1].boxHeight), l(e, a[d].ins, a[d].boxHeight)) } else { o += this.generatePath(g, h(e, a[d - 1].outs), h(e, a[d].ins)) } } }
var n = this.paper.path(o).attr({ stroke: this.colorMap[this.editions[e]], "stroke-width": 3, "stroke-linecap": "round", opacity: "0.8" });
n.node.setAttribute("class", "edition" + e + "-edgestyle");
this.vertexConnections.push(n);
break
}
}
}
for (var e = 0; e < this.vertices.length; e++) { var m = this.vertices[e]; if (m == this.startVertex || m == this.endVertex || m.token == "") { continue } if (this.config.options.vertexBackground) { m.rect.toFront() } if (m.count > this.config.options.collapseLabels) { m.textNode.toFront() } }
};
TRAViz.prototype.majorityConnections = function(g) {
var d = [];
for (var f = 0; f < this.vertices.length; f++) { for (var b = 0; b < this.vertices[f].successors.length; b++) { d.push({ head: this.vertices[f], tail: this.graph.getVertex(this.vertices[f].successors[b]), weight: 0, ids: [] }) } }
var s = function(u, p, t) {
for (var c = 0; c < d.length; c++) {
var j = d[c];
if (j.head == u && j.tail == p) {
j.weight++;
j.ids.push(t)
}
}
};
for (var f = 0; f < this.sentencePaths.length; f++) {
var a = this.sentencePaths[f];
s(this.startVertex, a[0], f);
s(a[a.length - 1], this.endVertex, f);
for (var b = 0; b < a.length - 1; b++) { s(a[b], a[b + 1], f) }
}
for (var f = 0; f < this.vertices.length; f++) {
this.vertices[f].ins = [];
this.vertices[f].outs = []
}
for (var f = 0; f < d.length; f++) {
var h = d[f];
if (g && h.weight > this.sentencePaths.length * this.config.options.majorityPercentage) {
h.head.outs.push({ v: h.tail, id: -1 });
h.tail.ins.push({ v: h.head, id: -1 })
} else {
for (var b = 0; b < h.ids.length; b++) {
h.head.outs.push({ v: h.tail, id: h.ids[b] });
h.tail.ins.push({ v: h.head, id: h.ids[b] })
}
}
}
for (var f = 0; f < this.vertices.length; f++) {
var o = this.vertices[f];
var m = (o.y1 + o.y2) / 2;
if (this.vertices[f].token == "" && (this.vertices[f].ins.length <= 1 || this.vertices[f].outs.length <= 1)) {
this.vertices[f].ins = [{}];
this.vertices[f].outs = [{}]
}
this.vertices[f].ins.sort(function(p, j) { var e = (p.v.y1 + p.v.y2) / 2; var c = (j.v.y1 + j.v.y2) / 2; if (p.v == j.v && p.id > j.id) { return 1 } else { if (p.v != j.v && e == c && p.v.x2 > j.v.x2) { return 1 } else { if (p.v != j.v && e > c) { return 1 } } } return -1 });
this.vertices[f].outs.sort(function(p, j) { var e = (p.v.y1 + p.v.y2) / 2; var c = (j.v.y1 + j.v.y2) / 2; if (p.v == j.v && p.id > j.id) { return 1 } else { if (p.v != j.v && e == c && p.v.x2 < j.v.x2) { return 1 } else { if (p.v != j.v && e > c) { return 1 } } } return -1 })
}
var l = function(j, e) { if (e.length == 1) { return 0 } for (var c = 0; c < e.length; c++) { if (e[c].id == j) { return c * 3 - e.length * 3 / 2 } } };
var n = function(p, j, c) { if (j.length == 1) { return 0 } for (var e = 0; e < j.length; e++) { if (j[e].id == p) { return (e * 3 - j.length * 3 / 2) / (j.length * 2) * c / 2 } } };
for (var f = 0; f < d.length; f++) {
var h = d[f];
var k = this.getConnection(h.head, h.tail);
if (!k) { continue }
if (g && h.weight > this.sentencePaths.length * this.config.options.majorityPercentage) {
var r = null;
if (this.config.options.interpolateFontSize) { r = this.generatePath(k, n(-1, h.head.outs, h.head.boxHeight), n(-1, h.tail.ins, h.tail.boxHeight)) } else { r = this.generatePath(k, l(-1, h.head.outs), l(-1, h.tail.ins)) }
var q = this.paper.path(r).attr({ stroke: this.config.options.baseColor, "stroke-width": 5, "stroke-linecap": "round", opacity: "0.8" });
q.node.setAttribute("class", "majority-edgestyle");
this.addEdgeToGroup(h.head, h.tail, q, h.ids);
this.basicConnections.push(q)
} else {
for (var b = 0; b < h.ids.length; b++) {
var r = null;
if (this.config.options.interpolateFontSize) { r = this.generatePath(k, n(h.ids[b], h.head.outs, h.head.boxHeight), n(h.ids[b], h.tail.ins, h.tail.boxHeight)) } else { r = this.generatePath(k, l(h.ids[b], h.head.outs), l(h.ids[b], h.tail.ins)) }
var q = this.paper.path(r).attr({ stroke: this.colorMap[this.editions[h.ids[b]]], "stroke-width": 3, "stroke-linecap": "round", opacity: "0.8" });
q.node.setAttribute("class", "edition" + h.ids[b] + "-edgestyle");
this.addEdgeToGroup(h.head, h.tail, q, [h.ids[b]]);
this.basicConnections.push(q)
}
}
}
for (var f = 0; f < this.vertices.length; f++) { var o = this.vertices[f]; if (o == this.startVertex || o == this.endVertex || o.token == "") { continue } if (this.config.options.vertexBackground) { o.rect.toFront() } if (o.count > this.config.options.collapseLabels) { o.textNode.toFront() } }
};
TRAViz.prototype.setXFlow = function() {
var o = 4 * this.curveRadius;
var b = [];
for (var r = 0; r < this.startVertex.successors.length; r++) { b.push({ head: this.startVertex, tail: this.graph.getVertex(this.startVertex.successors[r]) }) }
var a = this.startVertex.boxWidth;
this.startVertex.x1 = o;
this.startVertex.x2 = o + a;
while (b.length > 0) {
var y = [];
for (var r = 0; r < b.length; r++) {
var u = b[r];
var t = o;
if (u.tail.x1 < u.head.x2 + t) {
u.tail.x1 = u.head.x2 + t;
u.tail.x2 = u.head.x2 + t + u.tail.boxWidth;
for (var q = 0; q < u.tail.successors.length; q++) { y.push({ head: u.tail, tail: this.graph.getVertex(u.tail.successors[q]) }) }
}
}
b = y
}
var f = 3;
while (f > 2) {
f = 0;
for (var r = 0; r < this.vertices.length; r++) {
var m = this.vertices[r];
if (m == this.startVertex || m == this.endVertex) { continue }
var c = Math.floor((m.x2 + m.x1) / 2);
var k = m.boxWidth;
var n = undefined,
d = undefined;
for (var q = 0; q < m.predecessors.length; q++) { var s = this.graph.getVertex(m.predecessors[q]); var l = s.x2; if (s == this.startVertex && !this.config.options.startAndEnd) { n = Math.floor(m.x1 - o) } if (typeof n == "undefined" || l > n) { n = l } }
for (var q = 0; q < m.successors.length; q++) {
var p = this.graph.getVertex(m.successors[q]);
var h = p.x1;
if (p == this.endVertex && !this.config.options.startAndEnd) { d = Math.floor(m.x2 + o) }
if (typeof d == "undefined" || h < d) {
d = h;
xr = p
}
}
var x = Math.floor((n + d) / 2);
if (isNaN(x)) { x = c }
if (x != c) {
m.x1 = x - k / 2;
m.x2 = m.x1 + k;
if (f < Math.abs(x - c)) { f = Math.abs(x - c) }
}
}
}
};
TRAViz.prototype.overlap = function(e, c, b, g, d, a, h, f) { if (e >= g || c <= b || d >= f || a <= h) { return false } return true };
TRAViz.prototype.getLayer = function(a) { for (var b = 0; b < this.layers.length; b++) { if (this.layers[b].index == a) { return this.layers[b] } } return false };
TRAViz.prototype.getLayerIndex = function(a) { for (var b = 0; b < this.layers.length; b++) { if (this.layers[b].index == a) { return b } } return false };
TRAViz.prototype.setConnections = function() {
this.prepareConnections();
var d = 1000;
for (var c = 0; c < this.layers.length; c++) {
this.horizontalSlots[c].yMin = d + this.curveRadius;
this.horizontalSlots[c].yMax = d - this.curveRadius + this.horizontalSlots[c].height;
d += this.layers[c].height / 2 + this.horizontalSlots[c].height;
this.layers[c].yLevel = 0 + d;
for (var b = 0; b < this.layers[c].vertices.length; b++) {
var a = this.layers[c].vertices[b].boxHeight;
this.layers[c].vertices[b].y1 = d - a / 2;
this.layers[c].vertices[b].y2 = d + a / 2
}
d += this.layers[c].height / 2
}
this.adjustHorizontalConnections();
this.adjustVerticalConnections()
};
TRAViz.prototype.insertDummys = function() {
var n = 3 * this.curveRadius;
var p = $("#" + this.div).width();
var m = function(j, e) { if (j.x1 < e.x1) { return -1 } return 1 };
this.vertices.sort(m);
var v = this.vertices[0].x1 - n;
for (var u = 0; u < this.vertices.length; u++) {
this.vertices[u].x1 -= v;
this.vertices[u].x2 -= v;
this.vertices[u].x1Temp = this.vertices[u].x1;
this.vertices[u].x2Temp = this.vertices[u].x2
}
var f = this.vertices;
var c = 0;
while (f.length > 0) {
var o = [];
var v = 0;
var b = 0;
for (var u = 0; u < f.length; u++) {
if (f[u].x2Temp + 2 * n > p) {
if (v == 0) {
v = 3 * n - f[u].x1Temp;
f[u].x2Temp = f[u].x2Temp - f[u].x1Temp + 3 * n;
f[u].x1Temp = 3 * n;
b = (c + 1) * p - f[u].x1 + 3 * n
} else {
f[u].x1Temp += v;
f[u].x2Temp += v
}
f[u].x1 += b;
f[u].x2 += b;
o.push(f[u])
} else { f[u].level = c }
}
f = o;
c++
}
var r = [];
var d = [];
for (var u = 0; u < this.vertices.length; u++) { for (var t = 0; t < this.vertices[u].successors.length; t++) { d.push({ head: this.vertices[u], tail: this.graph.getVertex(this.vertices[u].successors[t]) }) } }
var q = [];
for (var u = 0; u < d.length; u++) {
var w = d[u];
if (w.tail.level != w.head.level) {
var g, a;
if (typeof r[w.tail.index + ""] == "undefined") {
g = new TRAVizVertex(this.graph, this.config.getVertexIndex(), "");
g.dummy = true;
g.predecessors = [w.head.index];
w.head.removeSuccessor(w.tail.index);
w.head.addSuccessor(g.index);
a = new TRAVizVertex(this.graph, this.config.getVertexIndex(), "");
a.dummy = true;
a.successors = [w.tail.index];
w.tail.removePredecessor(w.head.index);
w.tail.addPredecessor(a.index);
g.addSuccessor(a.index);
a.addPredecessor(g.index);
g.boxWidth = 0, g.boxHeight = 0;
a.boxWidth = 0, a.boxHeight = 0;
g.x1Temp = p - n, g.x2Temp = p - n;
a.x1Temp = n, a.x2Temp = n;
g.x1 = (w.head.level + 1) * p, g.x2 = (w.head.level + 1) * p;
a.x1 = (w.head.level + 1) * p, a.x2 = (w.head.level + 1) * p;
var l = [w.head, g, a, w.tail];
q.push(l);
this.graph.addVertex(g);
this.graph.addVertex(a);
g.level = w.head.level;
a.level = w.head.level + 1;
this.layout.push(g);
this.layout.push(a);
if (w.head.token == "") { g.linebreak = true }
if (w.tail.level != a.level) { d.splice(u + 1, 0, { head: a, tail: w.tail }) } else { r[w.tail.index + ""] = { h: g, t: a, path: l } }
} else {
g = r[w.tail.index + ""].h;
a = r[w.tail.index + ""].t;
w.head.removeSuccessor(w.tail.index);
w.head.addSuccessor(g.index);
w.tail.removePredecessor(w.head.index);
w.tail.addPredecessor(a.index);
g.addPredecessor(w.head.index);
var l = r[w.tail.index + ""].path;
if (Math.abs(w.head.layer) < Math.abs(l[0].layer) || Math.abs(w.head.layer) == Math.abs(l[0].layer) && w.head.x2 > l[0].x2) { l[0] = w.head }
}
for (var t = 0; t < this.sentencePaths.length; t++) { for (var s = 0; s < this.sentencePaths[t].length - 1; s++) { if (this.sentencePaths[t][s] == w.head && this.sentencePaths[t][s + 1] == w.tail) { this.sentencePaths[t].splice(s + 1, 0, g, a); break } } }
}
}
var h = function(j, e) { if (j[0].level < e[0].level) { return -1 } if (Math.abs(j[0].layer + j[3].layer) < Math.abs(e[0].layer + e[3].layer)) { return -1 } if (Math.abs(j[0].layer + j[3].layer) == Math.abs(e[0].layer + e[3].layer) && j[3].x1 - j[0].x2 < e[3].x1 - e[0].x2) { return -1 } return 1 };
q.sort(h);
for (var u = 0; u < q.length; u++) {
var l = q[u];
var x = this.getYLayer(l[0].layer, l[3].layer, l[1], true);
l[1].layer = x;
l[2].layer = x
}
for (var u = 0; u < this.vertices.length; u++) {
this.vertices[u].x1 = this.vertices[u].x1Temp;
this.vertices[u].x2 = this.vertices[u].x2Temp
}
this.vertices = this.graph.vertices
};
TRAViz.prototype.setMainBranch = function(a) {
if (this.mainBranch != a) {
this.mainBranch = a;
this.reset();
this.visualize()
}
};
TRAViz.prototype.generateTranspositionPath = function(o, m) {
var d = function(t, v, w, r, s, u) { return "C " + t + " " + v + " " + w + " " + r + " " + s + " " + u + " " };
var q = function(s, u, r, t) { return "L " + s + " " + u + " " + r + " " + t + " " };
var c = o.x,
b = m.x;
var n, l, k, j, h;
var f = this.getLayer(o.layer);
var e = this.getLayer(m.layer);
var g = Math.min(this.curveRadius, Math.abs(c - b) / 2);
if (f == e) { var n = o.y2; var l = (o.y1 + o.y2) / 2 + f.height / 2; var k = (o.y1 + o.y2) / 2 + f.height / 2 + g; var j = (m.y1 + m.y2) / 2 + f.height / 2; var h = m.y2 } else { if (f.index < e.index) { var a = this.horizontalSlots[this.getLayerIndex(o.layer) + 1].yMax - this.horizontalSlots[this.getLayerIndex(o.layer) + 1].yMin; var n = o.y2; var l = (o.y1 + o.y2) / 2 + f.height / 2 + a / 2; var k = (o.y1 + o.y2) / 2 + f.height / 2 + a / 2 + g; var j = k + g; var h = m.y1 } else { if (f.index > e.index) { var a = this.horizontalSlots[this.getLayerIndex(o.layer)].yMax - this.horizontalSlots[this.getLayerIndex(o.layer)].yMin; var n = o.y1; var l = (o.y1 + o.y2) / 2 - f.height / 2 - a / 2; var k = (o.y1 + o.y2) / 2 - f.height / 2 - a / 2 - g; var j = k - g; var h = m.y2 } } }
var p = "M " + c + " " + n + " ";
p += q(c, n, c, l);
p += d(c, l, c, k, c + g, k);
p += q(c + g, k, b - g, k);
p += d(b - g, k, b, k, b, j);
p += q(b, j, b, h);
return p
};
TRAViz.prototype.calculateTranspositions = function() {
var a = [];
for (var d = 0; d < this.vertices.length; d++) {
if (this.vertices[d] == this.startVertex || this.vertices[d] == this.endVertex || this.vertices[d].token == "") { continue } this.vertices[d].x = (this.vertices[d].x1 + this.vertices[d].x2) / 2;
var f = false;
for (var c = 0; c < a.length; c++) {
if (a[c][0].token == this.vertices[d].token) {
a[c].push(this.vertices[d]);
f = true;
break
}
}
if (!f) { a.push([this.vertices[d]]) }
}
for (var d = 0; d < a.length; d++) {
var e = a[d];
if (e.length == 1) { continue }
for (var c = 0; c < e.length; c++) {
e[c].transpositions = [];
e[c].transpositionGroup = e;
for (var b = 0; b < e.length; b++) {
if (c == b) { continue }
var l = "";
if (e[c].x < e[b].x) { l = this.generateTranspositionPath(e[c], e[b]) } else { l = this.generateTranspositionPath(e[b], e[c]) }
var h = this.paper.path(l).attr({ "stroke-width": 3, "stroke-dasharray": ".", opacity: "1.0" });
$(h.node).css("display", "none");
e[c].transpositions.push(h)
}
}
}
};
TRAViz.prototype.visualize = function() {
if (this.config.options.lineBreaks) {
if ($("#" + this.div).width() == 0) {
this.config.options.lineBreaks = false;
alert("Please check the width of your container div!")
}
}
var W = $(".trailsQtip");
for (var ae = 0; ae < W.length; ae++) { $(W[ae]).remove() }
var m = 2 * this.curveRadius;
var af = this;
var u = [];
var J = this.aligner.getPathsByEdition(this.sentencePathHash[this.mainBranch], this.sentencePaths);
var aa = [];
$("#" + this.div).empty();
var S, R = 1000;
var z = function(e) { if (!e) { e = window.event } var c = (window.document.compatMode && window.document.compatMode == "CSS1Compat") ? window.document.documentElement : window.document.body; return { top: e.pageY ? e.pageY : e.clientY, left: e.pageX ? e.pageX : e.clientX } };
var C = function(y, j, r) {
var s = z(y);
var h = r.x1;
var c = r.x2;
var x = r.y1;
var w = r.y2;
var v = false;
var e = false,
k = false;
document.onmouseup = function() {
if (document.selection && document.selection.empty) { document.selection.empty() } else {
if (window.getSelection) {
var an = window.getSelection();
an.removeAllRanges()
}
}
document.onmousemove = null;
document.onmouseup = null;
if (e && !k) {
alert("Invalid merge attempt produced a circle in the graph!");
v.attr({ fill: af.config.options.baseColor });
e.textNode.attr({ fill: af.config.options.baseColor });
$(v.node).fadeOut(1000, function() { $(v).remove() })
} else {
if (e && k) {
var ak = af.originGraph.isAcyclicFromVertex(af.originGraph.getVertex(e.index), af.originGraph.getVertex(r.index));
for (var am = 0; am < af.sentencePaths.length; am++) { var ao = af.sentencePaths[am]; for (var al = 0; al < ao.length; al++) { if (ao[al] == e || ao[al] == r) { ao[al] = ak } } } af.reset();
af.visualize()
} else { $(v.node).fadeOut(1000, function() { $(v).remove() }) }
}
};
document.onmousemove = function(ap) {
if (!v) { v = af.paper.text((r.x1 + r.x2) / 2, (r.y1 + r.y2) / 2, r.token).attr({ font: r.fs + "px " + af.config.options.font, fill: af.config.options.baseColor, "text-anchor": "middle", cursor: "pointer" }) }
if (document.selection && document.selection.empty) { document.selection.empty() } else {
if (window.getSelection) {
var am = window.getSelection();
am.removeAllRanges()
}
}
var au = z(ap);
v.x1 = h + au.left - s.left;
v.x2 = c + au.left - s.left;
v.y1 = x + au.top - s.top;
v.y2 = w + au.top - s.top;
v.attr({ x: (v.x1 + v.x2) / 2, y: (v.y1 + v.y2) / 2 });
if (e) {
v.attr({ fill: af.config.options.baseColor });
e.textNode.attr({ fill: af.config.options.baseColor })
}
e = false;
k = false;
var aq = 0;
for (var ao = 0; ao < af.vertices.length; ao++) {
var ax = v;
var aw = af.vertices[ao];
if (r != aw && af.overlap(ax.x1, ax.x2, aw.x1, aw.x2, ax.y1, ax.y2, aw.y1, aw.y2)) {
var al = (ax.x1 + ax.x2) / 2;
var ak = (aw.x1 + aw.x2) / 2;
var av = (ax.y1 + ax.y2) / 2;
var at = (aw.y1 + aw.y2) / 2;
var ar = Math.sqrt((ak - al) * (ak - al) + (at - av) * (at - av));
if (!e || e && ar < aq) {
e = aw;
aq = ar
}
}
}
if (e) {
var an = null;
var ay = af.originGraph.clone();
k = ay.isAcyclicFromVertex(af.originGraph.getVertex(e.index), af.originGraph.getVertex(r.index));
k ? an = "#90EE90" : an = "#FF8AA7";
v.attr({ fill: an });
e.textNode.attr({ fill: an })
}
}
};
var n = function(h, r) {
var c = new TRAVizVertex(af.originGraph, af.originGraph.config.getVertexIndex());
af.originGraph.addVertex(c);
for (var j = 0; j < h.sources.length; j++) {
if (h.sources[j].sourceId == r) {
c.sources.push(h.sources[j]);
c.token = h.sources[j].token;
h.sources.splice(j, 1);
break
}
}
h.count--;
var k = af.sentencePaths[r];
for (var j = 0; j < k.length; j++) { if (k[j].index == h.index) { k[j] = c; break } } af.reset();
af.visualize()
};
var I = function(r, s, v) {
var c = false;
r.connections = [];
var e = function() { for (var w = 0; w < af.basicConnections.length; w++) { $(af.basicConnections[w].node).css("display", "none") } for (var w = 0; w < af.vertexConnections.length; w++) { $(af.vertexConnections[w].node).remove() } af.displayVertexConnections(r, s, v); if (s.transpositions) { for (var w = 0; w < s.transpositions.length; w++) { $(s.transpositions[w].node).css("display", "block") } for (var w = 0; w < s.transpositionGroup.length; w++) { $(s.transpositionGroup[w].rect.node).attr({ stroke: "#000", "stroke-width": 1, opacity: "1.0" }) } } };
var h = function() { for (var w = 0; w < af.vertexConnections.length; w++) { $(af.vertexConnections[w].node).remove() } for (var w = 0; w < af.basicConnections.length; w++) { $(af.basicConnections[w].node).css("display", "block") } if (s.transpositions) { for (var w = 0; w < s.transpositions.length; w++) { $(s.transpositions[w].node).css("display", "none") } for (var w = 0; w < s.transpositionGroup.length; w++) { $(s.transpositionGroup[w].rect.node).attr({ stroke: "none" }) } } };
$(r).mouseenter(function() { e() });
$(r).mouseleave(function() { h() });
if (af.config.options.splitAndMerge) { $(r).mousedown(function(w) { C(w, r, s) }) }
var k = "<table>";
k += "<tr><th style='padding:5px;text-align:right;'>edition</th><th style='padding:5px;text-align:right;'>token</th></tr>";
for (var j = 0; j < s.sources.length; j++) {
k += "<tr>";
k += "<td style='padding:5px;text-align:right;color:" + af.colorMap[af.editions[s.sources[j].sourceId]] + ";'>" + af.editions[s.sources[j].sourceId] + "</td>";
k += "<td style='padding:5px;text-align:left;color:" + af.colorMap[af.editions[s.sources[j].sourceId]] + ";'>" + s.sources[j].token + "</td>";
if (af.config.options.splitAndMerge && s.sources.length > 1) { k += "<td><div title='Remove token and create new branch!' name=" + s.sources[j].sourceId + " class='unlink unlink" + s.index + "'/></td>" } k += "</tr>"
}
k += "</table>";
$(r).qtip({
content: { text: k, title: { text: '<div>"' + s.token + '": ' + s.sources.length + "&nbsp;" + af.config.options.popupLabel + "</div>", button: "X" } },
style: { tip: true, border: { width: 0, radius: 4 } },
position: { corner: { tooltip: "topMiddle", target: "bottomMiddle" } },
show: { when: "click", solo: true },
hide: { when: { event: "click" } },
api: {
onShow: function() {
$("[qtip='" + this.id + "']").addClass("trailsQtip");
$("[qtip='" + this.id + "']").mouseenter(function() { e() });
$("[qtip='" + this.id + "']").mouseleave(function() { h() });
if ($(".qtip-content", "[qtip='" + this.id + "']").height() > 200) {
$(".qtip-content", "[qtip='" + this.id + "']").css("height", "200px");
$(".qtip-content", "[qtip='" + this.id + "']").css("overflow", "auto")
}
if (!c) { var w = $(".unlink" + s.index); if (w.length > 0) { for (var x = 0; x < w.length; x++) { $(w[x]).click(function() { n(af.originGraph.getVertex(s.index), $(this).attr("name")) }) } c = true } }
},
onHide: function() { h() }
}
})
};
var d = $("<label/>").appendTo("body");
var O = new Date();
this.layout = [];
var o = 0;
for (var ae = 0; ae < this.vertices.length; ae++) { if (this.vertices[ae].count > o) { o = this.vertices[ae].count } }
for (var ae = 0; ae < J.length; ae++) {
S = 0;
var ad = 0,
ac = J[ae].length;
if (ae > 0) {
ad++;
ac--
}
var a = 0,
b = 0;
var q = [12, 17, 23, 30, 38, 47, 57];
for (ad; ad < ac; ad++) {
var U = J[ae][ad];
var F = this.config.options.fontSizeMin + this.config.options.fontSizeIncrease * (U.count - 1);
if (this.config.options.interpolateFontSize) { F = this.config.options.fontSizeMin + (U.count - 1) / (o - 1) * (this.config.options.fontSizeMax - this.config.options.fontSizeMin) } $(d).html(U.token);
$(d).css("font", F + "px " + this.config.options.font);
U.x1 = S;
if (U.count <= this.config.options.collapseLabels) { $(d).html("M") }
var H = $(d).width() + 6;
var l = $(d).height();
U.boxWidth = H;
U.boxHeight = l;
U.x2 = H + S;
U.y1 = R - l / 2;
U.y2 = R + l / 2;
a += H;
if (ad > 0) { a += m }
if (l > b) { b = l } this.layout.push(U)
}
aa.push(b)
}
$(d).remove();
this.setXFlow();
var K = $("<div id='TRAVizPaperDiv" + this.div + "'/>").appendTo("#" + this.div);
var Z = Raphael("TRAVizPaperDiv" + this.div, 10000, 10000);
this.layout = [];
this.layers = [];
var Q = 0;
for (var ae = 0; ae < J[0].length; ae++) {
this.layout.push(J[0][ae]);
J[0][ae].layer = 0;
if (J[0][ae].boxHeight > Q) { Q = J[0][ae].boxHeight }
}
this.layers.push({ index: 0, height: Q, vertices: [] });
this.getYLayer = function(w, e, h, r) {
var c = e;
if (Math.abs(w) > Math.abs(e)) { c = w }
var s = c;
var k = function(x) { if (typeof x != "undefined") { if (x > 0) { x *= -1 } else { x = x * -1 + 1 } c = s + x } else { x = 0 } if (!r && c == 0) { k(x) } else { var y = false; for (var v = 0; v < af.layout.length; v++) { if (af.layout[v].layer == c) { if (!(af.layout[v].x1 > h.x2 || h.x1 > af.layout[v].x2)) { y = true; break } } } if (y) { k(x) } } };
k();
var j = this.getLayer(c);
if (!j) {
j = { index: c, height: 0, vertices: [] };
this.layers.push(j)
}
if (Math.abs(h.y2 - h.y1) > j.height) { j.height = Math.abs(h.y2 - h.y1) }
return c
};
for (var ae = 1; ae < J.length; ae++) {
var Y = J[ae];
var X = Y[0];
var ah = Y[Y.length - 1];
var aj = Y[1];
var G = Y[Y.length - 2];
var A = new TRAVizVertex();
A.x1 = aj.x1 - m;
A.x2 = G.x2 + m;
A.y1 = (X.y1 + X.y2) / 2 - aa[ae] / 2;
A.y2 = (X.y1 + X.y2) / 2 + aa[ae] / 2;
A.token = aj.token;
var R = this.getYLayer(X.layer, ah.layer, A);
for (var ad = 1; ad < Y.length - 1; ad++) {
Y[ad].layer = R;
this.layout.push(Y[ad])
}
}
if (this.config.options.lineBreaks) { this.insertDummys() }
var L = this.layers.length;
for (var ae = 0; ae < this.vertices.length; ae++) {
var U = this.vertices[ae];
if (typeof U.level == "undefined") { U.level = 0 }
var B = this.getLayer(U.layer);
U.originLayer = B.index;
for (var ad = 0; ad < B.vertices.length; ad++) { if (B.vertices[ad] == U) { B.vertices.splice(ad, 1); break } } U.layer += U.level * L;
var f = this.getLayer(U.layer);
if (!f) {
f = { index: U.layer, height: 0, vertices: [] };
this.layers.push(f)
}
if (Math.abs(U.y2 - U.y1) > f.height) { f.height = Math.abs(U.y2 - U.y1) } f.vertices.push(U)
}
var N = function(e, c) { if (e.index < c.index) { return -1 } return 1 };
this.layers.sort(N);
var P = 0;
for (var ae = 0; ae < this.layers.length; ae++) {
if (this.layers[ae].vertices.length > 0) {
this.layers[ae].level = this.layers[ae].vertices[0].level;
P = this.layers[ae].level
} else { this.layers[ae].level = P }
}
this.setConnections();
this.removeOverlaps();
this.transformEdgeTypes();
if (this.config.options.lineBreaks && this.config.options.lineNumbering) {
for (var ae = 0; ae < this.layout.length; ae++) {
var U = this.layout[ae];
U.y1 += (U.level + 1) * 26;
U.y2 += (U.level + 1) * 26
}
for (var ae = 0; ae < this.connections.length; ae++) {
var U = this.connections[ae].v1;
for (var ad = 0; ad < this.connections[ae].links.length; ad++) {
this.connections[ae].links[ad].y1 += (U.level + 1) * 26;
this.connections[ae].links[ad].y2 += (U.level + 1) * 26
}
}
for (var ae = 0; ae < this.layers.length; ae++) { this.layers[ae].yLevel += (this.layers[ae].level + 1) * 26 }
}
var p = false;
for (var ae = 0; ae < this.startVertex.successors.length; ae++) { var D = this.graph.getVertex(this.startVertex.successors[ae]); if (!p || D.x1 - 4 * this.curveRadius < p) { p = D.x1 - 4 * this.curveRadius } } this.startVertex.x1 = p;
this.startVertex.x2 = p;
for (var ae = 0; ae < this.startVertex.successors.length; ae++) {
var ai = this.getConnection(this.startVertex, this.graph.getVertex(this.startVertex.successors[ae]));
if (ai.type == 1 && ai.links[0].type == "source") {
ai.links[0].x1 = p + this.curveRadius;
ai.links[0].x2 = p + this.curveRadius
} else {
if (ai.type == 3 || ai.type == 0) {
ai.links[0].x1 = p + this.curveRadius;
ai.links[0].x2 = p + this.curveRadius;
ai.links[1].x1 = p + 2 * this.curveRadius
}
}
}
var E = 0;
for (var ae = 0; ae < this.endVertex.predecessors.length; ae++) { var V = this.graph.getVertex(this.endVertex.predecessors[ae]); if (V.x2 + 4 * this.curveRadius > E) { E = V.x2 + 4 * this.curveRadius } } this.endVertex.x1 = E;
this.endVertex.x2 = E;
for (var ae = 0; ae < this.endVertex.predecessors.length; ae++) {
var ai = this.getConnection(this.graph.getVertex(this.endVertex.predecessors[ae]), this.endVertex);
if (ai.type == 1 && ai.links[0].type == "sink") {
ai.links[0].x1 = E - this.curveRadius;
ai.links[0].x2 = E - this.curveRadius
} else {
if (ai.type == 3 || ai.type == 0) {
ai.links[2].x1 = E - this.curveRadius;
ai.links[2].x2 = E - this.curveRadius;
ai.links[1].x2 = E - 2 * this.curveRadius
}
}
}
var g = false,
M = false;
var ab = false,
t = false;
if (this.config.options.rtl) {
for (var ae = 0; ae < this.layout.length; ae++) {
this.layout[ae].x1 *= -1;
this.layout[ae].x2 *= -1
}
for (var ae = 0; ae < this.connections.length; ae++) {
for (var ad = 0; ad < this.connections[ae].links.length; ad++) {
this.connections[ae].links[ad].x1 *= -1;
this.connections[ae].links[ad].x2 *= -1
}
}
}
for (var ae = 0; ae < this.layout.length; ae++) { var U = this.layout[ae]; if (!g || U.x1 < g) { g = U.x1 } if (!M || U.x2 > M) { M = U.x2 } if (!ab || U.y1 < ab) { ab = U.y1 } if (!t || U.y2 > t) { t = U.y2 } } ab -= 3 * this.curveRadius;
t += 3 * this.curveRadius + 40;
g -= 3 * this.curveRadius;
M += 3 * this.curveRadius;
if (this.config.options.lineBreaks && this.config.options.lineNumbering) { ab -= 26 }
var T = M - g;
var ag = t - ab;
if (this.config.options.lineBreaks) { T = $("#" + this.div).width() } this.paper = Z;
for (var ae = 0; ae < this.layout.length; ae++) {
var U = this.layout[ae];
U.y1 -= ab;
U.y2 -= ab;
if (!this.config.options.lineBreaks) {
U.x1 -= g;
U.x2 -= g
}
}
for (var ae = 0; ae < this.connections.length; ae++) {
for (var ad = 0; ad < this.connections[ae].links.length; ad++) {
this.connections[ae].links[ad].y1 -= ab;
this.connections[ae].links[ad].y2 -= ab;
if (!this.config.options.lineBreaks) {
this.connections[ae].links[ad].x1 -= g;
this.connections[ae].links[ad].x2 -= g
}
}
}
Z.setSize(T + "px", ag + "px");
for (var ae = 0; ae < this.layers.length; ae++) { this.layers[ae].yLevel -= ab }
if (this.config.options.transpositions) { this.calculateTranspositions() }
for (var ae = 0; ae < this.layout.length; ae++) {
var U = this.layout[ae];
if (U != this.startVertex && U != this.endVertex && U.token != "" && this.config.options.vertexBackground) { if (U.count > this.config.options.collapseLabels) { U.rect = Z.rect(U.x1 + 3, U.y1, U.x2 - U.x1 - 6, U.y2 - U.y1, 5).attr({ fill: this.config.options.vertexBackground, stroke: "none" }) } else { U.rect = Z.rect(U.x1 + 3, U.y1, U.x2 - U.x1 - 6, U.y2 - U.y1, 5).attr({ title: U.token, fill: this.config.options.vertexBackground, stroke: "none" }) } }
if (U.count > this.config.options.collapseLabels) {
var F = this.config.options.fontSizeMin + this.config.options.fontSizeIncrease * (U.count - 1);
if (this.config.options.interpolateFontSize) { F = this.config.options.fontSizeMin + (U.count - 1) / (o - 1) * (this.config.options.fontSizeMax - this.config.options.fontSizeMin) } U.fs = F;
U.textNode = Z.text((U.x1 + U.x2) / 2, (U.y1 + U.y2) / 2, U.token).attr({ font: F + "px " + this.config.options.font, fill: this.config.options.baseColor, "text-anchor": "middle", cursor: "pointer" });
I(U.textNode.node, U, Z);
$(U.textNode.node).css({ "-webkit-touch-callout": "none", "-webkit-user-select": "none", "-khtml-user-select": "none", "-moz-user-select": "none", "-ms-user-select": "none", "user-select": "none", })
}
}
this.edgeGroups = [];
this.basicConnections = [];
this.vertexConnections = [];
if (this.config.options.connectionType == "majority") { this.majorityConnections(true) } else { if (this.config.options.connectionType == "all") { this.majorityConnections(false) } else { this.generalConnections() } }
if (this.config.options.editionLabels) { this.computeEdgeLabels() }
if (this.config.options.startAndEnd) {
Z.circle(this.startVertex.x1, this.startVertex.y1, 4).attr({ fill: this.config.options.baseColor });
Z.rect(this.endVertex.x1, this.endVertex.y1 - 4, 8, 8).attr({ fill: this.config.options.baseColor })
}
if (this.config.options.lineBreaks && this.config.options.lineNumbering) { this.insertLineNumbering(T, m) } $("<a class='TRAViz-copyright-link' target=_blank href='http://traviz.vizcovery.org'><div class='TRAViz-copyright'></div></a>").appendTo($("#" + this.div))
};
function TRAVizConfig(a) { this.options = { colors: ["red", "blue", "green", "rgb(230,230,0)", "orange", "#996600", "purple", "#FF00FF", "#66FFFF", "#339999"], normalize: true, lineBreaks: true, lineNumbering: true, lineNumberingText: "Line ", rtl: false, popupLabel: "occurrences", optimizedAlignment: true, editionLabels: true, baseColor: "#3E576F", vertexBackground: "rgba(242,242,242,0.75)", font: "Georgia", startAndEnd: true, collapseLabels: 0, interpolateFontSize: false, fontSizeMin: 10, fontSizeMax: 50, fontSizeIncrease: 4, edgeGap: 5, curveRadius: 10, connectionType: "all", majorityPercentage: 0.5, editDistance: false, splitAndMerge: true, transpositions: true, }; if (typeof a != "undefined") { $.extend(this.options, a) } } TRAVizConfig.prototype.getVertexIndex = function() { if (typeof this.vid == "undefined") { this.vid = 0 } return ++this.vid };
TRAVizConfig.prototype.Hsv2rgb = function(d, o, l) {
var c, e, k;
var j = d * 6;
if (j == 6) { j = 0 }
var f = Math.floor(j);
var a = l * (1 - o);
var n = l * (1 - o * (j - f));
var m = l * (1 - o * (1 - (j - f)));
if (f == 0) {
var_r = l;
var_g = m;
var_b = a
} else {
if (f == 1) {
var_r = n;
var_g = l;
var_b = a
} else {
if (f == 2) {
var_r = a;
var_g = l;
var_b = m
} else {
if (f == 3) {
var_r = a;
var_g = n;
var_b = l
} else {
if (f == 4) {
var_r = m;
var_g = a;
var_b = l
} else {
var_r = l;
var_g = a;
var_b = n
}
}
}
}
}
return "rgb(" + Math.round(var_r * 255) + "," + Math.round(var_g * 255) + "," + Math.round(var_b * 255) + ")"
};
TRAVizConfig.prototype.getColors = function(b) { var a = []; for (var c = 0; c < b; c++) { if (c >= this.options.colors.length) { a.push(this.Hsv2rgb(((Math.random() * 360) + 1) / 360, 1, (25 + (Math.random() * 50) + 1) / 100)) } else { a.push(this.options.colors[c]) } } return a };
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment