﻿(function(A) { A.jScrollPane = { active: [] }; A.fn.jScrollPane = function(C) { C = A.extend({}, A.fn.jScrollPane.defaults, C); var B = function() { return false }; return this.each(function() { var O = A(this); O.css("overflow", "hidden"); var X = this; if (A(this).parent().is(".jScrollPaneContainer")) { var Ac = C.maintainPosition ? O.position().top : 0; var L = A(this).parent(); var d = L.innerWidth(); var Ad = L.outerHeight(); var M = Ad; A(">.jScrollPaneTrack, >.jScrollArrowUp, >.jScrollArrowDown", L).remove(); O.css({ top: 0 }) } else { var Ac = 0; this.originalPadding = O.css("paddingTop") + " " + O.css("paddingRight") + " " + O.css("paddingBottom") + " " + O.css("paddingLeft"); this.originalSidePaddingTotal = (parseInt(O.css("paddingLeft")) || 0) + (parseInt(O.css("paddingRight")) || 0); var d = O.innerWidth(); var Ad = O.innerHeight(); var M = Ad; O.wrap(A("<div></div>").attr({ className: "jScrollPaneContainer" }).css({ height: Ad + "px", width: d + "px" })); A(document).bind("emchange", function(Ae, Af, p) { O.jScrollPane(C) }) } if (C.reinitialiseOnImageLoad) { var N = A.data(X, "jScrollPaneImagesToLoad") || A("img", O); var G = []; if (N.length) { N.each(function(p, Ae) { A(this).bind("load", function() { if (A.inArray(p, G) == -1) { G.push(Ae); N = A.grep(N, function(Ag, Af) { return Ag != Ae }); A.data(X, "jScrollPaneImagesToLoad", N); C.reinitialiseOnImageLoad = false; O.jScrollPane(C) } }).each(function(Af, Ag) { if (this.complete || this.complete === undefined) { this.src = this.src } }) }) } } var o = this.originalSidePaddingTotal; var l = { height: "auto", width: d - C.scrollbarWidth - C.scrollbarMargin - o + "px" }; if (C.scrollbarOnLeft) { l.paddingLeft = C.scrollbarMargin + C.scrollbarWidth + "px" } else { l.paddingRight = C.scrollbarMargin + "px" } O.css(l); var m = O.outerHeight(); var i = Ad / m; if (i < 0.99) { var H = O.parent(); H.append(A("<div></div>").attr({ className: "jScrollPaneTrack" }).css({ width: C.scrollbarWidth + "px" }).append(A("<div></div>").attr({ className: "jScrollPaneDrag" }).css({ width: C.scrollbarWidth + "px" }).append(A("<div></div>").attr({ className: "jScrollPaneDragTop" }).css({ width: C.scrollbarWidth + "px" }), A("<div></div>").attr({ className: "jScrollPaneDragBottom" }).css({ width: C.scrollbarWidth + "px" })))); var z = A(">.jScrollPaneTrack", H); var P = A(">.jScrollPaneTrack .jScrollPaneDrag", H); if (C.showArrows) { var g; var Ab; var S; var r; var j = function() { if (r > 4 || r % 4 == 0) { y(u + Ab * b) } r++ }; var K = function(p) { A("html").unbind("mouseup", K); g.removeClass("jScrollActiveArrowButton"); clearInterval(S) }; var Z = function() { A("html").bind("mouseup", K); g.addClass("jScrollActiveArrowButton"); r = 0; j(); S = setInterval(j, 100) }; H.append(A("<a></a>").attr({ href: "javascript:;", className: "jScrollArrowUp" }).css({ width: C.scrollbarWidth + "px" }).html("Scroll up").bind("mousedown", function() { g = A(this); Ab = -1; Z(); this.blur(); return false }).bind("click", B), A("<a></a>").attr({ href: "javascript:;", className: "jScrollArrowDown" }).css({ width: C.scrollbarWidth + "px" }).html("Scroll down").bind("mousedown", function() { g = A(this); Ab = 1; Z(); this.blur(); return false }).bind("click", B)); var Q = A(">.jScrollArrowUp", H); var J = A(">.jScrollArrowDown", H); if (C.arrowSize) { M = Ad - C.arrowSize - C.arrowSize; z.css({ height: M + "px", top: C.arrowSize + "px" }) } else { var s = Q.height(); C.arrowSize = s; M = Ad - s - J.height(); z.css({ height: M + "px", top: s + "px" }) } } var w = A(this).css({ position: "absolute", overflow: "visible" }); var D; var Y; var b; var u = 0; var V = i * Ad / 2; var a = function(Ae, Ag) { var Af = Ag == "X" ? "Left" : "Top"; return Ae["page" + Ag] || (Ae["client" + Ag] + (document.documentElement["scroll" + Af] || document.body["scroll" + Af])) || 0 }; var f = function() { return false }; var v = function() { n(); D = P.offset(false); D.top -= u; Y = M - P[0].offsetHeight; b = 2 * C.wheelSpeed * Y / m }; var E = function(p) { v(); V = a(p, "Y") - u - D.top; A("html").bind("mouseup", T).bind("mousemove", h); if (A.browser.msie) { A("html").bind("dragstart", f).bind("selectstart", f) } return false }; var T = function() { A("html").unbind("mouseup", T).unbind("mousemove", h); V = i * Ad / 2; if (A.browser.msie) { A("html").unbind("dragstart", f).unbind("selectstart", f) } }; var y = function(Ae) { Ae = Ae < 0 ? 0 : (Ae > Y ? Y : Ae); u = Ae; P.css({ top: Ae + "px" }); var Af = Ae / Y; w.css({ top: ((Ad - m) * Af) + "px" }); O.trigger("scroll"); if (C.showArrows) { Q[Ae == 0 ? "addClass" : "removeClass"]("disabled"); J[Ae == Y ? "addClass" : "removeClass"]("disabled") } }; var h = function(p) { y(a(p, "Y") - D.top - V) }; var q = Math.max(Math.min(i * (Ad - C.arrowSize * 2), C.dragMaxHeight), C.dragMinHeight); P.css({ height: q + "px" }).bind("mousedown", E); var k; var R; var I; var t = function() { if (R > 8 || R % 4 == 0) { y((u - ((u - I) / 2))) } R++ }; var Aa = function() { clearInterval(k); A("html").unbind("mouseup", Aa).unbind("mousemove", e) }; var e = function(p) { I = a(p, "Y") - D.top - V }; var U = function(p) { v(); e(p); R = 0; A("html").bind("mouseup", Aa).bind("mousemove", e); k = setInterval(t, 100); t() }; z.bind("mousedown", U); H.bind("mousewheel", function(Ae, Ag) { v(); n(); var Af = u; y(u - Ag * b); var p = Af != u; return !p }); var F; var W; function c() { var p = (F - u) / C.animateStep; if (p > 1 || p < -1) { y(u + p) } else { y(F); n() } } var n = function() { if (W) { clearInterval(W); delete F } }; var x = function(Af, p) { if (typeof Af == "string") { $e = A(Af, O); if (!$e.length) { return } Af = $e.offset().top - O.offset().top } H.scrollTop(0); n(); var Ae = -Af / (Ad - m) * Y; if (p || !C.animateTo) { y(Ae) } else { F = Ae; W = setInterval(c, C.animateInterval) } }; O[0].scrollTo = x; O[0].scrollBy = function(Ae) { var p = -parseInt(w.css("top")) || 0; x(p + Ae) }; v(); x(-Ac, true); A("*", this).bind("focus", function(Ah) { var Ag = A(this); var Aj = 0; while (Ag[0] != O[0]) { Aj += Ag.position().top; Ag = Ag.offsetParent() } var p = -parseInt(w.css("top")) || 0; var Ai = p + Ad; var Af = Aj > p && Aj < Ai; if (!Af) { var Ae = Aj - C.scrollbarMargin; if (Aj > p) { Ae += A(this).height() + 15 + C.scrollbarMargin - Ad } x(Ae) } }); if (location.hash) { x(location.hash) } A(document).bind("click", function(Ae) { $target = A(Ae.target); if ($target.is("a")) { var p = $target.attr("href"); if (p.substr(0, 1) == "#") { x(p) } } }); A.jScrollPane.active.push(O[0]) } else { O.css({ height: Ad + "px", width: d - this.originalSidePaddingTotal + "px", padding: this.originalPadding }); O.parent().unbind("mousewheel") } }) }; A.fn.jScrollPane.defaults = { scrollbarWidth: 10, scrollbarMargin: 5, wheelSpeed: 18, showArrows: false, arrowSize: 0, animateTo: false, dragMinHeight: 1, dragMaxHeight: 99999, animateInterval: 100, animateStep: 3, maintainPosition: true, scrollbarOnLeft: false, reinitialiseOnImageLoad: false }; A(window).bind("unload", function() { var C = A.jScrollPane.active; for (var B = 0; B < C.length; B++) { C[B].scrollTo = C[B].scrollBy = null } }) })(jQuery);
