(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 : "relative",overflow:"hidden"});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);
