/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

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



