text: ﻿/*!
  * jScrollPane - v2.0.20 - 2014-10-23
  * http://jscrollpane.kelvinluck.com/
  *
  * Copyright (c) 2014 Kelvin Luck
  * Dual licensed under the MIT or GPL licenses.
  */
  (function (c, b) { var a = function (d) { return c(d, b) }; if (typeof define === "function" && define.amd) { define(["jquery"], a) } else { if (typeof exports === "object") { module.exports = a } else { a(jQuery) } } } (function (b, a, c) {
      b.fn.jScrollPane = function (e) {
          function d(D, O) {
              var ay, Q = this, Y, aj, v, al, T, Z, y, q, az, aE, au, i, I, h, j, aa, U, ap, X, t, A, aq, af, am, G, l, at, ax, x, av, aH, f, L, ai = true, P = true, aG = false, k = false, ao = D.clone(false, false).empty(), ac = b.fn.mwheelIntent ? "mwheelIntent.jsp" : "mousewheel.jsp"; if (D.css("box-sizing") === "border-box") { aH = 0; f = 0 } else { aH = D.css("paddingTop") + " " + D.css("paddingRight") + " " + D.css("paddingBottom") + " " + D.css("paddingLeft"); f = (parseInt(D.css("paddingLeft"), 10) || 0) + (parseInt(D.css("paddingRight"), 10) || 0) } function ar(aQ) { var aL, aN, aM, aJ, aI, aP, aO = false, aK = false; ay = aQ; if (Y === c) { aI = D.scrollTop(); aP = D.scrollLeft(); D.css({ overflow: "hidden", padding: 0 }); aj = D.innerWidth() + f; v = D.innerHeight(); D.width(aj); Y = b('<div class="jspPane" />').css("padding", aH).append(D.children()); al = b('<div class="jspContainer" />').css({ width: aj + "px", height: v + "px" }).append(Y).appendTo(D) } else { D.css("width", ""); aO = ay.stickToBottom && K(); aK = ay.stickToRight && B(); aJ = D.innerWidth() + f != aj || D.outerHeight() != v; if (aJ) { aj = D.innerWidth() + f; v = D.innerHeight(); al.css({ width: aj + "px", height: v + "px" }) } if (!aJ && L == T && Y.outerHeight() == Z) { D.width(aj); return } L = T; Y.css("width", ""); D.width(aj); al.find(">.jspVerticalBar,>.jspHorizontalBar").remove().end() } Y.css("overflow", "auto"); if (aQ.contentWidth) { T = aQ.contentWidth } else { T = Y[0].scrollWidth } Z = Y[0].scrollHeight; Y.css("overflow", ""); y = T / aj; q = Z / v; az = q > 1; aE = y > 1; if (!(aE || az)) { D.removeClass("jspScrollable"); Y.css({ top: 0, left: 0, width: al.width() - f }); n(); E(); R(); w() } else { D.addClass("jspScrollable"); aL = ay.maintainPosition && (I || aa); if (aL) { aN = aC(); aM = aA() } aF(); z(); F(); if (aL) { N(aK ? (T - aj) : aN, false); M(aO ? (Z - v) : aM, false) } J(); ag(); an(); if (ay.enableKeyboardNavigation) { S() } if (ay.clickOnTrack) { p() } C(); if (ay.hijackInternalLinks) { m() } } if (ay.autoReinitialise && !av) { av = setInterval(function () { ar(ay) }, ay.autoReinitialiseDelay) } else { if (!ay.autoReinitialise && av) { clearInterval(av) } } aI && D.scrollTop(0) && M(aI, false); aP && D.scrollLeft(0) && N(aP, false); D.trigger("jsp-initialised", [aE || az]) } function aF() { if (az) { al.append(b('<div class="jspVerticalBar" />').append(b('<div class="jspCap jspCapTop" />'), b('<div class="jspTrack" />').append(b('<div class="jspDrag" />').append(b('<div class="jspDragTop" />'), b('<div class="jspDragBottom" />'))), b('<div class="jspCap jspCapBottom" />'))); U = al.find(">.jspVerticalBar"); ap = U.find(">.jspTrack"); au = ap.find(">.jspDrag"); if (ay.showArrows) { aq = b('<a class="jspArrow jspArrowUp" />').bind("mousedown.jsp", aD(0, -1)).bind("click.jsp", aB); af = b('<a class="jspArrow jspArrowDown" />').bind("mousedown.jsp", aD(0, 1)).bind("click.jsp", aB); if (ay.arrowScrollOnHover) { aq.bind("mouseover.jsp", aD(0, -1, aq)); af.bind("mouseover.jsp", aD(0, 1, af)) } ak(ap, ay.verticalArrowPositions, aq, af) } t = v; al.find(">.jspVerticalBar>.jspCap:visible,>.jspVerticalBar>.jspArrow").each(function () { t -= b(this).outerHeight() }); au.hover(function () { au.addClass("jspHover") }, function () { au.removeClass("jspHover") }).bind("mousedown.jsp", function (aI) { b("html").bind("dragstart.jsp selectstart.jsp", aB); au.addClass("jspActive"); var s = aI.pageY - au.position().top; b("html").bind("mousemove.jsp", function (aJ) { V(aJ.pageY - s, false) }).bind("mouseup.jsp mouseleave.jsp", aw); return false }); o() } } function o() { ap.height(t + "px"); I = 0; X = ay.verticalGutter + ap.outerWidth(); Y.width(aj - X - f); try { if (U.position().left === 0) { Y.css("margin-left", X + "px") } } catch (s) { } } function z() {
                  if (aE) {
                      al.append(b('<div class="jspHorizontalBar" />').append(b('<div class="jspCap jspCapLeft" />'), b('<div class="jspTrack" />').append(b('<div class="jspDrag" />').append(b('<div class="jspDragLeft" />'), b('<div class="jspDragRight" />'))), b('<div class="jspCap jspCapRight" />'))); am = al.find(">.jspHorizontalBar");
                      G = am.find(">.jspTrack"); h = G.find(">.jspDrag"); if (ay.showArrows) { ax = b('<a class="jspArrow jspArrowLeft" />').bind("mousedown.jsp", aD(-1, 0)).bind("click.jsp", aB); x = b('<a class="jspArrow jspArrowRight" />').bind("mousedown.jsp", aD(1, 0)).bind("click.jsp", aB); if (ay.arrowScrollOnHover) { ax.bind("mouseover.jsp", aD(-1, 0, ax)); x.bind("mouseover.jsp", aD(1, 0, x)) } ak(G, ay.horizontalArrowPositions, ax, x) } h.hover(function () { h.addClass("jspHover") }, function () { h.removeClass("jspHover") }).bind("mousedown.jsp", function (aI) { b("html").bind("dragstart.jsp selectstart.jsp", aB); h.addClass("jspActive"); var s = aI.pageX - h.position().left; b("html").bind("mousemove.jsp", function (aJ) { W(aJ.pageX - s, false) }).bind("mouseup.jsp mouseleave.jsp", aw); return false }); l = al.innerWidth(); ah()
                  } 
              } function ah() { al.find(">.jspHorizontalBar>.jspCap:visible,>.jspHorizontalBar>.jspArrow").each(function () { l -= b(this).outerWidth() }); G.width(l + "px"); aa = 0 } function F() { if (aE && az) { var aI = G.outerHeight(), s = ap.outerWidth(); t -= aI; b(am).find(">.jspCap:visible,>.jspArrow").each(function () { l += b(this).outerWidth() }); l -= s; v -= s; aj -= aI; G.parent().append(b('<div class="jspCorner" />').css("width", aI + "px")); o(); ah() } if (aE) { Y.width((al.outerWidth() - f) + "px") } Z = Y.outerHeight(); q = Z / v; if (aE) { at = Math.ceil(1 / y * l); if (at > ay.horizontalDragMaxWidth) { at = ay.horizontalDragMaxWidth } else { if (at < ay.horizontalDragMinWidth) { at = ay.horizontalDragMinWidth } } h.width(at + "px"); j = l - at; ae(aa) } if (az) { A = Math.ceil(1 / q * t); if (A > ay.verticalDragMaxHeight) { A = ay.verticalDragMaxHeight } else { if (A < ay.verticalDragMinHeight) { A = ay.verticalDragMinHeight } } au.height(A + "px"); i = t - A; ad(I) } } function ak(aJ, aL, aI, s) { var aN = "before", aK = "after", aM; if (aL == "os") { aL = /Mac/.test(navigator.platform) ? "after" : "split" } if (aL == aN) { aK = aL } else { if (aL == aK) { aN = aL; aM = aI; aI = s; s = aM } } aJ[aN](aI)[aK](s) } function aD(aI, s, aJ) { return function () { H(aI, s, this, aJ); this.blur(); return false } } function H(aL, aK, aO, aN) { aO = b(aO).addClass("jspActive"); var aM, aJ, aI = true, s = function () { if (aL !== 0) { Q.scrollByX(aL * ay.arrowButtonSpeed) } if (aK !== 0) { Q.scrollByY(aK * ay.arrowButtonSpeed) } aJ = setTimeout(s, aI ? ay.initialDelay : ay.arrowRepeatFreq); aI = false }; s(); aM = aN ? "mouseout.jsp" : "mouseup.jsp"; aN = aN || b("html"); aN.bind(aM, function () { aO.removeClass("jspActive"); aJ && clearTimeout(aJ); aJ = null; aN.unbind(aM) }) } function p() { w(); if (az) { ap.bind("mousedown.jsp", function (aN) { if (aN.originalTarget === c || aN.originalTarget == aN.currentTarget) { var aL = b(this), aO = aL.offset(), aM = aN.pageY - aO.top - I, aJ, aI = true, s = function () { var aR = aL.offset(), aS = aN.pageY - aR.top - A / 2, aP = v * ay.scrollPagePercent, aQ = i * aP / (Z - v); if (aM < 0) { if (I - aQ > aS) { Q.scrollByY(-aP) } else { V(aS) } } else { if (aM > 0) { if (I + aQ < aS) { Q.scrollByY(aP) } else { V(aS) } } else { aK(); return } } aJ = setTimeout(s, aI ? ay.initialDelay : ay.trackClickRepeatFreq); aI = false }, aK = function () { aJ && clearTimeout(aJ); aJ = null; b(document).unbind("mouseup.jsp", aK) }; s(); b(document).bind("mouseup.jsp", aK); return false } }) } if (aE) { G.bind("mousedown.jsp", function (aN) { if (aN.originalTarget === c || aN.originalTarget == aN.currentTarget) { var aL = b(this), aO = aL.offset(), aM = aN.pageX - aO.left - aa, aJ, aI = true, s = function () { var aR = aL.offset(), aS = aN.pageX - aR.left - at / 2, aP = aj * ay.scrollPagePercent, aQ = j * aP / (T - aj); if (aM < 0) { if (aa - aQ > aS) { Q.scrollByX(-aP) } else { W(aS) } } else { if (aM > 0) { if (aa + aQ < aS) { Q.scrollByX(aP) } else { W(aS) } } else { aK(); return } } aJ = setTimeout(s, aI ? ay.initialDelay : ay.trackClickRepeatFreq); aI = false }, aK = function () { aJ && clearTimeout(aJ); aJ = null; b(document).unbind("mouseup.jsp", aK) }; s(); b(document).bind("mouseup.jsp", aK); return false } }) } } function w() { if (G) { G.unbind("mousedown.jsp") } if (ap) { ap.unbind("mousedown.jsp") } } function aw() { b("html").unbind("dragstart.jsp selectstart.jsp mousemove.jsp mouseup.jsp mouseleave.jsp"); if (au) { au.removeClass("jspActive") } if (h) { h.removeClass("jspActive") } } function V(s, aI) { if (!az) { return } if (s < 0) { s = 0 } else { if (s > i) { s = i } } if (aI === c) { aI = ay.animateScroll } if (aI) { Q.animate(au, "top", s, ad) } else { au.css("top", s); ad(s) } } function ad(aI) {
                  if (aI === c) { aI = au.position().top } al.scrollTop(0); I = aI || 0; var aL = I === 0, aJ = I == i, aK = aI / i, s = -aK * (Z - v); if (ai != aL || aG != aJ) {
                      ai = aL;
                      aG = aJ; D.trigger("jsp-arrow-change", [ai, aG, P, k])
                  } u(aL, aJ); Y.css("top", s); D.trigger("jsp-scroll-y", [-s, aL, aJ]).trigger("scroll")
              } function W(aI, s) { if (!aE) { return } if (aI < 0) { aI = 0 } else { if (aI > j) { aI = j } } if (s === c) { s = ay.animateScroll } if (s) { Q.animate(h, "left", aI, ae) } else { h.css("left", aI); ae(aI) } } function ae(aI) { if (aI === c) { aI = h.position().left } al.scrollTop(0); aa = aI || 0; var aL = aa === 0, aK = aa == j, aJ = aI / j, s = -aJ * (T - aj); if (P != aL || k != aK) { P = aL; k = aK; D.trigger("jsp-arrow-change", [ai, aG, P, k]) } r(aL, aK); Y.css("left", s); D.trigger("jsp-scroll-x", [-s, aL, aK]).trigger("scroll") } function u(aI, s) { if (ay.showArrows) { aq[aI ? "addClass" : "removeClass"]("jspDisabled"); af[s ? "addClass" : "removeClass"]("jspDisabled") } } function r(aI, s) { if (ay.showArrows) { ax[aI ? "addClass" : "removeClass"]("jspDisabled"); x[s ? "addClass" : "removeClass"]("jspDisabled") } } function M(s, aI) { var aJ = s / (Z - v); V(aJ * i, aI) } function N(aI, s) { var aJ = aI / (T - aj); W(aJ * j, s) } function ab(aV, aQ, aJ) { var aN, aK, aL, s = 0, aU = 0, aI, aP, aO, aS, aR, aT; try { aN = b(aV) } catch (aM) { return } aK = aN.outerHeight(); aL = aN.outerWidth(); al.scrollTop(0); al.scrollLeft(0); while (!aN.is(".jspPane")) { s += aN.position().top; aU += aN.position().left; aN = aN.offsetParent(); if (/^body|html$/i.test(aN[0].nodeName)) { return } } aI = aA(); aO = aI + v; if (s < aI || aQ) { aR = s - ay.horizontalGutter } else { if (s + aK > aO) { aR = s - v + aK + ay.horizontalGutter } } if (!isNaN(aR)) { M(aR, aJ) } aP = aC(); aS = aP + aj; if (aU < aP || aQ) { aT = aU - ay.horizontalGutter } else { if (aU + aL > aS) { aT = aU - aj + aL + ay.horizontalGutter } } if (!isNaN(aT)) { N(aT, aJ) } } function aC() { return -Y.position().left } function aA() { return -Y.position().top } function K() { var s = Z - v; return (s > 20) && (s - aA() < 10) } function B() { var s = T - aj; return (s > 20) && (s - aC() < 10) } function ag() { al.unbind(ac).bind(ac, function (aM, aN, aK, aI) { if (!aa) { aa = 0 } if (!I) { I = 0 } var aJ = aa, s = I, aL = aM.deltaFactor || ay.mouseWheelSpeed; Q.scrollBy(aK * aL, -aI * aL, false); return aJ == aa && s == I }) } function n() { al.unbind(ac) } function aB() { return false } function J() { Y.find(":input,a").unbind("focus.jsp").bind("focus.jsp", function (s) { ab(s.target, false) }) } function E() { Y.find(":input,a").unbind("focus.jsp") } function S() { var s, aI, aK = []; aE && aK.push(am[0]); az && aK.push(U[0]); Y.focus(function () { D.focus() }); D.attr("tabindex", 0).unbind("keydown.jsp keypress.jsp").bind("keydown.jsp", function (aN) { if (aN.target !== this && !(aK.length && b(aN.target).closest(aK).length)) { return } var aM = aa, aL = I; switch (aN.keyCode) { case 40: case 38: case 34: case 32: case 33: case 39: case 37: s = aN.keyCode; aJ(); break; case 35: M(Z - v); s = null; break; case 36: M(0); s = null; break } aI = aN.keyCode == s && aM != aa || aL != I; return !aI }).bind("keypress.jsp", function (aL) { if (aL.keyCode == s) { aJ() } return !aI }); if (ay.hideFocus) { D.css("outline", "none"); if ("hideFocus" in al[0]) { D.attr("hideFocus", true) } } else { D.css("outline", ""); if ("hideFocus" in al[0]) { D.attr("hideFocus", false) } } function aJ() { var aM = aa, aL = I; switch (s) { case 40: Q.scrollByY(ay.keyboardSpeed, false); break; case 38: Q.scrollByY(-ay.keyboardSpeed, false); break; case 34: case 32: Q.scrollByY(v * ay.scrollPagePercent, false); break; case 33: Q.scrollByY(-v * ay.scrollPagePercent, false); break; case 39: Q.scrollByX(ay.keyboardSpeed, false); break; case 37: Q.scrollByX(-ay.keyboardSpeed, false); break } aI = aM != aa || aL != I; return aI } } function R() { D.attr("tabindex", "-1").removeAttr("tabindex").unbind("keydown.jsp keypress.jsp") } function C() { if (location.hash && location.hash.length > 1) { var aK, aI, aJ = escape(location.hash.substr(1)); try { aK = b("#" + aJ + ', a[name="' + aJ + '"]') } catch (s) { return } if (aK.length && Y.find(aJ)) { if (al.scrollTop() === 0) { aI = setInterval(function () { if (al.scrollTop() > 0) { ab(aK, true); b(document).scrollTop(al.position().top); clearInterval(aI) } }, 50) } else { ab(aK, true); b(document).scrollTop(al.position().top) } } } } function m() {
                  if (b(document.body).data("jspHijack")) { return } b(document.body).data("jspHijack", true); b(document.body).delegate("a[href*=#]", "click", function (s) {
                      var aI = this.href.substr(0, this.href.indexOf("#")), aK = location.href, aO, aP, aJ, aM, aL, aN; if (location.href.indexOf("#") !== -1) { aK = location.href.substr(0, location.href.indexOf("#")) } if (aI !== aK) { return } aO = escape(this.href.substr(this.href.indexOf("#") + 1));
                      aP; try { aP = b("#" + aO + ', a[name="' + aO + '"]') } catch (aQ) { return } if (!aP.length) { return } aJ = aP.closest(".jspScrollable"); aM = aJ.data("jsp"); aM.scrollToElement(aP, true); if (aJ[0].scrollIntoView) { aL = b(a).scrollTop(); aN = aP.offset().top; if (aN < aL || aN > aL + b(a).height()) { aJ[0].scrollIntoView() } } s.preventDefault()
                  })
              } function an() { var aJ, aI, aL, aK, aM, s = false; al.unbind("touchstart.jsp touchmove.jsp touchend.jsp click.jsp-touchclick").bind("touchstart.jsp", function (aN) { var aO = aN.originalEvent.touches[0]; aJ = aC(); aI = aA(); aL = aO.pageX; aK = aO.pageY; aM = false; s = true }).bind("touchmove.jsp", function (aQ) { if (!s) { return } var aP = aQ.originalEvent.touches[0], aO = aa, aN = I; Q.scrollTo(aJ + aL - aP.pageX, aI + aK - aP.pageY); aM = aM || Math.abs(aL - aP.pageX) > 5 || Math.abs(aK - aP.pageY) > 5; return aO == aa && aN == I }).bind("touchend.jsp", function (aN) { s = false }).bind("click.jsp-touchclick", function (aN) { if (aM) { aM = false; return false } }) } function g() { var s = aA(), aI = aC(); D.removeClass("jspScrollable").unbind(".jsp"); D.replaceWith(ao.append(Y.children())); ao.scrollTop(s); ao.scrollLeft(aI); if (av) { clearInterval(av) } } b.extend(Q, { reinitialise: function (aI) { aI = b.extend({}, ay, aI); ar(aI) }, scrollToElement: function (aJ, aI, s) { ab(aJ, aI, s) }, scrollTo: function (aJ, s, aI) { N(aJ, aI); M(s, aI) }, scrollToX: function (aI, s) { N(aI, s) }, scrollToY: function (s, aI) { M(s, aI) }, scrollToPercentX: function (aI, s) { N(aI * (T - aj), s) }, scrollToPercentY: function (aI, s) { M(aI * (Z - v), s) }, scrollBy: function (aI, s, aJ) { Q.scrollByX(aI, aJ); Q.scrollByY(s, aJ) }, scrollByX: function (s, aJ) { var aI = aC() + Math[s < 0 ? "floor" : "ceil"](s), aK = aI / (T - aj); W(aK * j, aJ) }, scrollByY: function (s, aJ) { var aI = aA() + Math[s < 0 ? "floor" : "ceil"](s), aK = aI / (Z - v); V(aK * i, aJ) }, positionDragX: function (s, aI) { W(s, aI) }, positionDragY: function (aI, s) { V(aI, s) }, animate: function (aI, aL, s, aK) { var aJ = {}; aJ[aL] = s; aI.animate(aJ, { duration: ay.animateDuration, easing: ay.animateEase, queue: false, step: aK }) }, getContentPositionX: function () { return aC() }, getContentPositionY: function () { return aA() }, getContentWidth: function () { return T }, getContentHeight: function () { return Z }, getPercentScrolledX: function () { return aC() / (T - aj) }, getPercentScrolledY: function () { return aA() / (Z - v) }, getIsScrollableH: function () { return aE }, getIsScrollableV: function () { return az }, getContentPane: function () { return Y }, scrollToBottom: function (s) { V(i, s) }, hijackInternalLinks: b.noop, destroy: function () { g() } }); ar(O)
          } e = b.extend({}, b.fn.jScrollPane.defaults, e); b.each(["arrowButtonSpeed", "trackClickSpeed", "keyboardSpeed"], function () { e[this] = e[this] || e.speed }); return this.each(function () { var f = b(this), g = f.data("jsp"); if (g) { g.reinitialise(e) } else { b("script", f).filter('[type="text/javascript"],:not([type])').remove(); g = new d(f, e); f.data("jsp", g) } })
      }; b.fn.jScrollPane.defaults = { showArrows: false, maintainPosition: true, stickToBottom: false, stickToRight: false, clickOnTrack: true, autoReinitialise: false, autoReinitialiseDelay: 500, verticalDragMinHeight: 0, verticalDragMaxHeight: 99999, horizontalDragMinWidth: 0, horizontalDragMaxWidth: 99999, contentWidth: c, animateScroll: false, animateDuration: 300, animateEase: "linear", hijackInternalLinks: false, verticalGutter: 4, horizontalGutter: 4, mouseWheelSpeed: 3, arrowButtonSpeed: 0, arrowRepeatFreq: 50, arrowScrollOnHover: false, trackClickSpeed: 0, trackClickRepeatFreq: 70, verticalArrowPositions: "split", horizontalArrowPositions: "split", enableKeyboardNavigation: true, hideFocus: false, keyboardSpeed: 0, initialDelay: 300, speed: 30, scrollPagePercent: 0.8}
  }, this));
  