(function(factory){if(typeof define==="function"&&define.amd){define(["jquery"],factory)}else if(typeof exports==="object"){module.exports=factory(jQuery||require("jquery"))}else{factory(jQuery)}})(function($){$.fn.jScrollPane=function(settings){function JScrollPane(elem,s){var settings,jsp=this,pane,paneWidth,paneHeight,container,contentWidth,contentHeight,percentInViewH,percentInViewV,isScrollableV,isScrollableH,verticalDrag,dragMaxY,verticalDragPosition,horizontalDrag,dragMaxX,horizontalDragPosition,verticalBar,verticalTrack,scrollbarWidth,verticalTrackHeight,verticalDragHeight,arrowUp,arrowDown,horizontalBar,horizontalTrack,horizontalTrackWidth,horizontalDragWidth,arrowLeft,arrowRight,reinitialiseInterval,originalPadding,originalPaddingTotalWidth,previousContentWidth,wasAtTop=true,wasAtLeft=true,wasAtBottom=false,wasAtRight=false,originalElement=elem.clone(false,false).empty(),resizeEventsAdded=false,mwEvent=$.fn.mwheelIntent?"mwheelIntent":"mousewheel";var reinitialiseFn=function(){if(settings.resizeSensorDelay>0){setTimeout(function(){initialise(settings)},settings.resizeSensorDelay)}else{initialise(settings)}};if(elem.css("box-sizing")==="border-box"){originalPadding=0;originalPaddingTotalWidth=0}else{originalPadding=elem.css("paddingTop")+" "+elem.css("paddingRight")+" "+elem.css("paddingBottom")+" "+elem.css("paddingLeft");originalPaddingTotalWidth=(parseInt(elem.css("paddingLeft"),10)||0)+(parseInt(elem.css("paddingRight"),10)||0)}function initialise(s){var isMaintainingPositon,lastContentX,lastContentY,hasContainingSpaceChanged,originalScrollTop,originalScrollLeft,newPaneWidth,newPaneHeight,maintainAtBottom=false,maintainAtRight=false;settings=s;if(pane===undefined){originalScrollTop=elem.scrollTop();originalScrollLeft=elem.scrollLeft();elem.css({overflow:"hidden",padding:0});paneWidth=elem.outerWidth()+originalPaddingTotalWidth;paneHeight=elem.outerHeight();elem.width(paneWidth);pane=$('
').css("padding",originalPadding).append(elem.children());container=$('').css({width:paneWidth+"px",height:paneHeight+"px"}).append(pane).appendTo(elem)}else{elem.css("width","");container.css({width:"auto",height:"auto"});pane.css("position","static");newPaneWidth=elem.outerWidth()+originalPaddingTotalWidth;newPaneHeight=elem.outerHeight();pane.css("position","absolute");maintainAtBottom=settings.stickToBottom&&isCloseToBottom();maintainAtRight=settings.stickToRight&&isCloseToRight();hasContainingSpaceChanged=newPaneWidth!==paneWidth||newPaneHeight!==paneHeight;paneWidth=newPaneWidth;paneHeight=newPaneHeight;container.css({width:paneWidth,height:paneHeight});if(!hasContainingSpaceChanged&&previousContentWidth==contentWidth&&pane.outerHeight()==contentHeight){elem.width(paneWidth);return}previousContentWidth=contentWidth;pane.css("width","");elem.width(paneWidth);container.find(">.jspVerticalBar,>.jspHorizontalBar").remove().end()}pane.css("overflow","auto");if(s.contentWidth){contentWidth=s.contentWidth}else{contentWidth=pane[0].scrollWidth}contentHeight=pane[0].scrollHeight;pane.css("overflow","");percentInViewH=Math.ceil(paneWidth)/Math.ceil(contentWidth);percentInViewV=Math.ceil(paneHeight)/Math.ceil(contentHeight);isScrollableV=percentInViewV>=1||settings.alwaysShowVScroll;isScrollableH=percentInViewH>=1||settings.alwaysShowHScroll;if(!(isScrollableH||isScrollableV)){elem.removeClass("jspScrollable");pane.css({top:0,left:0,width:container.width()-originalPaddingTotalWidth});removeMousewheel();removeFocusHandler();removeKeyboardNav();removeClickOnTrack()}else{elem.addClass("jspScrollable");isMaintainingPositon=settings.maintainPosition&&(verticalDragPosition||horizontalDragPosition);if(isMaintainingPositon){lastContentX=contentPositionX();lastContentY=contentPositionY()}initialiseVerticalScroll();initialiseHorizontalScroll();resizeScrollbars();if(isMaintainingPositon){scrollToX(maintainAtRight?contentWidth-paneWidth:lastContentX,false);scrollToY(maintainAtBottom?contentHeight-paneHeight:lastContentY,false)}initFocusHandler();initMousewheel();initTouch();if(settings.enableKeyboardNavigation){initKeyboardNav()}if(settings.clickOnTrack){initClickOnTrack()}observeHash();if(settings.hijackInternalLinks){hijackInternalLinks()}}if(percentInViewV>=1){removeMousewheel();removeFocusHandler();removeKeyboardNav();removeVerticalClickOnTrack()}if(percentInViewH>=1){removeHorizontalClickOnTrack()}if(!settings.resizeSensor&&settings.autoReinitialise&&!reinitialiseInterval){reinitialiseInterval=setInterval(function(){initialise(settings)},settings.autoReinitialiseDelay)}else if(!settings.resizeSensor&&!settings.autoReinitialise&&reinitialiseInterval){clearInterval(reinitialiseInterval)}if(settings.resizeSensor&&!resizeEventsAdded){detectSizeChanges(pane,reinitialiseFn);detectSizeChanges(elem,reinitialiseFn);detectSizeChanges(elem.parent(),reinitialiseFn);window.addEventListener("resize",reinitialiseFn);resizeEventsAdded=true}if(originalScrollTop&&elem.scrollTop(0)){scrollToY(originalScrollTop,false)}if(originalScrollLeft&&elem.scrollLeft(0)){scrollToX(originalScrollLeft,false)}elem.trigger("jsp-initialised",[isScrollableH||isScrollableV])}function detectSizeChanges(element,callback){var resizeWidth,resizeHeight;var resizeElement=document.createElement("div");var resizeGrowElement=document.createElement("div");var resizeGrowChildElement=document.createElement("div");var resizeShrinkElement=document.createElement("div");var resizeShrinkChildElement=document.createElement("div");resizeElement.style.cssText="position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: scroll; z-index: -1; visibility: hidden;";resizeGrowElement.style.cssText="position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: scroll; z-index: -1; visibility: hidden;";resizeShrinkElement.style.cssText="position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: scroll; z-index: -1; visibility: hidden;";resizeGrowChildElement.style.cssText="position: absolute; left: 0; top: 0;";resizeShrinkChildElement.style.cssText="position: absolute; left: 0; top: 0; width: 200%; height: 200%;";var updateSizes=function(){resizeGrowChildElement.style.width=resizeGrowElement.offsetWidth+10+"px";resizeGrowChildElement.style.height=resizeGrowElement.offsetHeight+10+"px";resizeGrowElement.scrollLeft=resizeGrowElement.scrollWidth;resizeGrowElement.scrollTop=resizeGrowElement.scrollHeight;resizeShrinkElement.scrollLeft=resizeShrinkElement.scrollWidth;resizeShrinkElement.scrollTop=resizeShrinkElement.scrollHeight;resizeWidth=element.width();resizeHeight=element.height()};var onGrow=function(){if(element.width()>resizeWidth||element.height()>resizeHeight){callback.apply(this,[])}updateSizes()};var onShrink=function(){if(element.width()').append($(''),$('').append($('').append($(''),$(''))),$('')));verticalBar=container.find(">.jspVerticalBar");verticalTrack=verticalBar.find(">.jspTrack");verticalDrag=verticalTrack.find(">.jspDrag");if(percentInViewV>=1){verticalBar.addClass("jspAllInView")}if(settings.showArrows){arrowUp=$('').on("mousedown.jsp",getArrowScroll(0,-1)).on("click.jsp",nil);arrowDown=$('').on("mousedown.jsp",getArrowScroll(0,1)).on("click.jsp",nil);if(settings.arrowScrollOnHover){arrowUp.on("mouseover.jsp",getArrowScroll(0,-1,arrowUp));arrowDown.on("mouseover.jsp",getArrowScroll(0,1,arrowDown))}appendArrows(verticalTrack,settings.verticalArrowPositions,arrowUp,arrowDown)}verticalTrackHeight=paneHeight;container.find(">.jspVerticalBar>.jspCap:visible,>.jspVerticalBar>.jspArrow").each(function(){verticalTrackHeight-=$(this).outerHeight()});verticalDrag.on("mouseenter",function(){verticalDrag.addClass("jspHover")}).on("mouseleave",function(){verticalDrag.removeClass("jspHover")}).on("mousedown.jsp",function(e){$("html").on("dragstart.jsp selectstart.jsp",nil);verticalDrag.addClass("jspActive");var startY=e.pageY-verticalDrag.position().top;$("html").on("mousemove.jsp",function(e){positionDragY(e.pageY-startY,false)}).on("mouseup.jsp mouseleave.jsp",cancelDrag);return false});sizeVerticalScrollbar()}}function sizeVerticalScrollbar(){verticalTrack.height(verticalTrackHeight+"px");verticalDragPosition=0;scrollbarWidth=settings.verticalGutter+verticalTrack.outerWidth();pane.width(paneWidth-scrollbarWidth-originalPaddingTotalWidth);try{if(verticalBar.position().left===0){pane.css("margin-left",scrollbarWidth+"px")}}catch(err){}}function initialiseHorizontalScroll(){if(isScrollableH){container.append($('').append($(''),$('').append($('').append($(''),$(''))),$('')));horizontalBar=container.find(">.jspHorizontalBar");horizontalTrack=horizontalBar.find(">.jspTrack");horizontalDrag=horizontalTrack.find(">.jspDrag");if(percentInViewH>=1){horizontalBar.addClass("jspAllInView")}if(settings.showArrows){arrowLeft=$('').on("mousedown.jsp",getArrowScroll(-1,0)).on("click.jsp",nil);arrowRight=$('').on("mousedown.jsp",getArrowScroll(1,0)).on("click.jsp",nil);if(settings.arrowScrollOnHover){arrowLeft.on("mouseover.jsp",getArrowScroll(-1,0,arrowLeft));arrowRight.on("mouseover.jsp",getArrowScroll(1,0,arrowRight))}appendArrows(horizontalTrack,settings.horizontalArrowPositions,arrowLeft,arrowRight)}horizontalDrag.on("mouseenter",function(){horizontalDrag.addClass("jspHover")}).on("mouseleave",function(){horizontalDrag.removeClass("jspHover")}).on("mousedown.jsp",function(e){$("html").on("dragstart.jsp selectstart.jsp",nil);horizontalDrag.addClass("jspActive");var startX=e.pageX-horizontalDrag.position().left;$("html").on("mousemove.jsp",function(e){positionDragX(e.pageX-startX,false)}).on("mouseup.jsp mouseleave.jsp",cancelDrag);return false});horizontalTrackWidth=container.innerWidth();sizeHorizontalScrollbar()}}function sizeHorizontalScrollbar(){container.find(">.jspHorizontalBar>.jspCap:visible,>.jspHorizontalBar>.jspArrow").each(function(){horizontalTrackWidth-=$(this).outerWidth()});horizontalTrack.width(horizontalTrackWidth+"px");horizontalDragPosition=0}function resizeScrollbars(){if(isScrollableH&&isScrollableV){var horizontalTrackHeight=horizontalTrack.outerHeight(),verticalTrackWidth=verticalTrack.outerWidth();verticalTrackHeight-=horizontalTrackHeight;$(horizontalBar).find(">.jspCap:visible,>.jspArrow").each(function(){horizontalTrackWidth+=$(this).outerWidth()});horizontalTrackWidth-=verticalTrackWidth;paneHeight-=verticalTrackWidth;paneWidth-=horizontalTrackHeight;horizontalTrack.parent().append($('').css("width",horizontalTrackHeight+"px"));sizeVerticalScrollbar();sizeHorizontalScrollbar()}if(isScrollableH){pane.width(container.outerWidth()-originalPaddingTotalWidth+"px")}contentHeight=pane.outerHeight();percentInViewV=paneHeight/(contentHeight-horizontalTrackHeight);percentInViewH=container.outerWidth()/contentWidth;if(isScrollableH){horizontalDragWidth=Math.ceil(percentInViewH*horizontalTrackWidth);if(horizontalDragWidth>settings.horizontalDragMaxWidth){horizontalDragWidth=settings.horizontalDragMaxWidth}else if(horizontalDragWidthsettings.verticalDragMaxHeight){verticalDragHeight=settings.verticalDragMaxHeight}else if(verticalDragHeight=1)return;if(dirY!==0&&percentInViewV>=1)return;arrow=$(arrow).addClass("jspActive");var eve,scrollTimeout,isFirst=true,doScroll=function(){if(dirX!==0){jsp.scrollByX(dirX*settings.arrowButtonSpeed)}if(dirY!==0){jsp.scrollByY(dirY*settings.arrowButtonSpeed)}scrollTimeout=setTimeout(doScroll,isFirst?settings.initialDelay:settings.arrowRepeatFreq);isFirst=false};doScroll();eve=ele?"mouseout.jsp":"mouseup.jsp";ele=ele||$("html");ele.on(eve,function(){arrow.removeClass("jspActive");if(scrollTimeout){clearTimeout(scrollTimeout)}scrollTimeout=null;ele.off(eve)})}function initClickOnTrack(){removeClickOnTrack();if(isScrollableV){verticalTrack.on("mousedown.jsp",function(e){if(e.originalTarget===undefined||e.originalTarget==e.currentTarget){var clickedTrack=$(this),offset=clickedTrack.offset(),direction=e.pageY-offset.top-verticalDragPosition,scrollTimeout,isFirst=true,doScroll=function(){var offset=clickedTrack.offset(),pos=e.pageY-offset.top-verticalDragHeight/2,contentDragY=paneHeight*settings.scrollPagePercent,dragY=dragMaxY*contentDragY/(contentHeight-paneHeight);if(clickedTrack.hasClass("disabled"))return;if(direction<0){if(verticalDragPosition-dragY>pos){jsp.scrollByY(-contentDragY)}else{positionDragY(pos)}}else if(direction>0){if(verticalDragPosition+dragYpos){jsp.scrollByX(-contentDragX)}else{positionDragX(pos)}}else if(direction>0){if(horizontalDragPosition+dragXdragMaxY){destY=dragMaxY}var willScrollYEvent=new $.Event("jsp-will-scroll-y");elem.trigger(willScrollYEvent,[destY]);if(willScrollYEvent.isDefaultPrevented()){return}var tmpVerticalDragPosition=destY||0;var isAtTop=tmpVerticalDragPosition===0,isAtBottom=tmpVerticalDragPosition==dragMaxY,percentScrolled=destY/dragMaxY,destTop=-percentScrolled*(contentHeight-paneHeight);if(animate===undefined){animate=settings.animateScroll}if(animate){jsp.animate(verticalDrag,"top",destY,_positionDragY,function(){elem.trigger("jsp-user-scroll-y",[-destTop,isAtTop,isAtBottom])})}else{verticalDrag.css("top",destY);_positionDragY(destY);elem.trigger("jsp-user-scroll-y",[-destTop,isAtTop,isAtBottom])}}function _positionDragY(destY){if(destY===undefined){destY=verticalDrag.position().top}container.scrollTop(0);verticalDragPosition=destY||0;var isAtTop=verticalDragPosition===0,isAtBottom=verticalDragPosition==dragMaxY,percentScrolled=destY/dragMaxY,destTop=-percentScrolled*(contentHeight-paneHeight);if(wasAtTop!=isAtTop||wasAtBottom!=isAtBottom){wasAtTop=isAtTop;wasAtBottom=isAtBottom;elem.trigger("jsp-arrow-change",[wasAtTop,wasAtBottom,wasAtLeft,wasAtRight])}updateVerticalArrows(isAtTop,isAtBottom);pane.css("top",destTop);elem.trigger("jsp-scroll-y",[-destTop,isAtTop,isAtBottom]).trigger("scroll")}function positionDragX(destX,animate){if(!isScrollableH){return}if(destX<0){destX=0}else if(destX>dragMaxX){destX=dragMaxX}var willScrollXEvent=new $.Event("jsp-will-scroll-x");elem.trigger(willScrollXEvent,[destX]);if(willScrollXEvent.isDefaultPrevented()){return}var tmpHorizontalDragPosition=destX||0;var isAtLeft=tmpHorizontalDragPosition===0,isAtRight=tmpHorizontalDragPosition==dragMaxX,percentScrolled=destX/dragMaxX,destLeft=-percentScrolled*(contentWidth-paneWidth);if(animate===undefined){animate=settings.animateScroll}if(animate){jsp.animate(horizontalDrag,"left",destX,_positionDragX,function(){elem.trigger("jsp-user-scroll-x",[-destLeft,isAtLeft,isAtRight])})}else{horizontalDrag.css("left",destX);_positionDragX(destX);elem.trigger("jsp-user-scroll-x",[-destLeft,isAtLeft,isAtRight])}}function _positionDragX(destX){if(destX===undefined){destX=horizontalDrag.position().left}container.scrollTop(0);horizontalDragPosition=destX||0;var isAtLeft=horizontalDragPosition===0,isAtRight=horizontalDragPosition==dragMaxX,percentScrolled=destX/dragMaxX,destLeft=-percentScrolled*(contentWidth-paneWidth);if(wasAtLeft!=isAtLeft||wasAtRight!=isAtRight){wasAtLeft=isAtLeft;wasAtRight=isAtRight;elem.trigger("jsp-arrow-change",[wasAtTop,wasAtBottom,wasAtLeft,wasAtRight])}updateHorizontalArrows(isAtLeft,isAtRight);pane.css("left",destLeft);elem.trigger("jsp-scroll-x",[-destLeft,isAtLeft,isAtRight]).trigger("scroll")}function updateVerticalArrows(isAtTop,isAtBottom){if(settings.showArrows){arrowUp[isAtTop?"addClass":"removeClass"]("jspDisabled");arrowDown[isAtBottom?"addClass":"removeClass"]("jspDisabled")}}function updateHorizontalArrows(isAtLeft,isAtRight){if(settings.showArrows){arrowLeft[isAtLeft?"addClass":"removeClass"]("jspDisabled");arrowRight[isAtRight?"addClass":"removeClass"]("jspDisabled")}}function scrollToY(destY,animate){var percentScrolled=destY/(contentHeight-paneHeight);positionDragY(percentScrolled*dragMaxY,animate)}function scrollToX(destX,animate){var percentScrolled=destX/(contentWidth-paneWidth);positionDragX(percentScrolled*dragMaxX,animate)}function scrollToElement(ele,stickToTop,animate){var e,eleHeight,eleWidth,eleTop=0,eleLeft=0,viewportTop,viewportLeft,maxVisibleEleTop,maxVisibleEleLeft,destY,destX;try{e=$(ele)}catch(err){return}eleHeight=e.outerHeight();eleWidth=e.outerWidth();container.scrollTop(0);container.scrollLeft(0);while(!e.is(".jspPane")){eleTop+=e.position().top;eleLeft+=e.position().left;e=e.offsetParent();if(/^body|html$/i.test(e[0].nodeName)){return}}viewportTop=contentPositionY();maxVisibleEleTop=viewportTop+paneHeight;if(eleTopmaxVisibleEleTop){destY=eleTop-paneHeight+eleHeight+settings.horizontalGutter}if(!isNaN(destY)){scrollToY(destY,animate)}viewportLeft=contentPositionX();maxVisibleEleLeft=viewportLeft+paneWidth;if(eleLeftmaxVisibleEleLeft){destX=eleLeft-paneWidth+eleWidth+settings.horizontalGutter}if(!isNaN(destX)){scrollToX(destX,animate)}}function contentPositionX(){return-pane.position().left}function contentPositionY(){return-pane.position().top}function isCloseToBottom(){var scrollableHeight=contentHeight-paneHeight;return scrollableHeight>20&&scrollableHeight-contentPositionY()<10}function isCloseToRight(){var scrollableWidth=contentWidth-paneWidth;return scrollableWidth>20&&scrollableWidth-contentPositionX()<10}function initMousewheel(){container.off(mwEvent).on(mwEvent,function(event,delta,deltaX,deltaY){if(!horizontalDragPosition)horizontalDragPosition=0;if(!verticalDragPosition)verticalDragPosition=0;var dX=horizontalDragPosition,dY=verticalDragPosition,factor=event.deltaFactor||settings.mouseWheelSpeed;jsp.scrollBy(deltaX*factor,-deltaY*factor,false);return dX==horizontalDragPosition&&dY==verticalDragPosition})}function removeMousewheel(){container.off(mwEvent)}function nil(){return false}function initFocusHandler(){pane.find(":input,a").off("focus.jsp").on("focus.jsp",function(e){scrollToElement(e.target,false)})}function removeFocusHandler(){pane.find(":input,a").off("focus.jsp")}function initKeyboardNav(){var keyDown,elementHasScrolled,validParents=[];if(isScrollableH){validParents.push(horizontalBar[0])}if(isScrollableV){validParents.push(verticalBar[0])}pane.on("focus.jsp",function(){elem.focus()});elem.attr("tabindex",0).off("keydown.jsp keypress.jsp").on("keydown.jsp",function(e){if(e.target!==this&&!(validParents.length&&$(e.target).closest(validParents).length)){return}var dX=horizontalDragPosition,dY=verticalDragPosition;switch(e.keyCode){case 40:case 38:case 34:case 32:case 33:case 39:case 37:keyDown=e.keyCode;keyDownHandler();break;case 35:scrollToY(contentHeight-paneHeight);keyDown=null;break;case 36:scrollToY(0);keyDown=null;break}elementHasScrolled=e.keyCode==keyDown&&dX!=horizontalDragPosition||dY!=verticalDragPosition;return!elementHasScrolled}).on("keypress.jsp",function(e){if(e.keyCode==keyDown){keyDownHandler()}if(e.target!==this&&!(validParents.length&&$(e.target).closest(validParents).length)){return}return!elementHasScrolled});if(settings.hideFocus){elem.css("outline","none");if("hideFocus"in container[0]){elem.attr("hideFocus",true)}}else{elem.css("outline","");if("hideFocus"in container[0]){elem.attr("hideFocus",false)}}function keyDownHandler(){var dX=horizontalDragPosition,dY=verticalDragPosition;switch(keyDown){case 40:jsp.scrollByY(settings.keyboardSpeed,false);break;case 38:jsp.scrollByY(-settings.keyboardSpeed,false);break;case 34:case 32:jsp.scrollByY(paneHeight*settings.scrollPagePercent,false);break;case 33:jsp.scrollByY(-paneHeight*settings.scrollPagePercent,false);break;case 39:jsp.scrollByX(settings.keyboardSpeed,false);break;case 37:jsp.scrollByX(-settings.keyboardSpeed,false);break}elementHasScrolled=dX!=horizontalDragPosition||dY!=verticalDragPosition;return elementHasScrolled}}function removeKeyboardNav(){elem.attr("tabindex","-1").removeAttr("tabindex").off("keydown.jsp keypress.jsp");pane.off(".jsp")}function observeHash(){if(location.hash&&location.hash.length>1){var e,retryInt,hash=escape(location.hash.substr(1));try{e=$("#"+hash+', a[name="'+hash+'"]')}catch(err){return}if(e.length&&pane.find(hash)){if(container.scrollTop()===0){retryInt=setInterval(function(){if(container.scrollTop()>0){scrollToElement(e,true);$(document).scrollTop(container.position().top);clearInterval(retryInt)}},50)}else{scrollToElement(e,true);$(document).scrollTop(container.position().top)}}}}function hijackInternalLinks(){if($(document.body).data("jspHijack")){return}$(document.body).data("jspHijack",true);$(document.body).delegate('a[href*="#"]',"click",function(event){var href=this.href.substr(0,this.href.indexOf("#")),locationHref=location.href,hash,element,container,jsp,scrollTop,elementTop;if(location.href.indexOf("#")!==-1){locationHref=location.href.substr(0,location.href.indexOf("#"))}if(href!==locationHref){return}hash=escape(this.href.substr(this.href.indexOf("#")+1));try{element=$("#"+hash+', a[name="'+hash+'"]')}catch(e){return}if(!element.length){return}container=element.closest(".jspScrollable");jsp=container.data("jsp");jsp.scrollToElement(element,true);if(container[0].scrollIntoView){scrollTop=$(window).scrollTop();elementTop=element.offset().top;if(elementTopscrollTop+$(window).height()){container[0].scrollIntoView()}}event.preventDefault()})}function initTouch(){var startX,startY,touchStartX,touchStartY,moved,moving=false;container.off("touchstart.jsp touchmove.jsp touchend.jsp click.jsp-touchclick").on("touchstart.jsp",function(e){var touch=e.originalEvent.touches[0];startX=contentPositionX();startY=contentPositionY();touchStartX=touch.pageX;touchStartY=touch.pageY;moved=false;moving=true}).on("touchmove.jsp",function(ev){if(!moving){return}var touchPos=ev.originalEvent.touches[0],dX=horizontalDragPosition,dY=verticalDragPosition;jsp.scrollTo(startX+touchStartX-touchPos.pageX,startY+touchStartY-touchPos.pageY);moved=moved||Math.abs(touchStartX-touchPos.pageX)>5||Math.abs(touchStartY-touchPos.pageY)>5;return dX==horizontalDragPosition&&dY==verticalDragPosition}).on("touchend.jsp",function(e){moving=false}).on("click.jsp-touchclick",function(e){if(moved){moved=false;return false}})}function destroy(){var currentY=contentPositionY(),currentX=contentPositionX();elem.removeClass("jspScrollable").off(".jsp");pane.off(".jsp");elem.replaceWith(originalElement.append(pane.children()));originalElement.scrollTop(currentY);originalElement.scrollLeft(currentX);if(reinitialiseInterval){clearInterval(reinitialiseInterval)}}$.extend(jsp,{reinitialise:function(s){s=$.extend({},settings,s);initialise(s)},scrollToElement:function(ele,stickToTop,animate){scrollToElement(ele,stickToTop,animate)},scrollTo:function(destX,destY,animate){scrollToX(destX,animate);scrollToY(destY,animate)},scrollToX:function(destX,animate){scrollToX(destX,animate)},scrollToY:function(destY,animate){scrollToY(destY,animate)},scrollToPercentX:function(destPercentX,animate){scrollToX(destPercentX*(contentWidth-paneWidth),animate)},scrollToPercentY:function(destPercentY,animate){scrollToY(destPercentY*(contentHeight-paneHeight),animate)},scrollBy:function(deltaX,deltaY,animate){jsp.scrollByX(deltaX,animate);jsp.scrollByY(deltaY,animate)},scrollByX:function(deltaX,animate){var destX=contentPositionX()+Math[deltaX<0?"floor":"ceil"](deltaX),percentScrolled=destX/(contentWidth-paneWidth);positionDragX(percentScrolled*dragMaxX,animate)},scrollByY:function(deltaY,animate){var destY=contentPositionY()+Math[deltaY<0?"floor":"ceil"](deltaY),percentScrolled=destY/(contentHeight-paneHeight);positionDragY(percentScrolled*dragMaxY,animate)},positionDragX:function(x,animate){positionDragX(x,animate)},positionDragY:function(y,animate){positionDragY(y,animate)},animate:function(ele,prop,value,stepCallback,completeCallback){var params={};params[prop]=value;ele.animate(params,{duration:settings.animateDuration,easing:settings.animateEase,queue:false,step:stepCallback,complete:completeCallback})},getContentPositionX:function(){return contentPositionX()},getContentPositionY:function(){return contentPositionY()},getContentWidth:function(){return contentWidth},getContentHeight:function(){return contentHeight},getPercentScrolledX:function(){return contentPositionX()/(contentWidth-paneWidth)},getPercentScrolledY:function(){return contentPositionY()/(contentHeight-paneHeight)},getIsScrollableH:function(){return isScrollableH},getIsScrollableV:function(){return isScrollableV},getContentPane:function(){return pane},scrollToBottom:function(animate){positionDragY(dragMaxY,animate)},hijackInternalLinks:$.noop,destroy:function(){destroy()}});initialise(s)}settings=$.extend({},$.fn.jScrollPane.defaults,settings);$.each(["arrowButtonSpeed","trackClickSpeed","keyboardSpeed"],function(){settings[this]=settings[this]||settings.speed});return this.each(function(){var elem=$(this),jspApi=elem.data("jsp");if(jspApi){jspApi.reinitialise(settings)}else{$("script",elem).filter('[type="text/javascript"],:not([type])').remove();jspApi=new JScrollPane(elem,settings);elem.data("jsp",jspApi)}})};$.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:undefined,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:.8,alwaysShowVScroll:false,alwaysShowHScroll:false,resizeSensor:false,resizeSensorDelay:0}});