diff --git a/ajax/libs/jquery.nanoscroller/0.7.1/css/nanoscroller.css b/ajax/libs/jquery.nanoscroller/0.7.1/css/nanoscroller.css
new file mode 100644
index 000000000..b0b799962
--- /dev/null
+++ b/ajax/libs/jquery.nanoscroller/0.7.1/css/nanoscroller.css
@@ -0,0 +1,55 @@
+/** initial setup **/
+.nano {
+ position : relative;
+ width : 100%;
+ height : 100%;
+ overflow : hidden;
+}
+.nano .content {
+ position : absolute;
+ overflow : scroll;
+ overflow-x : hidden;
+ top : 0;
+ right : 0;
+ bottom : 0;
+ left : 0;
+}
+.nano .content:focus {
+ outline: thin dotted;
+}
+.nano .content::-webkit-scrollbar {
+ visibility: hidden;
+}
+.has-scrollbar .content::-webkit-scrollbar {
+ visibility: visible;
+}
+.nano > .pane {
+ background : rgba(0,0,0,.25);
+ position : absolute;
+ width : 10px;
+ right : 0;
+ top : 0;
+ bottom : 0;
+ visibility : hidden\9; /* Target only IE7 and IE8 with this hack */
+ opacity : .01;
+ -webkit-transition : .2s;
+ -moz-transition : .2s;
+ -o-transition : .2s;
+ transition : .2s;
+ -moz-border-radius : 5px;
+ -webkit-border-radius : 5px;
+ border-radius : 5px;
+}
+.nano > .pane > .slider {
+ background: #444;
+ background: rgba(0,0,0,.5);
+ position : relative;
+ margin : 0 1px;
+ -moz-border-radius : 3px;
+ -webkit-border-radius : 3px;
+ border-radius : 3px;
+}
+.nano:hover > .pane, .pane.active, .pane.flashed {
+ visibility : visible\9; /* Target only IE7 and IE8 with this hack */
+ opacity : 0.99;
+}
diff --git a/ajax/libs/jquery.nanoscroller/0.7.1/css/nanoscroller.min.css b/ajax/libs/jquery.nanoscroller/0.7.1/css/nanoscroller.min.css
new file mode 100644
index 000000000..31590a8c5
--- /dev/null
+++ b/ajax/libs/jquery.nanoscroller/0.7.1/css/nanoscroller.min.css
@@ -0,0 +1 @@
+.nano{position:relative;width:100%;height:100%;overflow:hidden}.nano .content{position:absolute;overflow:scroll;overflow-x:hidden;top:0;right:0;bottom:0;left:0}.nano .content:focus{outline:dotted thin}.nano .content::-webkit-scrollbar{visibility:hidden}.has-scrollbar .content::-webkit-scrollbar{visibility:visible}.nano>.pane{background:rgba(0,0,0,.25);position:absolute;width:10px;right:0;top:0;bottom:0;opacity:.01;-webkit-transition:.2s;-moz-transition:.2s;-o-transition:.2s;transition:.2s;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.nano>.pane>.slider{background:#444;background:rgba(0,0,0,.5);position:relative;margin:0 1px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.nano:hover>.pane,.pane.active,.pane.flashed{opacity:.99}
\ No newline at end of file
diff --git a/ajax/libs/jquery.nanoscroller/0.7.1/javascripts/jquery.nanoscroller.js b/ajax/libs/jquery.nanoscroller/0.7.1/javascripts/jquery.nanoscroller.js
new file mode 100644
index 000000000..584b090bd
--- /dev/null
+++ b/ajax/libs/jquery.nanoscroller/0.7.1/javascripts/jquery.nanoscroller.js
@@ -0,0 +1,752 @@
+/*! nanoScrollerJS - v0.7
+* http://jamesflorentino.github.com/nanoScrollerJS/
+* Copyright (c) 2013 James Florentino; Licensed MIT */
+
+
+(function($, window, document) {
+ "use strict";
+
+ var BROWSER_IS_IE7, BROWSER_SCROLLBAR_WIDTH, DOMSCROLL, DOWN, DRAG, KEYDOWN, KEYUP, MOUSEDOWN, MOUSEMOVE, MOUSEUP, MOUSEWHEEL, NanoScroll, PANEDOWN, RESIZE, SCROLL, SCROLLBAR, TOUCHMOVE, UP, WHEEL, defaults, getBrowserScrollbarWidth;
+ defaults = {
+ /**
+ a classname for the pane element.
+ @property paneClass
+ @type String
+ @default 'pane'
+ */
+
+ paneClass: 'pane',
+ /**
+ a classname for the slider element.
+ @property sliderClass
+ @type String
+ @default 'slider'
+ */
+
+ sliderClass: 'slider',
+ /**
+ a classname for the content element.
+ @property contentClass
+ @type String
+ @default 'content'
+ */
+
+ contentClass: 'content',
+ /**
+ a setting to enable native scrolling in iOS devices.
+ @property iOSNativeScrolling
+ @type Boolean
+ @default false
+ */
+
+ iOSNativeScrolling: false,
+ /**
+ a setting to prevent the rest of the page being
+ scrolled when user scrolls the `.content` element.
+ @property preventPageScrolling
+ @type Boolean
+ @default false
+ */
+
+ preventPageScrolling: false,
+ /**
+ a setting to disable binding to the resize event.
+ @property disableResize
+ @type Boolean
+ @default false
+ */
+
+ disableResize: false,
+ /**
+ a setting to make the scrollbar always visible.
+ @property alwaysVisible
+ @type Boolean
+ @default false
+ */
+
+ alwaysVisible: false,
+ /**
+ a default timeout for the `flash()` method.
+ @property flashDelay
+ @type Number
+ @default 1500
+ */
+
+ flashDelay: 1500,
+ /**
+ a minimum height for the `.slider` element.
+ @property sliderMinHeight
+ @type Number
+ @default 20
+ */
+
+ sliderMinHeight: 20,
+ /**
+ a maximum height for the `.slider` element.
+ @property sliderMaxHeight
+ @type Number
+ @default null
+ */
+
+ sliderMaxHeight: null
+ };
+ /**
+ @property SCROLLBAR
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ SCROLLBAR = 'scrollbar';
+ /**
+ @property SCROLL
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ SCROLL = 'scroll';
+ /**
+ @property MOUSEDOWN
+ @type String
+ @final
+ @private
+ */
+
+ MOUSEDOWN = 'mousedown';
+ /**
+ @property MOUSEMOVE
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ MOUSEMOVE = 'mousemove';
+ /**
+ @property MOUSEWHEEL
+ @type String
+ @final
+ @private
+ */
+
+ MOUSEWHEEL = 'mousewheel';
+ /**
+ @property MOUSEUP
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ MOUSEUP = 'mouseup';
+ /**
+ @property RESIZE
+ @type String
+ @final
+ @private
+ */
+
+ RESIZE = 'resize';
+ /**
+ @property DRAG
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ DRAG = 'drag';
+ /**
+ @property UP
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ UP = 'up';
+ /**
+ @property PANEDOWN
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ PANEDOWN = 'panedown';
+ /**
+ @property DOMSCROLL
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ DOMSCROLL = 'DOMMouseScroll';
+ /**
+ @property DOWN
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ DOWN = 'down';
+ /**
+ @property WHEEL
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ WHEEL = 'wheel';
+ /**
+ @property KEYDOWN
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ KEYDOWN = 'keydown';
+ /**
+ @property KEYUP
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ KEYUP = 'keyup';
+ /**
+ @property TOUCHMOVE
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ TOUCHMOVE = 'touchmove';
+ /**
+ @property BROWSER_IS_IE7
+ @type Boolean
+ @static
+ @final
+ @private
+ */
+
+ BROWSER_IS_IE7 = window.navigator.appName === 'Microsoft Internet Explorer' && /msie 7./i.test(window.navigator.appVersion) && window.ActiveXObject;
+ /**
+ @property BROWSER_SCROLLBAR_WIDTH
+ @type Number
+ @static
+ @default null
+ @private
+ */
+
+ BROWSER_SCROLLBAR_WIDTH = null;
+ /**
+ Returns browser's native scrollbar width
+ @method getBrowserScrollbarWidth
+ @return {Number} the scrollbar width in pixels
+ @static
+ @private
+ */
+
+ getBrowserScrollbarWidth = function() {
+ var outer, outerStyle, scrollbarWidth;
+ outer = document.createElement('div');
+ outerStyle = outer.style;
+ outerStyle.position = 'absolute';
+ outerStyle.width = '100px';
+ outerStyle.height = '100px';
+ outerStyle.overflow = SCROLL;
+ outerStyle.top = '-9999px';
+ document.body.appendChild(outer);
+ scrollbarWidth = outer.offsetWidth - outer.clientWidth;
+ document.body.removeChild(outer);
+ return scrollbarWidth;
+ };
+ /**
+ @class NanoScroll
+ @param element {HTMLElement|Node} the main element
+ @param options {Object} nanoScroller's options
+ @constructor
+ */
+
+ NanoScroll = (function() {
+
+ function NanoScroll(el, options) {
+ this.el = el;
+ this.options = options;
+ BROWSER_SCROLLBAR_WIDTH || (BROWSER_SCROLLBAR_WIDTH = getBrowserScrollbarWidth());
+ this.$el = $(this.el);
+ this.doc = $(document);
+ this.win = $(window);
+ this.$content = this.$el.children("." + options.contentClass);
+ this.$content.attr('tabindex', 0);
+ this.content = this.$content[0];
+ if (this.options.iOSNativeScrolling && (this.el.style.WebkitOverflowScrolling != null)) {
+ this.nativeScrolling();
+ } else {
+ this.generate();
+ }
+ this.createEvents();
+ this.addEvents();
+ this.reset();
+ }
+
+ /**
+ Prevents the rest of the page being scrolled
+ when user scrolls the `.content` element.
+ @method preventScrolling
+ @param event {Event}
+ @param direction {String} Scroll direction (up or down)
+ @private
+ */
+
+
+ NanoScroll.prototype.preventScrolling = function(e, direction) {
+ if (!this.isActive) {
+ return;
+ }
+ if (e.type === DOMSCROLL) {
+ if (direction === DOWN && e.originalEvent.detail > 0 || direction === UP && e.originalEvent.detail < 0) {
+ e.preventDefault();
+ }
+ } else if (e.type === MOUSEWHEEL) {
+ if (!e.originalEvent || !e.originalEvent.wheelDelta) {
+ return;
+ }
+ if (direction === DOWN && e.originalEvent.wheelDelta < 0 || direction === UP && e.originalEvent.wheelDelta > 0) {
+ e.preventDefault();
+ }
+ }
+ };
+
+ /**
+ Enable iOS native scrolling
+ */
+
+
+ NanoScroll.prototype.nativeScrolling = function() {
+ this.$content.css({
+ WebkitOverflowScrolling: 'touch'
+ });
+ this.iOSNativeScrolling = true;
+ this.isActive = true;
+ };
+
+ /**
+ Updates those nanoScroller properties that
+ are related to current scrollbar position.
+ @method updateScrollValues
+ @private
+ */
+
+
+ NanoScroll.prototype.updateScrollValues = function() {
+ var content;
+ content = this.content;
+ this.maxScrollTop = content.scrollHeight - content.clientHeight;
+ this.contentScrollTop = content.scrollTop;
+ if (!this.iOSNativeScrolling) {
+ this.maxSliderTop = this.paneHeight - this.sliderHeight;
+ this.sliderTop = this.contentScrollTop * this.maxSliderTop / this.maxScrollTop;
+ }
+ };
+
+ /**
+ Creates event related methods
+ @method createEvents
+ @private
+ */
+
+
+ NanoScroll.prototype.createEvents = function() {
+ var _this = this;
+ this.events = {
+ down: function(e) {
+ _this.isBeingDragged = true;
+ _this.offsetY = e.pageY - _this.slider.offset().top;
+ _this.pane.addClass('active');
+ _this.doc.bind(MOUSEMOVE, _this.events[DRAG]).bind(MOUSEUP, _this.events[UP]);
+ return false;
+ },
+ drag: function(e) {
+ _this.sliderY = e.pageY - _this.$el.offset().top - _this.offsetY;
+ _this.scroll();
+ _this.updateScrollValues();
+ if (_this.contentScrollTop >= _this.maxScrollTop) {
+ _this.$el.trigger('scrollend');
+ } else if (_this.contentScrollTop === 0) {
+ _this.$el.trigger('scrolltop');
+ }
+ return false;
+ },
+ up: function(e) {
+ _this.isBeingDragged = false;
+ _this.pane.removeClass('active');
+ _this.doc.unbind(MOUSEMOVE, _this.events[DRAG]).unbind(MOUSEUP, _this.events[UP]);
+ return false;
+ },
+ resize: function(e) {
+ _this.reset();
+ },
+ panedown: function(e) {
+ _this.sliderY = (e.offsetY || e.originalEvent.layerY) - (_this.sliderHeight * 0.5);
+ _this.scroll();
+ _this.events.down(e);
+ return false;
+ },
+ scroll: function(e) {
+ if (_this.isBeingDragged) {
+ return;
+ }
+ _this.updateScrollValues();
+ if (!_this.iOSNativeScrolling) {
+ _this.sliderY = _this.sliderTop;
+ _this.slider.css({
+ top: _this.sliderTop
+ });
+ }
+ if (e == null) {
+ return;
+ }
+ if (_this.contentScrollTop >= _this.maxScrollTop) {
+ if (_this.options.preventPageScrolling) {
+ _this.preventScrolling(e, DOWN);
+ }
+ _this.$el.trigger('scrollend');
+ } else if (_this.contentScrollTop === 0) {
+ if (_this.options.preventPageScrolling) {
+ _this.preventScrolling(e, UP);
+ }
+ _this.$el.trigger('scrolltop');
+ }
+ },
+ wheel: function(e) {
+ if (e == null) {
+ return;
+ }
+ _this.sliderY += -e.wheelDeltaY || -e.delta;
+ _this.scroll();
+ return false;
+ }
+ };
+ };
+
+ /**
+ Adds event listeners with jQuery.
+ @method addEvents
+ @private
+ */
+
+
+ NanoScroll.prototype.addEvents = function() {
+ var events;
+ this.removeEvents();
+ events = this.events;
+ if (!this.options.disableResize) {
+ this.win.bind(RESIZE, events[RESIZE]);
+ }
+ if (!this.iOSNativeScrolling) {
+ this.slider.bind(MOUSEDOWN, events[DOWN]);
+ this.pane.bind(MOUSEDOWN, events[PANEDOWN]).bind("" + MOUSEWHEEL + " " + DOMSCROLL, events[WHEEL]);
+ }
+ this.$content.bind("" + SCROLL + " " + MOUSEWHEEL + " " + DOMSCROLL + " " + TOUCHMOVE, events[SCROLL]);
+ };
+
+ /**
+ Removes event listeners with jQuery.
+ @method removeEvents
+ @private
+ */
+
+
+ NanoScroll.prototype.removeEvents = function() {
+ var events;
+ events = this.events;
+ this.win.unbind(RESIZE, events[RESIZE]);
+ if (!this.iOSNativeScrolling) {
+ this.slider.unbind();
+ this.pane.unbind();
+ }
+ this.$content.unbind("" + SCROLL + " " + MOUSEWHEEL + " " + DOMSCROLL + " " + TOUCHMOVE, events[SCROLL]);
+ };
+
+ /**
+ Generates nanoScroller's scrollbar and elements for it.
+ @method generate
+ @chainable
+ @private
+ */
+
+
+ NanoScroll.prototype.generate = function() {
+ var contentClass, cssRule, options, paneClass, sliderClass;
+ options = this.options;
+ paneClass = options.paneClass, sliderClass = options.sliderClass, contentClass = options.contentClass;
+ if (!this.$el.find("" + paneClass).length && !this.$el.find("" + sliderClass).length) {
+ this.$el.append("
");
+ }
+ this.slider = this.$el.find("." + sliderClass);
+ this.pane = this.$el.find("." + paneClass);
+ if (BROWSER_SCROLLBAR_WIDTH) {
+ cssRule = this.$el.css('direction') === 'rtl' ? {
+ left: -BROWSER_SCROLLBAR_WIDTH
+ } : {
+ right: -BROWSER_SCROLLBAR_WIDTH
+ };
+ this.$el.addClass('has-scrollbar');
+ }
+ if (cssRule != null) {
+ this.$content.css(cssRule);
+ }
+ return this;
+ };
+
+ /**
+ @method restore
+ @private
+ */
+
+
+ NanoScroll.prototype.restore = function() {
+ this.stopped = false;
+ this.pane.show();
+ this.addEvents();
+ };
+
+ /**
+ Resets nanoScroller's scrollbar.
+ @method reset
+ @chainable
+ @example
+ $(".nano").nanoScroller();
+ */
+
+
+ NanoScroll.prototype.reset = function() {
+ var content, contentHeight, contentStyle, contentStyleOverflowY, paneBottom, paneHeight, paneOuterHeight, paneTop, sliderHeight;
+ if (this.iOSNativeScrolling) {
+ this.contentHeight = this.content.scrollHeight;
+ return;
+ }
+ if (!this.$el.find("." + this.options.paneClass).length) {
+ this.generate().stop();
+ }
+ if (this.stopped) {
+ this.restore();
+ }
+ content = this.content;
+ contentStyle = content.style;
+ contentStyleOverflowY = contentStyle.overflowY;
+ if (BROWSER_IS_IE7) {
+ this.$content.css({
+ height: this.$content.height()
+ });
+ }
+ contentHeight = content.scrollHeight + BROWSER_SCROLLBAR_WIDTH;
+ paneHeight = this.pane.outerHeight();
+ paneTop = parseInt(this.pane.css('top'), 10);
+ paneBottom = parseInt(this.pane.css('bottom'), 10);
+ paneOuterHeight = paneHeight + paneTop + paneBottom;
+ sliderHeight = Math.round(paneOuterHeight / contentHeight * paneOuterHeight);
+ if (sliderHeight < this.options.sliderMinHeight) {
+ sliderHeight = this.options.sliderMinHeight;
+ } else if ((this.options.sliderMaxHeight != null) && sliderHeight > this.options.sliderMaxHeight) {
+ sliderHeight = this.options.sliderMaxHeight;
+ }
+ if (contentStyleOverflowY === SCROLL && contentStyle.overflowX !== SCROLL) {
+ sliderHeight += BROWSER_SCROLLBAR_WIDTH;
+ }
+ this.maxSliderTop = paneOuterHeight - sliderHeight;
+ this.contentHeight = contentHeight;
+ this.paneHeight = paneHeight;
+ this.paneOuterHeight = paneOuterHeight;
+ this.sliderHeight = sliderHeight;
+ this.slider.height(sliderHeight);
+ this.events.scroll();
+ this.pane.show();
+ this.isActive = true;
+ if ((content.scrollHeight === content.clientHeight) || (this.pane.outerHeight(true) >= content.scrollHeight && contentStyleOverflowY !== SCROLL)) {
+ this.pane.hide();
+ this.isActive = false;
+ } else if (this.el.clientHeight === content.scrollHeight && contentStyleOverflowY === SCROLL) {
+ this.slider.hide();
+ } else {
+ this.slider.show();
+ }
+ this.pane.css({
+ opacity: (this.options.alwaysVisible ? 1 : ''),
+ visibility: (this.options.alwaysVisible ? 'visible' : '')
+ });
+ return this;
+ };
+
+ /**
+ @method scroll
+ @private
+ @example
+ $(".nano").nanoScroller({ scroll: 'top' });
+ */
+
+
+ NanoScroll.prototype.scroll = function() {
+ if (!this.isActive) {
+ return;
+ }
+ this.sliderY = Math.max(0, this.sliderY);
+ this.sliderY = Math.min(this.maxSliderTop, this.sliderY);
+ this.$content.scrollTop((this.paneHeight - this.contentHeight + BROWSER_SCROLLBAR_WIDTH) * this.sliderY / this.maxSliderTop * -1);
+ if (!this.iOSNativeScrolling) {
+ this.slider.css({
+ top: this.sliderY
+ });
+ }
+ return this;
+ };
+
+ /**
+ Scroll at the bottom with an offset value
+ @method scrollBottom
+ @param offsetY {Number}
+ @chainable
+ @example
+ $(".nano").nanoScroller({ scrollBottom: value });
+ */
+
+
+ NanoScroll.prototype.scrollBottom = function(offsetY) {
+ if (!this.isActive) {
+ return;
+ }
+ this.reset();
+ this.$content.scrollTop(this.contentHeight - this.$content.height() - offsetY).trigger(MOUSEWHEEL);
+ return this;
+ };
+
+ /**
+ Scroll at the top with an offset value
+ @method scrollTop
+ @param offsetY {Number}
+ @chainable
+ @example
+ $(".nano").nanoScroller({ scrollTop: value });
+ */
+
+
+ NanoScroll.prototype.scrollTop = function(offsetY) {
+ if (!this.isActive) {
+ return;
+ }
+ this.reset();
+ this.$content.scrollTop(+offsetY).trigger(MOUSEWHEEL);
+ return this;
+ };
+
+ /**
+ Scroll to an element
+ @method scrollTo
+ @param node {Node} A node to scroll to.
+ @chainable
+ @example
+ $(".nano").nanoScroller({ scrollTo: $('#a_node') });
+ */
+
+
+ NanoScroll.prototype.scrollTo = function(node) {
+ if (!this.isActive) {
+ return;
+ }
+ this.reset();
+ this.scrollTop($(node).get(0).offsetTop);
+ return this;
+ };
+
+ /**
+ To stop the operation.
+ This option will tell the plugin to disable all event bindings and hide the gadget scrollbar from the UI.
+ @method stop
+ @chainable
+ @example
+ $(".nano").nanoScroller({ stop: true });
+ */
+
+
+ NanoScroll.prototype.stop = function() {
+ this.stopped = true;
+ this.removeEvents();
+ this.pane.hide();
+ return this;
+ };
+
+ /**
+ To flash the scrollbar gadget for an amount of time defined in plugin settings (defaults to 1,5s).
+ Useful if you want to show the user (e.g. on pageload) that there is more content waiting for him.
+ @method flash
+ @chainable
+ @example
+ $(".nano").nanoScroller({ flash: true });
+ */
+
+
+ NanoScroll.prototype.flash = function() {
+ var _this = this;
+ if (!this.isActive) {
+ return;
+ }
+ this.reset();
+ this.pane.addClass('flashed');
+ setTimeout(function() {
+ _this.pane.removeClass('flashed');
+ }, this.options.flashDelay);
+ return this;
+ };
+
+ return NanoScroll;
+
+ })();
+ $.fn.nanoScroller = function(settings) {
+ return this.each(function() {
+ var options, scrollbar;
+ if (!(scrollbar = this.nanoscroller)) {
+ options = $.extend({}, defaults, settings);
+ this.nanoscroller = scrollbar = new NanoScroll(this, options);
+ }
+ if (settings && typeof settings === "object") {
+ $.extend(scrollbar.options, settings);
+ if (settings.scrollBottom) {
+ return scrollbar.scrollBottom(settings.scrollBottom);
+ }
+ if (settings.scrollTop) {
+ return scrollbar.scrollTop(settings.scrollTop);
+ }
+ if (settings.scrollTo) {
+ return scrollbar.scrollTo(settings.scrollTo);
+ }
+ if (settings.scroll === 'bottom') {
+ return scrollbar.scrollBottom(0);
+ }
+ if (settings.scroll === 'top') {
+ return scrollbar.scrollTop(0);
+ }
+ if (settings.scroll && settings.scroll instanceof $) {
+ return scrollbar.scrollTo(settings.scroll);
+ }
+ if (settings.stop) {
+ return scrollbar.stop();
+ }
+ if (settings.flash) {
+ return scrollbar.flash();
+ }
+ }
+ return scrollbar.reset();
+ });
+ };
+})(jQuery, window, document);
diff --git a/ajax/libs/jquery.nanoscroller/0.7.1/javascripts/jquery.nanoscroller.min.js b/ajax/libs/jquery.nanoscroller/0.7.1/javascripts/jquery.nanoscroller.min.js
new file mode 100644
index 000000000..392808a6e
--- /dev/null
+++ b/ajax/libs/jquery.nanoscroller/0.7.1/javascripts/jquery.nanoscroller.min.js
@@ -0,0 +1,3 @@
+/*! nanoScrollerJS v0.7 (c) 2013 James Florentino; Licensed MIT */
+
+(function(e,t,n){"use strict";var r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b,w,E,S,x;S={paneClass:"pane",sliderClass:"slider",contentClass:"content",iOSNativeScrolling:!1,preventPageScrolling:!1,disableResize:!1,alwaysVisible:!1,flashDelay:1500,sliderMinHeight:20,sliderMaxHeight:null},y="scrollbar",g="scroll",l="mousedown",c="mousemove",p="mousewheel",h="mouseup",m="resize",u="drag",w="up",v="panedown",s="DOMMouseScroll",o="down",E="wheel",a="keydown",f="keyup",b="touchmove",r=t.navigator.appName==="Microsoft Internet Explorer"&&/msie 7./i.test(t.navigator.appVersion)&&t.ActiveXObject,i=null,x=function(){var e,t,r;return e=n.createElement("div"),t=e.style,t.position="absolute",t.width="100px",t.height="100px",t.overflow=g,t.top="-9999px",n.body.appendChild(e),r=e.offsetWidth-e.clientWidth,n.body.removeChild(e),r},d=function(){function a(r,s){this.el=r,this.options=s,i||(i=x()),this.$el=e(this.el),this.doc=e(n),this.win=e(t),this.$content=this.$el.children("."+s.contentClass),this.$content.attr("tabindex",0),this.content=this.$content[0],this.options.iOSNativeScrolling&&this.el.style.WebkitOverflowScrolling!=null?this.nativeScrolling():this.generate(),this.createEvents(),this.addEvents(),this.reset()}return a.prototype.preventScrolling=function(e,t){if(!this.isActive)return;if(e.type===s)(t===o&&e.originalEvent.detail>0||t===w&&e.originalEvent.detail<0)&&e.preventDefault();else if(e.type===p){if(!e.originalEvent||!e.originalEvent.wheelDelta)return;(t===o&&e.originalEvent.wheelDelta<0||t===w&&e.originalEvent.wheelDelta>0)&&e.preventDefault()}},a.prototype.nativeScrolling=function(){this.$content.css({WebkitOverflowScrolling:"touch"}),this.iOSNativeScrolling=!0,this.isActive=!0},a.prototype.updateScrollValues=function(){var e;e=this.content,this.maxScrollTop=e.scrollHeight-e.clientHeight,this.contentScrollTop=e.scrollTop,this.iOSNativeScrolling||(this.maxSliderTop=this.paneHeight-this.sliderHeight,this.sliderTop=this.contentScrollTop*this.maxSliderTop/this.maxScrollTop)},a.prototype.createEvents=function(){var e=this;this.events={down:function(t){return e.isBeingDragged=!0,e.offsetY=t.pageY-e.slider.offset().top,e.pane.addClass("active"),e.doc.bind(c,e.events[u]).bind(h,e.events[w]),!1},drag:function(t){return e.sliderY=t.pageY-e.$el.offset().top-e.offsetY,e.scroll(),e.updateScrollValues(),e.contentScrollTop>=e.maxScrollTop?e.$el.trigger("scrollend"):e.contentScrollTop===0&&e.$el.trigger("scrolltop"),!1},up:function(t){return e.isBeingDragged=!1,e.pane.removeClass("active"),e.doc.unbind(c,e.events[u]).unbind(h,e.events[w]),!1},resize:function(t){e.reset()},panedown:function(t){return e.sliderY=(t.offsetY||t.originalEvent.layerY)-e.sliderHeight*.5,e.scroll(),e.events.down(t),!1},scroll:function(t){if(e.isBeingDragged)return;e.updateScrollValues(),e.iOSNativeScrolling||(e.sliderY=e.sliderTop,e.slider.css({top:e.sliderTop}));if(t==null)return;e.contentScrollTop>=e.maxScrollTop?(e.options.preventPageScrolling&&e.preventScrolling(t,o),e.$el.trigger("scrollend")):e.contentScrollTop===0&&(e.options.preventPageScrolling&&e.preventScrolling(t,w),e.$el.trigger("scrolltop"))},wheel:function(t){if(t==null)return;return e.sliderY+=-t.wheelDeltaY||-t.delta,e.scroll(),!1}}},a.prototype.addEvents=function(){var e;this.removeEvents(),e=this.events,this.options.disableResize||this.win.bind(m,e[m]),this.iOSNativeScrolling||(this.slider.bind(l,e[o]),this.pane.bind(l,e[v]).bind(""+p+" "+s,e[E])),this.$content.bind(""+g+" "+p+" "+s+" "+b,e[g])},a.prototype.removeEvents=function(){var e;e=this.events,this.win.unbind(m,e[m]),this.iOSNativeScrolling||(this.slider.unbind(),this.pane.unbind()),this.$content.unbind(""+g+" "+p+" "+s+" "+b,e[g])},a.prototype.generate=function(){var e,t,n,r,s;return n=this.options,r=n.paneClass,s=n.sliderClass,e=n.contentClass,!this.$el.find(""+r).length&&!this.$el.find(""+s).length&&this.$el.append(''),this.slider=this.$el.find("."+s),this.pane=this.$el.find("."+r),i&&(t=this.$el.css("direction")==="rtl"?{left:-i}:{right:-i},this.$el.addClass("has-scrollbar")),t!=null&&this.$content.css(t),this},a.prototype.restore=function(){this.stopped=!1,this.pane.show(),this.addEvents()},a.prototype.reset=function(){var e,t,n,s,o,u,a,f,l;if(this.iOSNativeScrolling){this.contentHeight=this.content.scrollHeight;return}return this.$el.find("."+this.options.paneClass).length||this.generate().stop(),this.stopped&&this.restore(),e=this.content,n=e.style,s=n.overflowY,r&&this.$content.css({height:this.$content.height()}),t=e.scrollHeight+i,u=this.pane.outerHeight(),f=parseInt(this.pane.css("top"),10),o=parseInt(this.pane.css("bottom"),10),a=u+f+o,l=Math.round(a/t*a),lthis.options.sliderMaxHeight&&(l=this.options.sliderMaxHeight),s===g&&n.overflowX!==g&&(l+=i),this.maxSliderTop=a-l,this.contentHeight=t,this.paneHeight=u,this.paneOuterHeight=a,this.sliderHeight=l,this.slider.height(l),this.events.scroll(),this.pane.show(),this.isActive=!0,e.scrollHeight===e.clientHeight||this.pane.outerHeight(!0)>=e.scrollHeight&&s!==g?(this.pane.hide(),this.isActive=!1):this.el.clientHeight===e.scrollHeight&&s===g?this.slider.hide():this.slider.show(),this.pane.css({opacity:this.options.alwaysVisible?1:"",visibility:this.options.alwaysVisible?"visible":""}),this},a.prototype.scroll=function(){if(!this.isActive)return;return this.sliderY=Math.max(0,this.sliderY),this.sliderY=Math.min(this.maxSliderTop,this.sliderY),this.$content.scrollTop((this.paneHeight-this.contentHeight+i)*this.sliderY/this.maxSliderTop*-1),this.iOSNativeScrolling||this.slider.css({top:this.sliderY}),this},a.prototype.scrollBottom=function(e){if(!this.isActive)return;return this.reset(),this.$content.scrollTop(this.contentHeight-this.$content.height()-e).trigger(p),this},a.prototype.scrollTop=function(e){if(!this.isActive)return;return this.reset(),this.$content.scrollTop(+e).trigger(p),this},a.prototype.scrollTo=function(t){if(!this.isActive)return;return this.reset(),this.scrollTop(e(t).get(0).offsetTop),this},a.prototype.stop=function(){return this.stopped=!0,this.removeEvents(),this.pane.hide(),this},a.prototype.flash=function(){var e=this;if(!this.isActive)return;return this.reset(),this.pane.addClass("flashed"),setTimeout(function(){e.pane.removeClass("flashed")},this.options.flashDelay),this},a}(),e.fn.nanoScroller=function(t){return this.each(function(){var n,r;(r=this.nanoscroller)||(n=e.extend({},S,t),this.nanoscroller=r=new d(this,n));if(t&&typeof t=="object"){e.extend(r.options,t);if(t.scrollBottom)return r.scrollBottom(t.scrollBottom);if(t.scrollTop)return r.scrollTop(t.scrollTop);if(t.scrollTo)return r.scrollTo(t.scrollTo);if(t.scroll==="bottom")return r.scrollBottom(0);if(t.scroll==="top")return r.scrollTop(0);if(t.scroll&&t.scroll instanceof e)return r.scrollTo(t.scroll);if(t.stop)return r.stop();if(t.flash)return r.flash()}return r.reset()})}})(jQuery,window,document);
\ No newline at end of file
diff --git a/ajax/libs/jquery.nanoscroller/0.7.3/css/nanoscroller.css b/ajax/libs/jquery.nanoscroller/0.7.3/css/nanoscroller.css
new file mode 100644
index 000000000..b0b799962
--- /dev/null
+++ b/ajax/libs/jquery.nanoscroller/0.7.3/css/nanoscroller.css
@@ -0,0 +1,55 @@
+/** initial setup **/
+.nano {
+ position : relative;
+ width : 100%;
+ height : 100%;
+ overflow : hidden;
+}
+.nano .content {
+ position : absolute;
+ overflow : scroll;
+ overflow-x : hidden;
+ top : 0;
+ right : 0;
+ bottom : 0;
+ left : 0;
+}
+.nano .content:focus {
+ outline: thin dotted;
+}
+.nano .content::-webkit-scrollbar {
+ visibility: hidden;
+}
+.has-scrollbar .content::-webkit-scrollbar {
+ visibility: visible;
+}
+.nano > .pane {
+ background : rgba(0,0,0,.25);
+ position : absolute;
+ width : 10px;
+ right : 0;
+ top : 0;
+ bottom : 0;
+ visibility : hidden\9; /* Target only IE7 and IE8 with this hack */
+ opacity : .01;
+ -webkit-transition : .2s;
+ -moz-transition : .2s;
+ -o-transition : .2s;
+ transition : .2s;
+ -moz-border-radius : 5px;
+ -webkit-border-radius : 5px;
+ border-radius : 5px;
+}
+.nano > .pane > .slider {
+ background: #444;
+ background: rgba(0,0,0,.5);
+ position : relative;
+ margin : 0 1px;
+ -moz-border-radius : 3px;
+ -webkit-border-radius : 3px;
+ border-radius : 3px;
+}
+.nano:hover > .pane, .pane.active, .pane.flashed {
+ visibility : visible\9; /* Target only IE7 and IE8 with this hack */
+ opacity : 0.99;
+}
diff --git a/ajax/libs/jquery.nanoscroller/0.7.3/css/nanoscroller.min.css b/ajax/libs/jquery.nanoscroller/0.7.3/css/nanoscroller.min.css
new file mode 100644
index 000000000..31590a8c5
--- /dev/null
+++ b/ajax/libs/jquery.nanoscroller/0.7.3/css/nanoscroller.min.css
@@ -0,0 +1 @@
+.nano{position:relative;width:100%;height:100%;overflow:hidden}.nano .content{position:absolute;overflow:scroll;overflow-x:hidden;top:0;right:0;bottom:0;left:0}.nano .content:focus{outline:dotted thin}.nano .content::-webkit-scrollbar{visibility:hidden}.has-scrollbar .content::-webkit-scrollbar{visibility:visible}.nano>.pane{background:rgba(0,0,0,.25);position:absolute;width:10px;right:0;top:0;bottom:0;opacity:.01;-webkit-transition:.2s;-moz-transition:.2s;-o-transition:.2s;transition:.2s;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.nano>.pane>.slider{background:#444;background:rgba(0,0,0,.5);position:relative;margin:0 1px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.nano:hover>.pane,.pane.active,.pane.flashed{opacity:.99}
\ No newline at end of file
diff --git a/ajax/libs/jquery.nanoscroller/0.7.3/javascripts/jquery.nanoscroller.js b/ajax/libs/jquery.nanoscroller/0.7.3/javascripts/jquery.nanoscroller.js
new file mode 100644
index 000000000..b022f3a06
--- /dev/null
+++ b/ajax/libs/jquery.nanoscroller/0.7.3/javascripts/jquery.nanoscroller.js
@@ -0,0 +1,823 @@
+/*! nanoScrollerJS - v0.7.3 - 2013
+* http://jamesflorentino.github.com/nanoScrollerJS/
+* Copyright (c) 2013 James Florentino; Licensed MIT */
+(function($, window, document) {
+ "use strict";
+ var BROWSER_IS_IE7, BROWSER_SCROLLBAR_WIDTH, DOMSCROLL, DOWN, DRAG, KEYDOWN, KEYUP, MOUSEDOWN, MOUSEMOVE, MOUSEUP, MOUSEWHEEL, NanoScroll, PANEDOWN, RESIZE, SCROLL, SCROLLBAR, TOUCHMOVE, UP, WHEEL, defaults, getBrowserScrollbarWidth;
+
+ defaults = {
+ /**
+ a classname for the pane element.
+ @property paneClass
+ @type String
+ @default 'pane'
+ */
+
+ paneClass: 'pane',
+ /**
+ a classname for the slider element.
+ @property sliderClass
+ @type String
+ @default 'slider'
+ */
+
+ sliderClass: 'slider',
+ /**
+ a classname for the content element.
+ @property contentClass
+ @type String
+ @default 'content'
+ */
+
+ contentClass: 'content',
+ /**
+ a setting to enable native scrolling in iOS devices.
+ @property iOSNativeScrolling
+ @type Boolean
+ @default false
+ */
+
+ iOSNativeScrolling: false,
+ /**
+ a setting to prevent the rest of the page being
+ scrolled when user scrolls the `.content` element.
+ @property preventPageScrolling
+ @type Boolean
+ @default false
+ */
+
+ preventPageScrolling: false,
+ /**
+ a setting to disable binding to the resize event.
+ @property disableResize
+ @type Boolean
+ @default false
+ */
+
+ disableResize: false,
+ /**
+ a setting to make the scrollbar always visible.
+ @property alwaysVisible
+ @type Boolean
+ @default false
+ */
+
+ alwaysVisible: false,
+ /**
+ a default timeout for the `flash()` method.
+ @property flashDelay
+ @type Number
+ @default 1500
+ */
+
+ flashDelay: 1500,
+ /**
+ a minimum height for the `.slider` element.
+ @property sliderMinHeight
+ @type Number
+ @default 20
+ */
+
+ sliderMinHeight: 20,
+ /**
+ a maximum height for the `.slider` element.
+ @property sliderMaxHeight
+ @type Number
+ @default null
+ */
+
+ sliderMaxHeight: null,
+ /**
+ an alternate document context.
+ @property documentContext
+ @type Document
+ @default null
+ */
+
+ documentContext: null,
+ /**
+ an alternate window context.
+ @property windowContext
+ @type Window
+ @default null
+ */
+
+ windowContext: null
+ };
+ /**
+ @property SCROLLBAR
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ SCROLLBAR = 'scrollbar';
+ /**
+ @property SCROLL
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ SCROLL = 'scroll';
+ /**
+ @property MOUSEDOWN
+ @type String
+ @final
+ @private
+ */
+
+ MOUSEDOWN = 'mousedown';
+ /**
+ @property MOUSEMOVE
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ MOUSEMOVE = 'mousemove';
+ /**
+ @property MOUSEWHEEL
+ @type String
+ @final
+ @private
+ */
+
+ MOUSEWHEEL = 'mousewheel';
+ /**
+ @property MOUSEUP
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ MOUSEUP = 'mouseup';
+ /**
+ @property RESIZE
+ @type String
+ @final
+ @private
+ */
+
+ RESIZE = 'resize';
+ /**
+ @property DRAG
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ DRAG = 'drag';
+ /**
+ @property UP
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ UP = 'up';
+ /**
+ @property PANEDOWN
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ PANEDOWN = 'panedown';
+ /**
+ @property DOMSCROLL
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ DOMSCROLL = 'DOMMouseScroll';
+ /**
+ @property DOWN
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ DOWN = 'down';
+ /**
+ @property WHEEL
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ WHEEL = 'wheel';
+ /**
+ @property KEYDOWN
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ KEYDOWN = 'keydown';
+ /**
+ @property KEYUP
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ KEYUP = 'keyup';
+ /**
+ @property TOUCHMOVE
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ TOUCHMOVE = 'touchmove';
+ /**
+ @property BROWSER_IS_IE7
+ @type Boolean
+ @static
+ @final
+ @private
+ */
+
+ BROWSER_IS_IE7 = window.navigator.appName === 'Microsoft Internet Explorer' && /msie 7./i.test(window.navigator.appVersion) && window.ActiveXObject;
+ /**
+ @property BROWSER_SCROLLBAR_WIDTH
+ @type Number
+ @static
+ @default null
+ @private
+ */
+
+ BROWSER_SCROLLBAR_WIDTH = null;
+ /**
+ Returns browser's native scrollbar width
+ @method getBrowserScrollbarWidth
+ @return {Number} the scrollbar width in pixels
+ @static
+ @private
+ */
+
+ getBrowserScrollbarWidth = function() {
+ var outer, outerStyle, scrollbarWidth;
+
+ outer = document.createElement('div');
+ outerStyle = outer.style;
+ outerStyle.position = 'absolute';
+ outerStyle.width = '100px';
+ outerStyle.height = '100px';
+ outerStyle.overflow = SCROLL;
+ outerStyle.top = '-9999px';
+ document.body.appendChild(outer);
+ scrollbarWidth = outer.offsetWidth - outer.clientWidth;
+ document.body.removeChild(outer);
+ return scrollbarWidth;
+ };
+ /**
+ @class NanoScroll
+ @param element {HTMLElement|Node} the main element
+ @param options {Object} nanoScroller's options
+ @constructor
+ */
+
+ NanoScroll = (function() {
+ function NanoScroll(el, options) {
+ this.el = el;
+ this.options = options;
+ BROWSER_SCROLLBAR_WIDTH || (BROWSER_SCROLLBAR_WIDTH = getBrowserScrollbarWidth());
+ this.$el = $(this.el);
+ this.doc = $(this.options.documentContext || document);
+ this.win = $(this.options.windowContext || window);
+ this.$content = this.$el.children("." + options.contentClass);
+ this.$content.attr('tabindex', 0);
+ this.content = this.$content[0];
+ if (this.options.iOSNativeScrolling && (this.el.style.WebkitOverflowScrolling != null)) {
+ this.nativeScrolling();
+ } else {
+ this.generate();
+ }
+ this.createEvents();
+ this.addEvents();
+ this.reset();
+ }
+
+ /**
+ Prevents the rest of the page being scrolled
+ when user scrolls the `.content` element.
+ @method preventScrolling
+ @param event {Event}
+ @param direction {String} Scroll direction (up or down)
+ @private
+ */
+
+
+ NanoScroll.prototype.preventScrolling = function(e, direction) {
+ if (!this.isActive) {
+ return;
+ }
+ if (e.type === DOMSCROLL) {
+ if (direction === DOWN && e.originalEvent.detail > 0 || direction === UP && e.originalEvent.detail < 0) {
+ e.preventDefault();
+ }
+ } else if (e.type === MOUSEWHEEL) {
+ if (!e.originalEvent || !e.originalEvent.wheelDelta) {
+ return;
+ }
+ if (direction === DOWN && e.originalEvent.wheelDelta < 0 || direction === UP && e.originalEvent.wheelDelta > 0) {
+ e.preventDefault();
+ }
+ }
+ };
+
+ /**
+ Enable iOS native scrolling
+ */
+
+
+ NanoScroll.prototype.nativeScrolling = function() {
+ this.$content.css({
+ WebkitOverflowScrolling: 'touch'
+ });
+ this.iOSNativeScrolling = true;
+ this.isActive = true;
+ };
+
+ /**
+ Updates those nanoScroller properties that
+ are related to current scrollbar position.
+ @method updateScrollValues
+ @private
+ */
+
+
+ NanoScroll.prototype.updateScrollValues = function() {
+ var content;
+
+ content = this.content;
+ this.maxScrollTop = content.scrollHeight - content.clientHeight;
+ this.prevScrollTop = this.contentScrollTop || 0;
+ this.contentScrollTop = content.scrollTop;
+ if (!this.iOSNativeScrolling) {
+ this.maxSliderTop = this.paneHeight - this.sliderHeight;
+ this.sliderTop = this.contentScrollTop * this.maxSliderTop / this.maxScrollTop;
+ }
+ };
+
+ /**
+ Creates event related methods
+ @method createEvents
+ @private
+ */
+
+
+ NanoScroll.prototype.createEvents = function() {
+ var _this = this;
+
+ this.events = {
+ down: function(e) {
+ _this.isBeingDragged = true;
+ _this.offsetY = e.pageY - _this.slider.offset().top;
+ _this.pane.addClass('active');
+ _this.doc.bind(MOUSEMOVE, _this.events[DRAG]).bind(MOUSEUP, _this.events[UP]);
+ return false;
+ },
+ drag: function(e) {
+ _this.sliderY = e.pageY - _this.$el.offset().top - _this.offsetY;
+ _this.scroll();
+ _this.updateScrollValues();
+ if (_this.contentScrollTop >= _this.maxScrollTop && _this.prevScrollTop !== _this.maxScrollTop) {
+ _this.$el.trigger('scrollend');
+ } else if (_this.contentScrollTop === 0 && _this.prevScrollTop !== 0) {
+ _this.$el.trigger('scrolltop');
+ }
+ return false;
+ },
+ up: function(e) {
+ _this.isBeingDragged = false;
+ _this.pane.removeClass('active');
+ _this.doc.unbind(MOUSEMOVE, _this.events[DRAG]).unbind(MOUSEUP, _this.events[UP]);
+ return false;
+ },
+ resize: function(e) {
+ _this.reset();
+ },
+ panedown: function(e) {
+ _this.sliderY = (e.offsetY || e.originalEvent.layerY) - (_this.sliderHeight * 0.5);
+ _this.scroll();
+ _this.events.down(e);
+ return false;
+ },
+ scroll: function(e) {
+ if (_this.isBeingDragged) {
+ return;
+ }
+ _this.updateScrollValues();
+ if (!_this.iOSNativeScrolling) {
+ _this.sliderY = _this.sliderTop;
+ _this.slider.css({
+ top: _this.sliderTop
+ });
+ }
+ if (e == null) {
+ return;
+ }
+ if (_this.contentScrollTop >= _this.maxScrollTop) {
+ if (_this.options.preventPageScrolling) {
+ _this.preventScrolling(e, DOWN);
+ }
+ if (_this.prevScrollTop !== _this.maxScrollTop) {
+ _this.$el.trigger('scrollend');
+ }
+ } else if (_this.contentScrollTop === 0) {
+ if (_this.options.preventPageScrolling) {
+ _this.preventScrolling(e, UP);
+ }
+ if (_this.prevScrollTop !== 0) {
+ _this.$el.trigger('scrolltop');
+ }
+ }
+ },
+ wheel: function(e) {
+ var delta;
+
+ if (e == null) {
+ return;
+ }
+ delta = e.delta || e.wheelDelta || (e.originalEvent && e.originalEvent.wheelDelta) || -e.detail || (e.originalEvent && -e.originalEvent.detail);
+ if (delta) {
+ _this.sliderY += -delta / 3;
+ }
+ _this.scroll();
+ return false;
+ }
+ };
+ };
+
+ /**
+ Adds event listeners with jQuery.
+ @method addEvents
+ @private
+ */
+
+
+ NanoScroll.prototype.addEvents = function() {
+ var events;
+
+ this.removeEvents();
+ events = this.events;
+ if (!this.options.disableResize) {
+ this.win.bind(RESIZE, events[RESIZE]);
+ }
+ if (!this.iOSNativeScrolling) {
+ this.slider.bind(MOUSEDOWN, events[DOWN]);
+ this.pane.bind(MOUSEDOWN, events[PANEDOWN]).bind("" + MOUSEWHEEL + " " + DOMSCROLL, events[WHEEL]);
+ }
+ this.$content.bind("" + SCROLL + " " + MOUSEWHEEL + " " + DOMSCROLL + " " + TOUCHMOVE, events[SCROLL]);
+ };
+
+ /**
+ Removes event listeners with jQuery.
+ @method removeEvents
+ @private
+ */
+
+
+ NanoScroll.prototype.removeEvents = function() {
+ var events;
+
+ events = this.events;
+ this.win.unbind(RESIZE, events[RESIZE]);
+ if (!this.iOSNativeScrolling) {
+ this.slider.unbind();
+ this.pane.unbind();
+ }
+ this.$content.unbind("" + SCROLL + " " + MOUSEWHEEL + " " + DOMSCROLL + " " + TOUCHMOVE, events[SCROLL]);
+ };
+
+ /**
+ Generates nanoScroller's scrollbar and elements for it.
+ @method generate
+ @chainable
+ @private
+ */
+
+
+ NanoScroll.prototype.generate = function() {
+ var contentClass, cssRule, options, paneClass, sliderClass;
+
+ options = this.options;
+ paneClass = options.paneClass, sliderClass = options.sliderClass, contentClass = options.contentClass;
+ if (!this.$el.find("" + paneClass).length && !this.$el.find("" + sliderClass).length) {
+ this.$el.append("");
+ }
+ this.pane = this.$el.children("." + paneClass);
+ this.slider = this.pane.find("." + sliderClass);
+ if (BROWSER_SCROLLBAR_WIDTH) {
+ cssRule = {
+ right: -BROWSER_SCROLLBAR_WIDTH
+ };
+ this.$el.addClass('has-scrollbar');
+ }
+ if (cssRule != null) {
+ this.$content.css(cssRule);
+ }
+ return this;
+ };
+
+ /**
+ @method restore
+ @private
+ */
+
+
+ NanoScroll.prototype.restore = function() {
+ this.stopped = false;
+ this.pane.show();
+ this.addEvents();
+ };
+
+ /**
+ Resets nanoScroller's scrollbar.
+ @method reset
+ @chainable
+ @example
+ $(".nano").nanoScroller();
+ */
+
+
+ NanoScroll.prototype.reset = function() {
+ var content, contentHeight, contentStyle, contentStyleOverflowY, paneBottom, paneHeight, paneOuterHeight, paneTop, parentMaxHeight, sliderHeight;
+
+ if (this.iOSNativeScrolling) {
+ this.contentHeight = this.content.scrollHeight;
+ return;
+ }
+ if (!this.$el.find("." + this.options.paneClass).length) {
+ this.generate().stop();
+ }
+ if (this.stopped) {
+ this.restore();
+ }
+ content = this.content;
+ contentStyle = content.style;
+ contentStyleOverflowY = contentStyle.overflowY;
+ if (BROWSER_IS_IE7) {
+ this.$content.css({
+ height: this.$content.height()
+ });
+ }
+ contentHeight = content.scrollHeight + BROWSER_SCROLLBAR_WIDTH;
+ parentMaxHeight = parseInt(this.$el.css("max-height"), 10);
+ if (parentMaxHeight > 0) {
+ this.$el.height("");
+ this.$el.height(content.scrollHeight > parentMaxHeight ? parentMaxHeight : content.scrollHeight);
+ }
+ paneHeight = this.pane.outerHeight();
+ paneTop = parseInt(this.pane.css('top'), 10);
+ paneBottom = parseInt(this.pane.css('bottom'), 10);
+ paneOuterHeight = paneHeight + paneTop + paneBottom;
+ sliderHeight = Math.round(paneOuterHeight / contentHeight * paneOuterHeight);
+ if (sliderHeight < this.options.sliderMinHeight) {
+ sliderHeight = this.options.sliderMinHeight;
+ } else if ((this.options.sliderMaxHeight != null) && sliderHeight > this.options.sliderMaxHeight) {
+ sliderHeight = this.options.sliderMaxHeight;
+ }
+ if (contentStyleOverflowY === SCROLL && contentStyle.overflowX !== SCROLL) {
+ sliderHeight += BROWSER_SCROLLBAR_WIDTH;
+ }
+ this.maxSliderTop = paneOuterHeight - sliderHeight;
+ this.contentHeight = contentHeight;
+ this.paneHeight = paneHeight;
+ this.paneOuterHeight = paneOuterHeight;
+ this.sliderHeight = sliderHeight;
+ this.slider.height(sliderHeight);
+ this.events.scroll();
+ this.pane.show();
+ this.isActive = true;
+ if ((content.scrollHeight === content.clientHeight) || (this.pane.outerHeight(true) >= content.scrollHeight && contentStyleOverflowY !== SCROLL)) {
+ this.pane.hide();
+ this.isActive = false;
+ } else if (this.el.clientHeight === content.scrollHeight && contentStyleOverflowY === SCROLL) {
+ this.slider.hide();
+ } else {
+ this.slider.show();
+ }
+ this.pane.css({
+ opacity: (this.options.alwaysVisible ? 1 : ''),
+ visibility: (this.options.alwaysVisible ? 'visible' : '')
+ });
+ return this;
+ };
+
+ /**
+ @method scroll
+ @private
+ @example
+ $(".nano").nanoScroller({ scroll: 'top' });
+ */
+
+
+ NanoScroll.prototype.scroll = function() {
+ if (!this.isActive) {
+ return;
+ }
+ this.sliderY = Math.max(0, this.sliderY);
+ this.sliderY = Math.min(this.maxSliderTop, this.sliderY);
+ this.$content.scrollTop((this.paneHeight - this.contentHeight + BROWSER_SCROLLBAR_WIDTH) * this.sliderY / this.maxSliderTop * -1);
+ if (!this.iOSNativeScrolling) {
+ this.slider.css({
+ top: this.sliderY
+ });
+ }
+ return this;
+ };
+
+ /**
+ Scroll at the bottom with an offset value
+ @method scrollBottom
+ @param offsetY {Number}
+ @chainable
+ @example
+ $(".nano").nanoScroller({ scrollBottom: value });
+ */
+
+
+ NanoScroll.prototype.scrollBottom = function(offsetY) {
+ if (!this.isActive) {
+ return;
+ }
+ this.reset();
+ this.$content.scrollTop(this.contentHeight - this.$content.height() - offsetY).trigger(MOUSEWHEEL);
+ return this;
+ };
+
+ /**
+ Scroll at the top with an offset value
+ @method scrollTop
+ @param offsetY {Number}
+ @chainable
+ @example
+ $(".nano").nanoScroller({ scrollTop: value });
+ */
+
+
+ NanoScroll.prototype.scrollTop = function(offsetY) {
+ if (!this.isActive) {
+ return;
+ }
+ this.reset();
+ this.$content.scrollTop(+offsetY).trigger(MOUSEWHEEL);
+ return this;
+ };
+
+ /**
+ Scroll to an element
+ @method scrollTo
+ @param node {Node} A node to scroll to.
+ @chainable
+ @example
+ $(".nano").nanoScroller({ scrollTo: $('#a_node') });
+ */
+
+
+ NanoScroll.prototype.scrollTo = function(node) {
+ if (!this.isActive) {
+ return;
+ }
+ this.reset();
+ this.scrollTop($(node).get(0).offsetTop);
+ return this;
+ };
+
+ /**
+ To stop the operation.
+ This option will tell the plugin to disable all event bindings and hide the gadget scrollbar from the UI.
+ @method stop
+ @chainable
+ @example
+ $(".nano").nanoScroller({ stop: true });
+ */
+
+
+ NanoScroll.prototype.stop = function() {
+ this.stopped = true;
+ this.removeEvents();
+ this.pane.hide();
+ return this;
+ };
+
+ /**
+ Destroys nanoScroller and restores browser's native scrollbar.
+ @method destroy
+ @chainable
+ @example
+ $(".nano").nanoScroller({ destroy: true });
+ */
+
+
+ NanoScroll.prototype.destroy = function() {
+ if (!this.stopped) {
+ this.stop();
+ }
+ if (this.pane.length) {
+ this.pane.remove();
+ }
+ if (BROWSER_IS_IE7) {
+ this.$content.height('');
+ }
+ this.$content.removeAttr('tabindex');
+ if (this.$el.hasClass('has-scrollbar')) {
+ this.$el.removeClass('has-scrollbar');
+ this.$content.css({
+ right: ''
+ });
+ }
+ return this;
+ };
+
+ /**
+ To flash the scrollbar gadget for an amount of time defined in plugin settings (defaults to 1,5s).
+ Useful if you want to show the user (e.g. on pageload) that there is more content waiting for him.
+ @method flash
+ @chainable
+ @example
+ $(".nano").nanoScroller({ flash: true });
+ */
+
+
+ NanoScroll.prototype.flash = function() {
+ var _this = this;
+
+ if (!this.isActive) {
+ return;
+ }
+ this.reset();
+ this.pane.addClass('flashed');
+ setTimeout(function() {
+ _this.pane.removeClass('flashed');
+ }, this.options.flashDelay);
+ return this;
+ };
+
+ return NanoScroll;
+
+ })();
+ $.fn.nanoScroller = function(settings) {
+ return this.each(function() {
+ var options, scrollbar;
+
+ if (!(scrollbar = this.nanoscroller)) {
+ options = $.extend({}, defaults, settings);
+ this.nanoscroller = scrollbar = new NanoScroll(this, options);
+ }
+ if (settings && typeof settings === "object") {
+ $.extend(scrollbar.options, settings);
+ if (settings.scrollBottom) {
+ return scrollbar.scrollBottom(settings.scrollBottom);
+ }
+ if (settings.scrollTop) {
+ return scrollbar.scrollTop(settings.scrollTop);
+ }
+ if (settings.scrollTo) {
+ return scrollbar.scrollTo(settings.scrollTo);
+ }
+ if (settings.scroll === 'bottom') {
+ return scrollbar.scrollBottom(0);
+ }
+ if (settings.scroll === 'top') {
+ return scrollbar.scrollTop(0);
+ }
+ if (settings.scroll && settings.scroll instanceof $) {
+ return scrollbar.scrollTo(settings.scroll);
+ }
+ if (settings.stop) {
+ return scrollbar.stop();
+ }
+ if (settings.destroy) {
+ return scrollbar.destroy();
+ }
+ if (settings.flash) {
+ return scrollbar.flash();
+ }
+ }
+ return scrollbar.reset();
+ });
+ };
+})(jQuery, window, document);
+
+/*
+//@ sourceMappingURL=jquery.nanoscroller.js.map
+*/
\ No newline at end of file
diff --git a/ajax/libs/jquery.nanoscroller/0.7.3/javascripts/jquery.nanoscroller.js.map b/ajax/libs/jquery.nanoscroller/0.7.3/javascripts/jquery.nanoscroller.js.map
new file mode 100644
index 000000000..975b9fedd
--- /dev/null
+++ b/ajax/libs/jquery.nanoscroller/0.7.3/javascripts/jquery.nanoscroller.js.map
@@ -0,0 +1,10 @@
+{
+ "version": 3,
+ "file": "jquery.nanoscroller.js",
+ "sourceRoot": "../../coffeescripts/",
+ "sources": [
+ "jquery.nanoscroller.coffee"
+ ],
+ "names": [],
+ "mappings": "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"
+}
\ No newline at end of file
diff --git a/ajax/libs/jquery.nanoscroller/0.7.3/javascripts/jquery.nanoscroller.min.js b/ajax/libs/jquery.nanoscroller/0.7.3/javascripts/jquery.nanoscroller.min.js
new file mode 100644
index 000000000..2569c60e4
--- /dev/null
+++ b/ajax/libs/jquery.nanoscroller/0.7.3/javascripts/jquery.nanoscroller.min.js
@@ -0,0 +1,5 @@
+/*! nanoScrollerJS - v0.7.3 - (c) 2013 James Florentino; Licensed MIT */
+!function(a,b,c){"use strict";var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x;w={paneClass:"pane",sliderClass:"slider",contentClass:"content",iOSNativeScrolling:!1,preventPageScrolling:!1,disableResize:!1,alwaysVisible:!1,flashDelay:1500,sliderMinHeight:20,sliderMaxHeight:null,documentContext:null,windowContext:null},s="scrollbar",r="scroll",k="mousedown",l="mousemove",n="mousewheel",m="mouseup",q="resize",h="drag",u="up",p="panedown",f="DOMMouseScroll",g="down",v="wheel",i="keydown",j="keyup",t="touchmove",d="Microsoft Internet Explorer"===b.navigator.appName&&/msie 7./i.test(b.navigator.appVersion)&&b.ActiveXObject,e=null,x=function(){var a,b,d;return a=c.createElement("div"),b=a.style,b.position="absolute",b.width="100px",b.height="100px",b.overflow=r,b.top="-9999px",c.body.appendChild(a),d=a.offsetWidth-a.clientWidth,c.body.removeChild(a),d},o=function(){function i(d,f){this.el=d,this.options=f,e||(e=x()),this.$el=a(this.el),this.doc=a(this.options.documentContext||c),this.win=a(this.options.windowContext||b),this.$content=this.$el.children("."+f.contentClass),this.$content.attr("tabindex",0),this.content=this.$content[0],this.options.iOSNativeScrolling&&null!=this.el.style.WebkitOverflowScrolling?this.nativeScrolling():this.generate(),this.createEvents(),this.addEvents(),this.reset()}return i.prototype.preventScrolling=function(a,b){if(this.isActive)if(a.type===f)(b===g&&a.originalEvent.detail>0||b===u&&a.originalEvent.detail<0)&&a.preventDefault();else if(a.type===n){if(!a.originalEvent||!a.originalEvent.wheelDelta)return;(b===g&&a.originalEvent.wheelDelta<0||b===u&&a.originalEvent.wheelDelta>0)&&a.preventDefault()}},i.prototype.nativeScrolling=function(){this.$content.css({WebkitOverflowScrolling:"touch"}),this.iOSNativeScrolling=!0,this.isActive=!0},i.prototype.updateScrollValues=function(){var a;a=this.content,this.maxScrollTop=a.scrollHeight-a.clientHeight,this.prevScrollTop=this.contentScrollTop||0,this.contentScrollTop=a.scrollTop,this.iOSNativeScrolling||(this.maxSliderTop=this.paneHeight-this.sliderHeight,this.sliderTop=this.contentScrollTop*this.maxSliderTop/this.maxScrollTop)},i.prototype.createEvents=function(){var a=this;this.events={down:function(b){return a.isBeingDragged=!0,a.offsetY=b.pageY-a.slider.offset().top,a.pane.addClass("active"),a.doc.bind(l,a.events[h]).bind(m,a.events[u]),!1},drag:function(b){return a.sliderY=b.pageY-a.$el.offset().top-a.offsetY,a.scroll(),a.updateScrollValues(),a.contentScrollTop>=a.maxScrollTop&&a.prevScrollTop!==a.maxScrollTop?a.$el.trigger("scrollend"):0===a.contentScrollTop&&0!==a.prevScrollTop&&a.$el.trigger("scrolltop"),!1},up:function(){return a.isBeingDragged=!1,a.pane.removeClass("active"),a.doc.unbind(l,a.events[h]).unbind(m,a.events[u]),!1},resize:function(){a.reset()},panedown:function(b){return a.sliderY=(b.offsetY||b.originalEvent.layerY)-.5*a.sliderHeight,a.scroll(),a.events.down(b),!1},scroll:function(b){a.isBeingDragged||(a.updateScrollValues(),a.iOSNativeScrolling||(a.sliderY=a.sliderTop,a.slider.css({top:a.sliderTop})),null!=b&&(a.contentScrollTop>=a.maxScrollTop?(a.options.preventPageScrolling&&a.preventScrolling(b,g),a.prevScrollTop!==a.maxScrollTop&&a.$el.trigger("scrollend")):0===a.contentScrollTop&&(a.options.preventPageScrolling&&a.preventScrolling(b,u),0!==a.prevScrollTop&&a.$el.trigger("scrolltop"))))},wheel:function(b){var c;if(null!=b)return c=b.delta||b.wheelDelta||b.originalEvent&&b.originalEvent.wheelDelta||-b.detail||b.originalEvent&&-b.originalEvent.detail,c&&(a.sliderY+=-c/3),a.scroll(),!1}}},i.prototype.addEvents=function(){var a;this.removeEvents(),a=this.events,this.options.disableResize||this.win.bind(q,a[q]),this.iOSNativeScrolling||(this.slider.bind(k,a[g]),this.pane.bind(k,a[p]).bind(""+n+" "+f,a[v])),this.$content.bind(""+r+" "+n+" "+f+" "+t,a[r])},i.prototype.removeEvents=function(){var a;a=this.events,this.win.unbind(q,a[q]),this.iOSNativeScrolling||(this.slider.unbind(),this.pane.unbind()),this.$content.unbind(""+r+" "+n+" "+f+" "+t,a[r])},i.prototype.generate=function(){var a,b,c,d,f;return c=this.options,d=c.paneClass,f=c.sliderClass,a=c.contentClass,this.$el.find(""+d).length||this.$el.find(""+f).length||this.$el.append(''),this.pane=this.$el.children("."+d),this.slider=this.pane.find("."+f),e&&(b={right:-e},this.$el.addClass("has-scrollbar")),null!=b&&this.$content.css(b),this},i.prototype.restore=function(){this.stopped=!1,this.pane.show(),this.addEvents()},i.prototype.reset=function(){var a,b,c,f,g,h,i,j,k,l;return this.iOSNativeScrolling?(this.contentHeight=this.content.scrollHeight,void 0):(this.$el.find("."+this.options.paneClass).length||this.generate().stop(),this.stopped&&this.restore(),a=this.content,c=a.style,f=c.overflowY,d&&this.$content.css({height:this.$content.height()}),b=a.scrollHeight+e,k=parseInt(this.$el.css("max-height"),10),k>0&&(this.$el.height(""),this.$el.height(a.scrollHeight>k?k:a.scrollHeight)),h=this.pane.outerHeight(),j=parseInt(this.pane.css("top"),10),g=parseInt(this.pane.css("bottom"),10),i=h+j+g,l=Math.round(i/b*i),lthis.options.sliderMaxHeight&&(l=this.options.sliderMaxHeight),f===r&&c.overflowX!==r&&(l+=e),this.maxSliderTop=i-l,this.contentHeight=b,this.paneHeight=h,this.paneOuterHeight=i,this.sliderHeight=l,this.slider.height(l),this.events.scroll(),this.pane.show(),this.isActive=!0,a.scrollHeight===a.clientHeight||this.pane.outerHeight(!0)>=a.scrollHeight&&f!==r?(this.pane.hide(),this.isActive=!1):this.el.clientHeight===a.scrollHeight&&f===r?this.slider.hide():this.slider.show(),this.pane.css({opacity:this.options.alwaysVisible?1:"",visibility:this.options.alwaysVisible?"visible":""}),this)},i.prototype.scroll=function(){return this.isActive?(this.sliderY=Math.max(0,this.sliderY),this.sliderY=Math.min(this.maxSliderTop,this.sliderY),this.$content.scrollTop(-1*((this.paneHeight-this.contentHeight+e)*this.sliderY/this.maxSliderTop)),this.iOSNativeScrolling||this.slider.css({top:this.sliderY}),this):void 0},i.prototype.scrollBottom=function(a){return this.isActive?(this.reset(),this.$content.scrollTop(this.contentHeight-this.$content.height()-a).trigger(n),this):void 0},i.prototype.scrollTop=function(a){return this.isActive?(this.reset(),this.$content.scrollTop(+a).trigger(n),this):void 0},i.prototype.scrollTo=function(b){return this.isActive?(this.reset(),this.scrollTop(a(b).get(0).offsetTop),this):void 0},i.prototype.stop=function(){return this.stopped=!0,this.removeEvents(),this.pane.hide(),this},i.prototype.destroy=function(){return this.stopped||this.stop(),this.pane.length&&this.pane.remove(),d&&this.$content.height(""),this.$content.removeAttr("tabindex"),this.$el.hasClass("has-scrollbar")&&(this.$el.removeClass("has-scrollbar"),this.$content.css({right:""})),this},i.prototype.flash=function(){var a=this;if(this.isActive)return this.reset(),this.pane.addClass("flashed"),setTimeout(function(){a.pane.removeClass("flashed")},this.options.flashDelay),this},i}(),a.fn.nanoScroller=function(b){return this.each(function(){var c,d;if((d=this.nanoscroller)||(c=a.extend({},w,b),this.nanoscroller=d=new o(this,c)),b&&"object"==typeof b){if(a.extend(d.options,b),b.scrollBottom)return d.scrollBottom(b.scrollBottom);if(b.scrollTop)return d.scrollTop(b.scrollTop);if(b.scrollTo)return d.scrollTo(b.scrollTo);if("bottom"===b.scroll)return d.scrollBottom(0);if("top"===b.scroll)return d.scrollTop(0);if(b.scroll&&b.scroll instanceof a)return d.scrollTo(b.scroll);if(b.stop)return d.stop();if(b.destroy)return d.destroy();if(b.flash)return d.flash()}return d.reset()})}}(jQuery,window,document);
+/*
+//@ sourceMappingURL=jquery.nanoscroller.min.js.map
+*/
\ No newline at end of file
diff --git a/ajax/libs/jquery.nanoscroller/0.7.3/javascripts/jquery.nanoscroller.min.js.map b/ajax/libs/jquery.nanoscroller/0.7.3/javascripts/jquery.nanoscroller.min.js.map
new file mode 100644
index 000000000..1e6425465
--- /dev/null
+++ b/ajax/libs/jquery.nanoscroller/0.7.3/javascripts/jquery.nanoscroller.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"bin/javascripts/jquery.nanoscroller.min.js","sources":["../../coffeescripts/jquery.nanoscroller.coffee"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/ajax/libs/jquery.nanoscroller/0.7.5/css/nanoscroller.css b/ajax/libs/jquery.nanoscroller/0.7.5/css/nanoscroller.css
new file mode 100644
index 000000000..b0b799962
--- /dev/null
+++ b/ajax/libs/jquery.nanoscroller/0.7.5/css/nanoscroller.css
@@ -0,0 +1,55 @@
+/** initial setup **/
+.nano {
+ position : relative;
+ width : 100%;
+ height : 100%;
+ overflow : hidden;
+}
+.nano .content {
+ position : absolute;
+ overflow : scroll;
+ overflow-x : hidden;
+ top : 0;
+ right : 0;
+ bottom : 0;
+ left : 0;
+}
+.nano .content:focus {
+ outline: thin dotted;
+}
+.nano .content::-webkit-scrollbar {
+ visibility: hidden;
+}
+.has-scrollbar .content::-webkit-scrollbar {
+ visibility: visible;
+}
+.nano > .pane {
+ background : rgba(0,0,0,.25);
+ position : absolute;
+ width : 10px;
+ right : 0;
+ top : 0;
+ bottom : 0;
+ visibility : hidden\9; /* Target only IE7 and IE8 with this hack */
+ opacity : .01;
+ -webkit-transition : .2s;
+ -moz-transition : .2s;
+ -o-transition : .2s;
+ transition : .2s;
+ -moz-border-radius : 5px;
+ -webkit-border-radius : 5px;
+ border-radius : 5px;
+}
+.nano > .pane > .slider {
+ background: #444;
+ background: rgba(0,0,0,.5);
+ position : relative;
+ margin : 0 1px;
+ -moz-border-radius : 3px;
+ -webkit-border-radius : 3px;
+ border-radius : 3px;
+}
+.nano:hover > .pane, .pane.active, .pane.flashed {
+ visibility : visible\9; /* Target only IE7 and IE8 with this hack */
+ opacity : 0.99;
+}
diff --git a/ajax/libs/jquery.nanoscroller/0.7.5/css/nanoscroller.min.css b/ajax/libs/jquery.nanoscroller/0.7.5/css/nanoscroller.min.css
new file mode 100644
index 000000000..31590a8c5
--- /dev/null
+++ b/ajax/libs/jquery.nanoscroller/0.7.5/css/nanoscroller.min.css
@@ -0,0 +1 @@
+.nano{position:relative;width:100%;height:100%;overflow:hidden}.nano .content{position:absolute;overflow:scroll;overflow-x:hidden;top:0;right:0;bottom:0;left:0}.nano .content:focus{outline:dotted thin}.nano .content::-webkit-scrollbar{visibility:hidden}.has-scrollbar .content::-webkit-scrollbar{visibility:visible}.nano>.pane{background:rgba(0,0,0,.25);position:absolute;width:10px;right:0;top:0;bottom:0;opacity:.01;-webkit-transition:.2s;-moz-transition:.2s;-o-transition:.2s;transition:.2s;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.nano>.pane>.slider{background:#444;background:rgba(0,0,0,.5);position:relative;margin:0 1px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.nano:hover>.pane,.pane.active,.pane.flashed{opacity:.99}
\ No newline at end of file
diff --git a/ajax/libs/jquery.nanoscroller/0.7.5/javascripts/jquery.nanoscroller.js b/ajax/libs/jquery.nanoscroller/0.7.5/javascripts/jquery.nanoscroller.js
new file mode 100644
index 000000000..ce7acd50b
--- /dev/null
+++ b/ajax/libs/jquery.nanoscroller/0.7.5/javascripts/jquery.nanoscroller.js
@@ -0,0 +1,893 @@
+/*! nanoScrollerJS - v0.7.5 - 2013
+* http://jamesflorentino.github.com/nanoScrollerJS/
+* Copyright (c) 2013 James Florentino; Licensed MIT */
+(function($, window, document) {
+ "use strict";
+ var BROWSER_IS_IE7, BROWSER_SCROLLBAR_WIDTH, DOMSCROLL, DOWN, DRAG, KEYDOWN, KEYUP, MOUSEDOWN, MOUSEMOVE, MOUSEUP, MOUSEWHEEL, NanoScroll, PANEDOWN, RESIZE, SCROLL, SCROLLBAR, TOUCHMOVE, UP, WHEEL, cAF, defaults, getBrowserScrollbarWidth, hasTransform, isFFWithBuggyScrollbar, rAF, transform, _elementStyle, _prefixStyle, _vendor;
+ defaults = {
+ /**
+ a classname for the pane element.
+ @property paneClass
+ @type String
+ @default 'pane'
+ */
+
+ paneClass: 'pane',
+ /**
+ a classname for the slider element.
+ @property sliderClass
+ @type String
+ @default 'slider'
+ */
+
+ sliderClass: 'slider',
+ /**
+ a classname for the content element.
+ @property contentClass
+ @type String
+ @default 'content'
+ */
+
+ contentClass: 'content',
+ /**
+ a setting to enable native scrolling in iOS devices.
+ @property iOSNativeScrolling
+ @type Boolean
+ @default false
+ */
+
+ iOSNativeScrolling: false,
+ /**
+ a setting to prevent the rest of the page being
+ scrolled when user scrolls the `.content` element.
+ @property preventPageScrolling
+ @type Boolean
+ @default false
+ */
+
+ preventPageScrolling: false,
+ /**
+ a setting to disable binding to the resize event.
+ @property disableResize
+ @type Boolean
+ @default false
+ */
+
+ disableResize: false,
+ /**
+ a setting to make the scrollbar always visible.
+ @property alwaysVisible
+ @type Boolean
+ @default false
+ */
+
+ alwaysVisible: false,
+ /**
+ a default timeout for the `flash()` method.
+ @property flashDelay
+ @type Number
+ @default 1500
+ */
+
+ flashDelay: 1500,
+ /**
+ a minimum height for the `.slider` element.
+ @property sliderMinHeight
+ @type Number
+ @default 20
+ */
+
+ sliderMinHeight: 20,
+ /**
+ a maximum height for the `.slider` element.
+ @property sliderMaxHeight
+ @type Number
+ @default null
+ */
+
+ sliderMaxHeight: null,
+ /**
+ an alternate document context.
+ @property documentContext
+ @type Document
+ @default null
+ */
+
+ documentContext: null,
+ /**
+ an alternate window context.
+ @property windowContext
+ @type Window
+ @default null
+ */
+
+ windowContext: null
+ };
+ /**
+ @property SCROLLBAR
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ SCROLLBAR = 'scrollbar';
+ /**
+ @property SCROLL
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ SCROLL = 'scroll';
+ /**
+ @property MOUSEDOWN
+ @type String
+ @final
+ @private
+ */
+
+ MOUSEDOWN = 'mousedown';
+ /**
+ @property MOUSEMOVE
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ MOUSEMOVE = 'mousemove';
+ /**
+ @property MOUSEWHEEL
+ @type String
+ @final
+ @private
+ */
+
+ MOUSEWHEEL = 'mousewheel';
+ /**
+ @property MOUSEUP
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ MOUSEUP = 'mouseup';
+ /**
+ @property RESIZE
+ @type String
+ @final
+ @private
+ */
+
+ RESIZE = 'resize';
+ /**
+ @property DRAG
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ DRAG = 'drag';
+ /**
+ @property UP
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ UP = 'up';
+ /**
+ @property PANEDOWN
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ PANEDOWN = 'panedown';
+ /**
+ @property DOMSCROLL
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ DOMSCROLL = 'DOMMouseScroll';
+ /**
+ @property DOWN
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ DOWN = 'down';
+ /**
+ @property WHEEL
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ WHEEL = 'wheel';
+ /**
+ @property KEYDOWN
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ KEYDOWN = 'keydown';
+ /**
+ @property KEYUP
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ KEYUP = 'keyup';
+ /**
+ @property TOUCHMOVE
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ TOUCHMOVE = 'touchmove';
+ /**
+ @property BROWSER_IS_IE7
+ @type Boolean
+ @static
+ @final
+ @private
+ */
+
+ BROWSER_IS_IE7 = window.navigator.appName === 'Microsoft Internet Explorer' && /msie 7./i.test(window.navigator.appVersion) && window.ActiveXObject;
+ /**
+ @property BROWSER_SCROLLBAR_WIDTH
+ @type Number
+ @static
+ @default null
+ @private
+ */
+
+ BROWSER_SCROLLBAR_WIDTH = null;
+ rAF = window.requestAnimationFrame;
+ cAF = window.cancelAnimationFrame;
+ _elementStyle = document.createElement('div').style;
+ _vendor = (function() {
+ var i, transform, vendor, vendors, _i, _len;
+ vendors = ['t', 'webkitT', 'MozT', 'msT', 'OT'];
+ for (i = _i = 0, _len = vendors.length; _i < _len; i = ++_i) {
+ vendor = vendors[i];
+ transform = vendors[i] + 'ransform';
+ if (transform in _elementStyle) {
+ return vendors[i].substr(0, vendors[i].length - 1);
+ }
+ }
+ return false;
+ })();
+ _prefixStyle = function(style) {
+ if (_vendor === false) {
+ return false;
+ }
+ if (_vendor === '') {
+ return style;
+ }
+ return _vendor + style.charAt(0).toUpperCase() + style.substr(1);
+ };
+ transform = _prefixStyle('transform');
+ hasTransform = transform !== false;
+ /**
+ Returns browser's native scrollbar width
+ @method getBrowserScrollbarWidth
+ @return {Number} the scrollbar width in pixels
+ @static
+ @private
+ */
+
+ getBrowserScrollbarWidth = function() {
+ var outer, outerStyle, scrollbarWidth;
+ outer = document.createElement('div');
+ outerStyle = outer.style;
+ outerStyle.position = 'absolute';
+ outerStyle.width = '100px';
+ outerStyle.height = '100px';
+ outerStyle.overflow = SCROLL;
+ outerStyle.top = '-9999px';
+ document.body.appendChild(outer);
+ scrollbarWidth = outer.offsetWidth - outer.clientWidth;
+ document.body.removeChild(outer);
+ return scrollbarWidth;
+ };
+ isFFWithBuggyScrollbar = function() {
+ var isOSXFF, ua, version;
+ ua = window.navigator.userAgent;
+ isOSXFF = /(?=.+Mac OS X)(?=.+Firefox)/.test(ua);
+ version = /Firefox\/\d{2}\./.exec(ua);
+ if (version) {
+ version = version[0].replace(/\D+/g, '');
+ }
+ return isOSXFF && +version > 23;
+ };
+ /**
+ @class NanoScroll
+ @param element {HTMLElement|Node} the main element
+ @param options {Object} nanoScroller's options
+ @constructor
+ */
+
+ NanoScroll = (function() {
+ function NanoScroll(el, options) {
+ this.el = el;
+ this.options = options;
+ BROWSER_SCROLLBAR_WIDTH || (BROWSER_SCROLLBAR_WIDTH = getBrowserScrollbarWidth());
+ this.$el = $(this.el);
+ this.doc = $(this.options.documentContext || document);
+ this.win = $(this.options.windowContext || window);
+ this.$content = this.$el.children("." + options.contentClass);
+ this.$content.attr('tabindex', this.options.tabIndex || 0);
+ this.content = this.$content[0];
+ if (this.options.iOSNativeScrolling && (this.el.style.WebkitOverflowScrolling != null)) {
+ this.nativeScrolling();
+ } else {
+ this.generate();
+ }
+ this.createEvents();
+ this.addEvents();
+ this.reset();
+ }
+
+ /**
+ Prevents the rest of the page being scrolled
+ when user scrolls the `.content` element.
+ @method preventScrolling
+ @param event {Event}
+ @param direction {String} Scroll direction (up or down)
+ @private
+ */
+
+
+ NanoScroll.prototype.preventScrolling = function(e, direction) {
+ if (!this.isActive) {
+ return;
+ }
+ if (e.type === DOMSCROLL) {
+ if (direction === DOWN && e.originalEvent.detail > 0 || direction === UP && e.originalEvent.detail < 0) {
+ e.preventDefault();
+ }
+ } else if (e.type === MOUSEWHEEL) {
+ if (!e.originalEvent || !e.originalEvent.wheelDelta) {
+ return;
+ }
+ if (direction === DOWN && e.originalEvent.wheelDelta < 0 || direction === UP && e.originalEvent.wheelDelta > 0) {
+ e.preventDefault();
+ }
+ }
+ };
+
+ /**
+ Enable iOS native scrolling
+ @method nativeScrolling
+ @private
+ */
+
+
+ NanoScroll.prototype.nativeScrolling = function() {
+ this.$content.css({
+ WebkitOverflowScrolling: 'touch'
+ });
+ this.iOSNativeScrolling = true;
+ this.isActive = true;
+ };
+
+ /**
+ Updates those nanoScroller properties that
+ are related to current scrollbar position.
+ @method updateScrollValues
+ @private
+ */
+
+
+ NanoScroll.prototype.updateScrollValues = function() {
+ var content;
+ content = this.content;
+ this.maxScrollTop = content.scrollHeight - content.clientHeight;
+ this.prevScrollTop = this.contentScrollTop || 0;
+ this.contentScrollTop = content.scrollTop;
+ if (!this.iOSNativeScrolling) {
+ this.maxSliderTop = this.paneHeight - this.sliderHeight;
+ this.sliderTop = this.maxScrollTop === 0 ? 0 : this.contentScrollTop * this.maxSliderTop / this.maxScrollTop;
+ }
+ };
+
+ /**
+ Updates CSS styles for current scroll position.
+ Uses CSS 2d transfroms and `window.requestAnimationFrame` if available.
+ @method setOnScrollStyles
+ @private
+ */
+
+
+ NanoScroll.prototype.setOnScrollStyles = function() {
+ var cssValue,
+ _this = this;
+ if (hasTransform) {
+ cssValue = {};
+ cssValue[transform] = "translate(0, " + this.sliderTop + "px)";
+ } else {
+ cssValue = {
+ top: this.sliderTop
+ };
+ }
+ if (rAF) {
+ if (!this.scrollRAF) {
+ this.scrollRAF = rAF(function() {
+ _this.scrollRAF = null;
+ _this.slider.css(cssValue);
+ });
+ }
+ } else {
+ this.slider.css(cssValue);
+ }
+ };
+
+ /**
+ Creates event related methods
+ @method createEvents
+ @private
+ */
+
+
+ NanoScroll.prototype.createEvents = function() {
+ var _this = this;
+ this.events = {
+ down: function(e) {
+ _this.isBeingDragged = true;
+ _this.offsetY = e.pageY - _this.slider.offset().top;
+ _this.pane.addClass('active');
+ _this.doc.bind(MOUSEMOVE, _this.events[DRAG]).bind(MOUSEUP, _this.events[UP]);
+ return false;
+ },
+ drag: function(e) {
+ _this.sliderY = e.pageY - _this.$el.offset().top - _this.offsetY;
+ _this.scroll();
+ _this.updateScrollValues();
+ if (_this.contentScrollTop >= _this.maxScrollTop && _this.prevScrollTop !== _this.maxScrollTop) {
+ _this.$el.trigger('scrollend');
+ } else if (_this.contentScrollTop === 0 && _this.prevScrollTop !== 0) {
+ _this.$el.trigger('scrolltop');
+ }
+ return false;
+ },
+ up: function(e) {
+ _this.isBeingDragged = false;
+ _this.pane.removeClass('active');
+ _this.doc.unbind(MOUSEMOVE, _this.events[DRAG]).unbind(MOUSEUP, _this.events[UP]);
+ return false;
+ },
+ resize: function(e) {
+ _this.reset();
+ },
+ panedown: function(e) {
+ _this.sliderY = (e.offsetY || e.originalEvent.layerY) - (_this.sliderHeight * 0.5);
+ _this.scroll();
+ _this.events.down(e);
+ return false;
+ },
+ scroll: function(e) {
+ if (_this.isBeingDragged) {
+ return;
+ }
+ _this.updateScrollValues();
+ if (!_this.iOSNativeScrolling) {
+ _this.setOnScrollStyles();
+ }
+ if (e == null) {
+ return;
+ }
+ if (_this.contentScrollTop >= _this.maxScrollTop) {
+ if (_this.options.preventPageScrolling) {
+ _this.preventScrolling(e, DOWN);
+ }
+ if (_this.prevScrollTop !== _this.maxScrollTop) {
+ _this.$el.trigger('scrollend');
+ }
+ } else if (_this.contentScrollTop === 0) {
+ if (_this.options.preventPageScrolling) {
+ _this.preventScrolling(e, UP);
+ }
+ if (_this.prevScrollTop !== 0) {
+ _this.$el.trigger('scrolltop');
+ }
+ }
+ },
+ wheel: function(e) {
+ var delta;
+ if (e == null) {
+ return;
+ }
+ delta = e.delta || e.wheelDelta || (e.originalEvent && e.originalEvent.wheelDelta) || -e.detail || (e.originalEvent && -e.originalEvent.detail);
+ if (delta) {
+ _this.sliderY += -delta / 3;
+ }
+ _this.scroll();
+ return false;
+ }
+ };
+ };
+
+ /**
+ Adds event listeners with jQuery.
+ @method addEvents
+ @private
+ */
+
+
+ NanoScroll.prototype.addEvents = function() {
+ var events;
+ this.removeEvents();
+ events = this.events;
+ if (!this.options.disableResize) {
+ this.win.bind(RESIZE, events[RESIZE]);
+ }
+ if (!this.iOSNativeScrolling) {
+ this.slider.bind(MOUSEDOWN, events[DOWN]);
+ this.pane.bind(MOUSEDOWN, events[PANEDOWN]).bind("" + MOUSEWHEEL + " " + DOMSCROLL, events[WHEEL]);
+ }
+ this.$content.bind("" + SCROLL + " " + MOUSEWHEEL + " " + DOMSCROLL + " " + TOUCHMOVE, events[SCROLL]);
+ };
+
+ /**
+ Removes event listeners with jQuery.
+ @method removeEvents
+ @private
+ */
+
+
+ NanoScroll.prototype.removeEvents = function() {
+ var events;
+ events = this.events;
+ this.win.unbind(RESIZE, events[RESIZE]);
+ if (!this.iOSNativeScrolling) {
+ this.slider.unbind();
+ this.pane.unbind();
+ }
+ this.$content.unbind("" + SCROLL + " " + MOUSEWHEEL + " " + DOMSCROLL + " " + TOUCHMOVE, events[SCROLL]);
+ };
+
+ /**
+ Generates nanoScroller's scrollbar and elements for it.
+ @method generate
+ @chainable
+ @private
+ */
+
+
+ NanoScroll.prototype.generate = function() {
+ var contentClass, cssRule, currentPadding, options, paneClass, sliderClass;
+ options = this.options;
+ paneClass = options.paneClass, sliderClass = options.sliderClass, contentClass = options.contentClass;
+ if (!this.$el.find("." + paneClass).length && !this.$el.find("." + sliderClass).length) {
+ this.$el.append("");
+ }
+ this.pane = this.$el.children("." + paneClass);
+ this.slider = this.pane.find("." + sliderClass);
+ if (BROWSER_SCROLLBAR_WIDTH === 0 && isFFWithBuggyScrollbar()) {
+ currentPadding = window.getComputedStyle(this.content, null).getPropertyValue('padding-right').replace(/\D+/g, '');
+ cssRule = {
+ right: -14,
+ paddingRight: +currentPadding + 14
+ };
+ } else if (BROWSER_SCROLLBAR_WIDTH) {
+ cssRule = {
+ right: -BROWSER_SCROLLBAR_WIDTH
+ };
+ this.$el.addClass('has-scrollbar');
+ }
+ if (cssRule != null) {
+ this.$content.css(cssRule);
+ }
+ return this;
+ };
+
+ /**
+ @method restore
+ @private
+ */
+
+
+ NanoScroll.prototype.restore = function() {
+ this.stopped = false;
+ if (!this.iOSNativeScrolling) {
+ this.pane.show();
+ }
+ this.addEvents();
+ };
+
+ /**
+ Resets nanoScroller's scrollbar.
+ @method reset
+ @chainable
+ @example
+ $(".nano").nanoScroller();
+ */
+
+
+ NanoScroll.prototype.reset = function() {
+ var content, contentHeight, contentStyle, contentStyleOverflowY, paneBottom, paneHeight, paneOuterHeight, paneTop, parentMaxHeight, sliderHeight;
+ if (this.iOSNativeScrolling) {
+ this.contentHeight = this.content.scrollHeight;
+ return;
+ }
+ if (!this.$el.find("." + this.options.paneClass).length) {
+ this.generate().stop();
+ }
+ if (this.stopped) {
+ this.restore();
+ }
+ content = this.content;
+ contentStyle = content.style;
+ contentStyleOverflowY = contentStyle.overflowY;
+ if (BROWSER_IS_IE7) {
+ this.$content.css({
+ height: this.$content.height()
+ });
+ }
+ contentHeight = content.scrollHeight + BROWSER_SCROLLBAR_WIDTH;
+ parentMaxHeight = parseInt(this.$el.css("max-height"), 10);
+ if (parentMaxHeight > 0) {
+ this.$el.height("");
+ this.$el.height(content.scrollHeight > parentMaxHeight ? parentMaxHeight : content.scrollHeight);
+ }
+ paneHeight = this.pane.outerHeight(false);
+ paneTop = parseInt(this.pane.css('top'), 10);
+ paneBottom = parseInt(this.pane.css('bottom'), 10);
+ paneOuterHeight = paneHeight + paneTop + paneBottom;
+ sliderHeight = Math.round(paneOuterHeight / contentHeight * paneOuterHeight);
+ if (sliderHeight < this.options.sliderMinHeight) {
+ sliderHeight = this.options.sliderMinHeight;
+ } else if ((this.options.sliderMaxHeight != null) && sliderHeight > this.options.sliderMaxHeight) {
+ sliderHeight = this.options.sliderMaxHeight;
+ }
+ if (contentStyleOverflowY === SCROLL && contentStyle.overflowX !== SCROLL) {
+ sliderHeight += BROWSER_SCROLLBAR_WIDTH;
+ }
+ this.maxSliderTop = paneOuterHeight - sliderHeight;
+ this.contentHeight = contentHeight;
+ this.paneHeight = paneHeight;
+ this.paneOuterHeight = paneOuterHeight;
+ this.sliderHeight = sliderHeight;
+ this.slider.height(sliderHeight);
+ this.events.scroll();
+ this.pane.show();
+ this.isActive = true;
+ if ((content.scrollHeight === content.clientHeight) || (this.pane.outerHeight(true) >= content.scrollHeight && contentStyleOverflowY !== SCROLL)) {
+ this.pane.hide();
+ this.isActive = false;
+ } else if (this.el.clientHeight === content.scrollHeight && contentStyleOverflowY === SCROLL) {
+ this.slider.hide();
+ } else {
+ this.slider.show();
+ }
+ this.pane.css({
+ opacity: (this.options.alwaysVisible ? 1 : ''),
+ visibility: (this.options.alwaysVisible ? 'visible' : '')
+ });
+ return this;
+ };
+
+ /**
+ @method scroll
+ @private
+ @example
+ $(".nano").nanoScroller({ scroll: 'top' });
+ */
+
+
+ NanoScroll.prototype.scroll = function() {
+ if (!this.isActive) {
+ return;
+ }
+ this.sliderY = Math.max(0, this.sliderY);
+ this.sliderY = Math.min(this.maxSliderTop, this.sliderY);
+ this.$content.scrollTop((this.paneHeight - this.contentHeight + BROWSER_SCROLLBAR_WIDTH) * this.sliderY / this.maxSliderTop * -1);
+ if (!this.iOSNativeScrolling) {
+ this.setOnScrollStyles();
+ }
+ return this;
+ };
+
+ /**
+ Scroll at the bottom with an offset value
+ @method scrollBottom
+ @param offsetY {Number}
+ @chainable
+ @example
+ $(".nano").nanoScroller({ scrollBottom: value });
+ */
+
+
+ NanoScroll.prototype.scrollBottom = function(offsetY) {
+ if (!this.isActive) {
+ return;
+ }
+ this.reset();
+ this.$content.scrollTop(this.contentHeight - this.$content.height() - offsetY).trigger(MOUSEWHEEL);
+ return this;
+ };
+
+ /**
+ Scroll at the top with an offset value
+ @method scrollTop
+ @param offsetY {Number}
+ @chainable
+ @example
+ $(".nano").nanoScroller({ scrollTop: value });
+ */
+
+
+ NanoScroll.prototype.scrollTop = function(offsetY) {
+ if (!this.isActive) {
+ return;
+ }
+ this.reset();
+ this.$content.scrollTop(+offsetY).trigger(MOUSEWHEEL);
+ return this;
+ };
+
+ /**
+ Scroll to an element
+ @method scrollTo
+ @param node {Node} A node to scroll to.
+ @chainable
+ @example
+ $(".nano").nanoScroller({ scrollTo: $('#a_node') });
+ */
+
+
+ NanoScroll.prototype.scrollTo = function(node) {
+ if (!this.isActive) {
+ return;
+ }
+ this.reset();
+ this.scrollTop($(node).get(0).offsetTop);
+ return this;
+ };
+
+ /**
+ To stop the operation.
+ This option will tell the plugin to disable all event bindings and hide the gadget scrollbar from the UI.
+ @method stop
+ @chainable
+ @example
+ $(".nano").nanoScroller({ stop: true });
+ */
+
+
+ NanoScroll.prototype.stop = function() {
+ if (cAF) {
+ cAF(this.scrollRAF);
+ }
+ this.stopped = true;
+ this.removeEvents();
+ if (!this.iOSNativeScrolling) {
+ this.pane.hide();
+ }
+ return this;
+ };
+
+ /**
+ Destroys nanoScroller and restores browser's native scrollbar.
+ @method destroy
+ @chainable
+ @example
+ $(".nano").nanoScroller({ destroy: true });
+ */
+
+
+ NanoScroll.prototype.destroy = function() {
+ if (!this.stopped) {
+ this.stop();
+ }
+ if (!this.iOSNativeScrolling && this.pane.length) {
+ this.pane.remove();
+ }
+ if (BROWSER_IS_IE7) {
+ this.$content.height('');
+ }
+ this.$content.removeAttr('tabindex');
+ if (this.$el.hasClass('has-scrollbar')) {
+ this.$el.removeClass('has-scrollbar');
+ this.$content.css({
+ right: ''
+ });
+ }
+ return this;
+ };
+
+ /**
+ To flash the scrollbar gadget for an amount of time defined in plugin settings (defaults to 1,5s).
+ Useful if you want to show the user (e.g. on pageload) that there is more content waiting for him.
+ @method flash
+ @chainable
+ @example
+ $(".nano").nanoScroller({ flash: true });
+ */
+
+
+ NanoScroll.prototype.flash = function() {
+ var _this = this;
+ if (this.iOSNativeScrolling) {
+ return;
+ }
+ if (!this.isActive) {
+ return;
+ }
+ this.reset();
+ this.pane.addClass('flashed');
+ setTimeout(function() {
+ _this.pane.removeClass('flashed');
+ }, this.options.flashDelay);
+ return this;
+ };
+
+ return NanoScroll;
+
+ })();
+ $.fn.nanoScroller = function(settings) {
+ return this.each(function() {
+ var options, scrollbar;
+ if (!(scrollbar = this.nanoscroller)) {
+ options = $.extend({}, defaults, settings);
+ this.nanoscroller = scrollbar = new NanoScroll(this, options);
+ }
+ if (settings && typeof settings === "object") {
+ $.extend(scrollbar.options, settings);
+ if (settings.scrollBottom) {
+ return scrollbar.scrollBottom(settings.scrollBottom);
+ }
+ if (settings.scrollTop) {
+ return scrollbar.scrollTop(settings.scrollTop);
+ }
+ if (settings.scrollTo) {
+ return scrollbar.scrollTo(settings.scrollTo);
+ }
+ if (settings.scroll === 'bottom') {
+ return scrollbar.scrollBottom(0);
+ }
+ if (settings.scroll === 'top') {
+ return scrollbar.scrollTop(0);
+ }
+ if (settings.scroll && settings.scroll instanceof $) {
+ return scrollbar.scrollTo(settings.scroll);
+ }
+ if (settings.stop) {
+ return scrollbar.stop();
+ }
+ if (settings.destroy) {
+ return scrollbar.destroy();
+ }
+ if (settings.flash) {
+ return scrollbar.flash();
+ }
+ }
+ return scrollbar.reset();
+ });
+ };
+ $.fn.nanoScroller.Constructor = NanoScroll;
+})(jQuery, window, document);
+
+/*
+//@ sourceMappingURL=jquery.nanoscroller.js.map
+*/
\ No newline at end of file
diff --git a/ajax/libs/jquery.nanoscroller/0.7.5/javascripts/jquery.nanoscroller.js.map b/ajax/libs/jquery.nanoscroller/0.7.5/javascripts/jquery.nanoscroller.js.map
new file mode 100644
index 000000000..b61897213
--- /dev/null
+++ b/ajax/libs/jquery.nanoscroller/0.7.5/javascripts/jquery.nanoscroller.js.map
@@ -0,0 +1,10 @@
+{
+ "version": 3,
+ "file": "jquery.nanoscroller.js",
+ "sourceRoot": "../../coffeescripts/",
+ "sources": [
+ "jquery.nanoscroller.coffee"
+ ],
+ "names": [],
+ "mappings": "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"
+}
\ No newline at end of file
diff --git a/ajax/libs/jquery.nanoscroller/0.7.5/javascripts/jquery.nanoscroller.min.js b/ajax/libs/jquery.nanoscroller/0.7.5/javascripts/jquery.nanoscroller.min.js
new file mode 100644
index 000000000..4e5dc1fdd
--- /dev/null
+++ b/ajax/libs/jquery.nanoscroller/0.7.5/javascripts/jquery.nanoscroller.min.js
@@ -0,0 +1,3 @@
+/*! nanoScrollerJS - v0.7.5 - (c) 2013 James Florentino; Licensed MIT */
+!function(a,b,c){"use strict";var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F;x={paneClass:"pane",sliderClass:"slider",contentClass:"content",iOSNativeScrolling:!1,preventPageScrolling:!1,disableResize:!1,alwaysVisible:!1,flashDelay:1500,sliderMinHeight:20,sliderMaxHeight:null,documentContext:null,windowContext:null},s="scrollbar",r="scroll",k="mousedown",l="mousemove",n="mousewheel",m="mouseup",q="resize",h="drag",u="up",p="panedown",f="DOMMouseScroll",g="down",v="wheel",i="keydown",j="keyup",t="touchmove",d="Microsoft Internet Explorer"===b.navigator.appName&&/msie 7./i.test(b.navigator.appVersion)&&b.ActiveXObject,e=null,B=b.requestAnimationFrame,w=b.cancelAnimationFrame,D=c.createElement("div").style,F=function(){var a,b,c,d,e,f;for(d=["t","webkitT","MozT","msT","OT"],a=e=0,f=d.length;f>e;a=++e)if(c=d[a],b=d[a]+"ransform",b in D)return d[a].substr(0,d[a].length-1);return!1}(),E=function(a){return F===!1?!1:""===F?a:F+a.charAt(0).toUpperCase()+a.substr(1)},C=E("transform"),z=C!==!1,y=function(){var a,b,d;return a=c.createElement("div"),b=a.style,b.position="absolute",b.width="100px",b.height="100px",b.overflow=r,b.top="-9999px",c.body.appendChild(a),d=a.offsetWidth-a.clientWidth,c.body.removeChild(a),d},A=function(){var a,c,d;return c=b.navigator.userAgent,a=/(?=.+Mac OS X)(?=.+Firefox)/.test(c),d=/Firefox\/\d{2}\./.exec(c),d&&(d=d[0].replace(/\D+/g,"")),a&&+d>23},o=function(){function i(d,f){this.el=d,this.options=f,e||(e=y()),this.$el=a(this.el),this.doc=a(this.options.documentContext||c),this.win=a(this.options.windowContext||b),this.$content=this.$el.children("."+f.contentClass),this.$content.attr("tabindex",this.options.tabIndex||0),this.content=this.$content[0],this.options.iOSNativeScrolling&&null!=this.el.style.WebkitOverflowScrolling?this.nativeScrolling():this.generate(),this.createEvents(),this.addEvents(),this.reset()}return i.prototype.preventScrolling=function(a,b){if(this.isActive)if(a.type===f)(b===g&&a.originalEvent.detail>0||b===u&&a.originalEvent.detail<0)&&a.preventDefault();else if(a.type===n){if(!a.originalEvent||!a.originalEvent.wheelDelta)return;(b===g&&a.originalEvent.wheelDelta<0||b===u&&a.originalEvent.wheelDelta>0)&&a.preventDefault()}},i.prototype.nativeScrolling=function(){this.$content.css({WebkitOverflowScrolling:"touch"}),this.iOSNativeScrolling=!0,this.isActive=!0},i.prototype.updateScrollValues=function(){var a;a=this.content,this.maxScrollTop=a.scrollHeight-a.clientHeight,this.prevScrollTop=this.contentScrollTop||0,this.contentScrollTop=a.scrollTop,this.iOSNativeScrolling||(this.maxSliderTop=this.paneHeight-this.sliderHeight,this.sliderTop=0===this.maxScrollTop?0:this.contentScrollTop*this.maxSliderTop/this.maxScrollTop)},i.prototype.setOnScrollStyles=function(){var a,b=this;z?(a={},a[C]="translate(0, "+this.sliderTop+"px)"):a={top:this.sliderTop},B?this.scrollRAF||(this.scrollRAF=B(function(){b.scrollRAF=null,b.slider.css(a)})):this.slider.css(a)},i.prototype.createEvents=function(){var a=this;this.events={down:function(b){return a.isBeingDragged=!0,a.offsetY=b.pageY-a.slider.offset().top,a.pane.addClass("active"),a.doc.bind(l,a.events[h]).bind(m,a.events[u]),!1},drag:function(b){return a.sliderY=b.pageY-a.$el.offset().top-a.offsetY,a.scroll(),a.updateScrollValues(),a.contentScrollTop>=a.maxScrollTop&&a.prevScrollTop!==a.maxScrollTop?a.$el.trigger("scrollend"):0===a.contentScrollTop&&0!==a.prevScrollTop&&a.$el.trigger("scrolltop"),!1},up:function(){return a.isBeingDragged=!1,a.pane.removeClass("active"),a.doc.unbind(l,a.events[h]).unbind(m,a.events[u]),!1},resize:function(){a.reset()},panedown:function(b){return a.sliderY=(b.offsetY||b.originalEvent.layerY)-.5*a.sliderHeight,a.scroll(),a.events.down(b),!1},scroll:function(b){a.isBeingDragged||(a.updateScrollValues(),a.iOSNativeScrolling||a.setOnScrollStyles(),null!=b&&(a.contentScrollTop>=a.maxScrollTop?(a.options.preventPageScrolling&&a.preventScrolling(b,g),a.prevScrollTop!==a.maxScrollTop&&a.$el.trigger("scrollend")):0===a.contentScrollTop&&(a.options.preventPageScrolling&&a.preventScrolling(b,u),0!==a.prevScrollTop&&a.$el.trigger("scrolltop"))))},wheel:function(b){var c;if(null!=b)return c=b.delta||b.wheelDelta||b.originalEvent&&b.originalEvent.wheelDelta||-b.detail||b.originalEvent&&-b.originalEvent.detail,c&&(a.sliderY+=-c/3),a.scroll(),!1}}},i.prototype.addEvents=function(){var a;this.removeEvents(),a=this.events,this.options.disableResize||this.win.bind(q,a[q]),this.iOSNativeScrolling||(this.slider.bind(k,a[g]),this.pane.bind(k,a[p]).bind(""+n+" "+f,a[v])),this.$content.bind(""+r+" "+n+" "+f+" "+t,a[r])},i.prototype.removeEvents=function(){var a;a=this.events,this.win.unbind(q,a[q]),this.iOSNativeScrolling||(this.slider.unbind(),this.pane.unbind()),this.$content.unbind(""+r+" "+n+" "+f+" "+t,a[r])},i.prototype.generate=function(){var a,c,d,f,g,h;return f=this.options,g=f.paneClass,h=f.sliderClass,a=f.contentClass,this.$el.find("."+g).length||this.$el.find("."+h).length||this.$el.append(''),this.pane=this.$el.children("."+g),this.slider=this.pane.find("."+h),0===e&&A()?(d=b.getComputedStyle(this.content,null).getPropertyValue("padding-right").replace(/\D+/g,""),c={right:-14,paddingRight:+d+14}):e&&(c={right:-e},this.$el.addClass("has-scrollbar")),null!=c&&this.$content.css(c),this},i.prototype.restore=function(){this.stopped=!1,this.iOSNativeScrolling||this.pane.show(),this.addEvents()},i.prototype.reset=function(){var a,b,c,f,g,h,i,j,k,l;return this.iOSNativeScrolling?(this.contentHeight=this.content.scrollHeight,void 0):(this.$el.find("."+this.options.paneClass).length||this.generate().stop(),this.stopped&&this.restore(),a=this.content,c=a.style,f=c.overflowY,d&&this.$content.css({height:this.$content.height()}),b=a.scrollHeight+e,k=parseInt(this.$el.css("max-height"),10),k>0&&(this.$el.height(""),this.$el.height(a.scrollHeight>k?k:a.scrollHeight)),h=this.pane.outerHeight(!1),j=parseInt(this.pane.css("top"),10),g=parseInt(this.pane.css("bottom"),10),i=h+j+g,l=Math.round(i/b*i),lthis.options.sliderMaxHeight&&(l=this.options.sliderMaxHeight),f===r&&c.overflowX!==r&&(l+=e),this.maxSliderTop=i-l,this.contentHeight=b,this.paneHeight=h,this.paneOuterHeight=i,this.sliderHeight=l,this.slider.height(l),this.events.scroll(),this.pane.show(),this.isActive=!0,a.scrollHeight===a.clientHeight||this.pane.outerHeight(!0)>=a.scrollHeight&&f!==r?(this.pane.hide(),this.isActive=!1):this.el.clientHeight===a.scrollHeight&&f===r?this.slider.hide():this.slider.show(),this.pane.css({opacity:this.options.alwaysVisible?1:"",visibility:this.options.alwaysVisible?"visible":""}),this)},i.prototype.scroll=function(){return this.isActive?(this.sliderY=Math.max(0,this.sliderY),this.sliderY=Math.min(this.maxSliderTop,this.sliderY),this.$content.scrollTop(-1*((this.paneHeight-this.contentHeight+e)*this.sliderY/this.maxSliderTop)),this.iOSNativeScrolling||this.setOnScrollStyles(),this):void 0},i.prototype.scrollBottom=function(a){return this.isActive?(this.reset(),this.$content.scrollTop(this.contentHeight-this.$content.height()-a).trigger(n),this):void 0},i.prototype.scrollTop=function(a){return this.isActive?(this.reset(),this.$content.scrollTop(+a).trigger(n),this):void 0},i.prototype.scrollTo=function(b){return this.isActive?(this.reset(),this.scrollTop(a(b).get(0).offsetTop),this):void 0},i.prototype.stop=function(){return w&&w(this.scrollRAF),this.stopped=!0,this.removeEvents(),this.iOSNativeScrolling||this.pane.hide(),this},i.prototype.destroy=function(){return this.stopped||this.stop(),!this.iOSNativeScrolling&&this.pane.length&&this.pane.remove(),d&&this.$content.height(""),this.$content.removeAttr("tabindex"),this.$el.hasClass("has-scrollbar")&&(this.$el.removeClass("has-scrollbar"),this.$content.css({right:""})),this},i.prototype.flash=function(){var a=this;if(!this.iOSNativeScrolling&&this.isActive)return this.reset(),this.pane.addClass("flashed"),setTimeout(function(){a.pane.removeClass("flashed")},this.options.flashDelay),this},i}(),a.fn.nanoScroller=function(b){return this.each(function(){var c,d;if((d=this.nanoscroller)||(c=a.extend({},x,b),this.nanoscroller=d=new o(this,c)),b&&"object"==typeof b){if(a.extend(d.options,b),b.scrollBottom)return d.scrollBottom(b.scrollBottom);if(b.scrollTop)return d.scrollTop(b.scrollTop);if(b.scrollTo)return d.scrollTo(b.scrollTo);if("bottom"===b.scroll)return d.scrollBottom(0);if("top"===b.scroll)return d.scrollTop(0);if(b.scroll&&b.scroll instanceof a)return d.scrollTo(b.scroll);if(b.stop)return d.stop();if(b.destroy)return d.destroy();if(b.flash)return d.flash()}return d.reset()})},a.fn.nanoScroller.Constructor=o}(jQuery,window,document);
+//# sourceMappingURL=jquery.nanoscroller.min.js.map
\ No newline at end of file
diff --git a/ajax/libs/jquery.nanoscroller/0.7.5/javascripts/jquery.nanoscroller.min.js.map b/ajax/libs/jquery.nanoscroller/0.7.5/javascripts/jquery.nanoscroller.min.js.map
new file mode 100644
index 000000000..8b370ed7f
--- /dev/null
+++ b/ajax/libs/jquery.nanoscroller/0.7.5/javascripts/jquery.nanoscroller.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"bin/javascripts/jquery.nanoscroller.min.js","sources":["../../coffeescripts/jquery.nanoscroller.coffee"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/ajax/libs/jquery.nanoscroller/0.7/css/nanoscroller.css b/ajax/libs/jquery.nanoscroller/0.7/css/nanoscroller.css
new file mode 100644
index 000000000..d4c9e9439
--- /dev/null
+++ b/ajax/libs/jquery.nanoscroller/0.7/css/nanoscroller.css
@@ -0,0 +1,54 @@
+/** initial setup **/
+.nano {
+ position : relative;
+ width : 100%;
+ height : 100%;
+ overflow : hidden;
+}
+.nano .content {
+ position : absolute;
+ overflow : scroll;
+ overflow-x : hidden;
+ top : 0;
+ right : 0;
+ bottom : 0;
+ left : 0;
+}
+.nano .content:focus {
+ outline: thin dotted;
+}
+.nano .content::-webkit-scrollbar {
+ visibility: hidden;
+}
+.has-scrollbar .content::-webkit-scrollbar {
+ visibility: visible;
+}
+.nano > .pane {
+ background : rgba(0,0,0,.25);
+ position : absolute;
+ width : 10px;
+ right : 0;
+ top : 0;
+ bottom : 0;
+ visibility : hidden\9; /* Target only IE7 and IE8 with this hack */
+ opacity : .01;
+ -webkit-transition : .2s;
+ -moz-transition : .2s;
+ -o-transition : .2s;
+ transition : .2s;
+ -moz-border-radius : 5px;
+ -webkit-border-radius : 5px;
+ border-radius : 5px;
+}
+.nano > .pane > .slider {
+ background: rgba(0,0,0,.5);
+ position : relative;
+ margin : 0 1px;
+ -moz-border-radius : 3px;
+ -webkit-border-radius : 3px;
+ border-radius : 3px;
+}
+.nano:hover > .pane, .pane.active, .pane.flashed {
+ visibility : visible\9; /* Target only IE7 and IE8 with this hack */
+ opacity : 0.99;
+}
diff --git a/ajax/libs/jquery.nanoscroller/0.7/css/nanoscroller.min.css b/ajax/libs/jquery.nanoscroller/0.7/css/nanoscroller.min.css
new file mode 100644
index 000000000..3307a538f
--- /dev/null
+++ b/ajax/libs/jquery.nanoscroller/0.7/css/nanoscroller.min.css
@@ -0,0 +1 @@
+.nano{position:relative;width:100%;height:100%;overflow:hidden}.nano .content{position:absolute;overflow:scroll;overflow-x:hidden;top:0;right:0;bottom:0;left:0}.nano .content:focus{outline:dotted thin}.nano .content::-webkit-scrollbar{visibility:hidden}.has-scrollbar .content::-webkit-scrollbar{visibility:visible}.nano>.pane{background:rgba(0,0,0,.25);position:absolute;width:10px;right:0;top:0;bottom:0;opacity:.01;-webkit-transition:.2s;-moz-transition:.2s;-o-transition:.2s;transition:.2s;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.nano>.pane>.slider{background:rgba(0,0,0,.5);position:relative;margin:0 1px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.nano:hover>.pane,.pane.active,.pane.flashed{opacity:.99}
\ No newline at end of file
diff --git a/ajax/libs/jquery.nanoscroller/0.7/javascripts/jquery.nanoscroller.js b/ajax/libs/jquery.nanoscroller/0.7/javascripts/jquery.nanoscroller.js
new file mode 100644
index 000000000..904745685
--- /dev/null
+++ b/ajax/libs/jquery.nanoscroller/0.7/javascripts/jquery.nanoscroller.js
@@ -0,0 +1,725 @@
+/*! nanoScrollerJS - v0.7
+* http://jamesflorentino.github.com/nanoScrollerJS/
+* Copyright (c) 2012 James Florentino; Licensed MIT */
+
+
+(function($, window, document) {
+ "use strict";
+
+ var BROWSER_IS_IE7, BROWSER_SCROLLBAR_WIDTH, DOMSCROLL, DOWN, DRAG, KEYDOWN, KEYUP, MOUSEDOWN, MOUSEMOVE, MOUSEUP, MOUSEWHEEL, NanoScroll, PANEDOWN, RESIZE, SCROLL, SCROLLBAR, TOUCHMOVE, UP, WHEEL, defaults, getBrowserScrollbarWidth;
+ defaults = {
+ /**
+ a classname for the pane element.
+ @property paneClass
+ @type String
+ @default 'pane'
+ */
+
+ paneClass: 'pane',
+ /**
+ a classname for the slider element.
+ @property sliderClass
+ @type String
+ @default 'slider'
+ */
+
+ sliderClass: 'slider',
+ /**
+ a classname for the content element.
+ @property contentClass
+ @type String
+ @default 'content'
+ */
+
+ contentClass: 'content',
+ /**
+ a setting to enable native scrolling in iOS devices.
+ @property iOSNativeScrolling
+ @type Boolean
+ @default false
+ */
+
+ iOSNativeScrolling: false,
+ /**
+ a setting to prevent the rest of the page being
+ scrolled when user scrolls the `.content` element.
+ @property preventPageScrolling
+ @type Boolean
+ @default false
+ */
+
+ preventPageScrolling: false,
+ /**
+ a setting to disable binding to the resize event.
+ @property disableResize
+ @type Boolean
+ @default false
+ */
+
+ disableResize: false,
+ /**
+ a setting to make the scrollbar always visible.
+ @property alwaysVisible
+ @type Boolean
+ @default false
+ */
+
+ alwaysVisible: false,
+ /**
+ a default timeout for the `flash()` method.
+ @property flashDelay
+ @type Number
+ @default 1500
+ */
+
+ flashDelay: 1500,
+ /**
+ a minimum height for the `.slider` element.
+ @property sliderMinHeight
+ @type Number
+ @default 20
+ */
+
+ sliderMinHeight: 20,
+ /**
+ a maximum height for the `.slider` element.
+ @property sliderMaxHeight
+ @type Number
+ @default null
+ */
+
+ sliderMaxHeight: null
+ };
+ /**
+ @property SCROLLBAR
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ SCROLLBAR = 'scrollbar';
+ /**
+ @property SCROLL
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ SCROLL = 'scroll';
+ /**
+ @property MOUSEDOWN
+ @type String
+ @final
+ @private
+ */
+
+ MOUSEDOWN = 'mousedown';
+ /**
+ @property MOUSEMOVE
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ MOUSEMOVE = 'mousemove';
+ /**
+ @property MOUSEWHEEL
+ @type String
+ @final
+ @private
+ */
+
+ MOUSEWHEEL = 'mousewheel';
+ /**
+ @property MOUSEUP
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ MOUSEUP = 'mouseup';
+ /**
+ @property RESIZE
+ @type String
+ @final
+ @private
+ */
+
+ RESIZE = 'resize';
+ /**
+ @property DRAG
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ DRAG = 'drag';
+ /**
+ @property UP
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ UP = 'up';
+ /**
+ @property PANEDOWN
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ PANEDOWN = 'panedown';
+ /**
+ @property DOMSCROLL
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ DOMSCROLL = 'DOMMouseScroll';
+ /**
+ @property DOWN
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ DOWN = 'down';
+ /**
+ @property WHEEL
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ WHEEL = 'wheel';
+ /**
+ @property KEYDOWN
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ KEYDOWN = 'keydown';
+ /**
+ @property KEYUP
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ KEYUP = 'keyup';
+ /**
+ @property TOUCHMOVE
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ TOUCHMOVE = 'touchmove';
+ /**
+ @property BROWSER_IS_IE7
+ @type Boolean
+ @static
+ @final
+ @private
+ */
+
+ BROWSER_IS_IE7 = window.navigator.appName === 'Microsoft Internet Explorer' && /msie 7./i.test(window.navigator.appVersion) && window.ActiveXObject;
+ /**
+ @property BROWSER_SCROLLBAR_WIDTH
+ @type Number
+ @static
+ @default null
+ @private
+ */
+
+ BROWSER_SCROLLBAR_WIDTH = null;
+ /**
+ Returns browser's native scrollbar width
+ @method getBrowserScrollbarWidth
+ @return {Number} the scrollbar width in pixels
+ @static
+ @private
+ */
+
+ getBrowserScrollbarWidth = function() {
+ var outer, outerStyle, scrollbarWidth;
+ outer = document.createElement('div');
+ outerStyle = outer.style;
+ outerStyle.position = 'absolute';
+ outerStyle.width = '100px';
+ outerStyle.height = '100px';
+ outerStyle.overflow = SCROLL;
+ outerStyle.top = '-9999px';
+ document.body.appendChild(outer);
+ scrollbarWidth = outer.offsetWidth - outer.clientWidth;
+ document.body.removeChild(outer);
+ return scrollbarWidth;
+ };
+ /**
+ @class NanoScroll
+ @param element {HTMLElement|Node} the main element
+ @param options {Object} nanoScroller's options
+ @constructor
+ */
+
+ NanoScroll = (function() {
+
+ function NanoScroll(el, options) {
+ this.el = el;
+ this.options = options;
+ BROWSER_SCROLLBAR_WIDTH || (BROWSER_SCROLLBAR_WIDTH = getBrowserScrollbarWidth());
+ this.$el = $(this.el);
+ this.doc = $(document);
+ this.win = $(window);
+ this.generate();
+ this.createEvents();
+ this.addEvents();
+ this.reset();
+ }
+
+ /**
+ Prevents the rest of the page being scrolled
+ when user scrolls the `.content` element.
+ @method preventScrolling
+ @param event {Event}
+ @param direction {String} Scroll direction (up or down)
+ @private
+ */
+
+
+ NanoScroll.prototype.preventScrolling = function(e, direction) {
+ if (!this.isActive) {
+ return;
+ }
+ if (e.type === DOMSCROLL) {
+ if (direction === DOWN && e.originalEvent.detail > 0 || direction === UP && e.originalEvent.detail < 0) {
+ e.preventDefault();
+ }
+ } else if (e.type === MOUSEWHEEL) {
+ if (!e.originalEvent || !e.originalEvent.wheelDelta) {
+ return;
+ }
+ if (direction === DOWN && e.originalEvent.wheelDelta < 0 || direction === UP && e.originalEvent.wheelDelta > 0) {
+ e.preventDefault();
+ }
+ }
+ };
+
+ /**
+ Updates those nanoScroller properties that
+ are related to current scrollbar position.
+ @method updateScrollValues
+ @private
+ */
+
+
+ NanoScroll.prototype.updateScrollValues = function() {
+ var content;
+ content = this.content;
+ this.maxScrollTop = content.scrollHeight - content.clientHeight;
+ this.contentScrollTop = content.scrollTop;
+ this.maxSliderTop = this.paneHeight - this.sliderHeight;
+ this.sliderTop = this.contentScrollTop * this.maxSliderTop / this.maxScrollTop;
+ };
+
+ /**
+ Creates event related methods
+ @method createEvents
+ @private
+ */
+
+
+ NanoScroll.prototype.createEvents = function() {
+ var _this = this;
+ this.events = {
+ down: function(e) {
+ _this.isBeingDragged = true;
+ _this.offsetY = e.pageY - _this.slider.offset().top;
+ _this.pane.addClass('active');
+ _this.doc.bind(MOUSEMOVE, _this.events[DRAG]).bind(MOUSEUP, _this.events[UP]);
+ return false;
+ },
+ drag: function(e) {
+ _this.sliderY = e.pageY - _this.$el.offset().top - _this.offsetY;
+ _this.scroll();
+ _this.updateScrollValues();
+ if (_this.contentScrollTop >= _this.maxScrollTop) {
+ _this.$el.trigger('scrollend');
+ } else if (_this.contentScrollTop === 0) {
+ _this.$el.trigger('scrolltop');
+ }
+ return false;
+ },
+ up: function(e) {
+ _this.isBeingDragged = false;
+ _this.pane.removeClass('active');
+ _this.doc.unbind(MOUSEMOVE, _this.events[DRAG]).unbind(MOUSEUP, _this.events[UP]);
+ return false;
+ },
+ resize: function(e) {
+ _this.reset();
+ },
+ panedown: function(e) {
+ _this.sliderY = (e.offsetY || e.originalEvent.layerY) - (_this.sliderHeight * 0.5);
+ _this.scroll();
+ _this.events.down(e);
+ return false;
+ },
+ scroll: function(e) {
+ if (_this.isBeingDragged) {
+ return;
+ }
+ _this.updateScrollValues();
+ _this.sliderY = _this.sliderTop;
+ _this.slider.css({
+ top: _this.sliderTop
+ });
+ if (e == null) {
+ return;
+ }
+ if (_this.contentScrollTop >= _this.maxScrollTop) {
+ if (_this.options.preventPageScrolling) {
+ _this.preventScrolling(e, DOWN);
+ }
+ _this.$el.trigger('scrollend');
+ } else if (_this.contentScrollTop === 0) {
+ if (_this.options.preventPageScrolling) {
+ _this.preventScrolling(e, UP);
+ }
+ _this.$el.trigger('scrolltop');
+ }
+ },
+ wheel: function(e) {
+ if (e == null) {
+ return;
+ }
+ _this.sliderY += -e.wheelDeltaY || -e.delta;
+ _this.scroll();
+ return false;
+ }
+ };
+ };
+
+ /**
+ Adds event listeners with jQuery.
+ @method addEvents
+ @private
+ */
+
+
+ NanoScroll.prototype.addEvents = function() {
+ var events;
+ this.removeEvents();
+ events = this.events;
+ if (!this.options.disableResize) {
+ this.win.bind(RESIZE, events[RESIZE]);
+ }
+ this.slider.bind(MOUSEDOWN, events[DOWN]);
+ this.pane.bind(MOUSEDOWN, events[PANEDOWN]).bind("" + MOUSEWHEEL + " " + DOMSCROLL, events[WHEEL]);
+ this.$content.bind("" + SCROLL + " " + MOUSEWHEEL + " " + DOMSCROLL + " " + TOUCHMOVE, events[SCROLL]);
+ };
+
+ /**
+ Removes event listeners with jQuery.
+ @method removeEvents
+ @private
+ */
+
+
+ NanoScroll.prototype.removeEvents = function() {
+ var events;
+ events = this.events;
+ this.win.unbind(RESIZE, events[RESIZE]);
+ this.slider.unbind();
+ this.pane.unbind();
+ this.$content.unbind("" + SCROLL + " " + MOUSEWHEEL + " " + DOMSCROLL + " " + TOUCHMOVE, events[SCROLL]);
+ };
+
+ /**
+ Generates nanoScroller's scrollbar and elements for it.
+ @method generate
+ @chainable
+ @private
+ */
+
+
+ NanoScroll.prototype.generate = function() {
+ var contentClass, cssRule, options, paneClass, sliderClass;
+ options = this.options;
+ paneClass = options.paneClass, sliderClass = options.sliderClass, contentClass = options.contentClass;
+ if (!this.$el.find("" + paneClass).length && !this.$el.find("" + sliderClass).length) {
+ this.$el.append("");
+ }
+ this.$content = this.$el.children("." + contentClass);
+ this.$content.attr('tabindex', 0);
+ this.content = this.$content[0];
+ this.slider = this.$el.find("." + sliderClass);
+ this.pane = this.$el.find("." + paneClass);
+ if (BROWSER_SCROLLBAR_WIDTH) {
+ cssRule = this.$el.css('direction') === 'rtl' ? {
+ left: -BROWSER_SCROLLBAR_WIDTH
+ } : {
+ right: -BROWSER_SCROLLBAR_WIDTH
+ };
+ this.$el.addClass('has-scrollbar');
+ }
+ if (options.iOSNativeScrolling) {
+ cssRule || (cssRule = {});
+ cssRule.WebkitOverflowScrolling = 'touch';
+ }
+ if (cssRule != null) {
+ this.$content.css(cssRule);
+ }
+ return this;
+ };
+
+ /**
+ @method restore
+ @private
+ */
+
+
+ NanoScroll.prototype.restore = function() {
+ this.stopped = false;
+ this.pane.show();
+ this.addEvents();
+ };
+
+ /**
+ Resets nanoScroller's scrollbar.
+ @method reset
+ @chainable
+ @example
+ $(".nano").nanoScroller();
+ */
+
+
+ NanoScroll.prototype.reset = function() {
+ var content, contentHeight, contentStyle, contentStyleOverflowY, paneBottom, paneHeight, paneOuterHeight, paneTop, sliderHeight;
+ if (!this.$el.find("." + this.options.paneClass).length) {
+ this.generate().stop();
+ }
+ if (this.stopped) {
+ this.restore();
+ }
+ content = this.content;
+ contentStyle = content.style;
+ contentStyleOverflowY = contentStyle.overflowY;
+ if (BROWSER_IS_IE7) {
+ this.$content.css({
+ height: this.$content.height()
+ });
+ }
+ contentHeight = content.scrollHeight + BROWSER_SCROLLBAR_WIDTH;
+ paneHeight = this.pane.outerHeight();
+ paneTop = parseInt(this.pane.css('top'), 10);
+ paneBottom = parseInt(this.pane.css('bottom'), 10);
+ paneOuterHeight = paneHeight + paneTop + paneBottom;
+ sliderHeight = Math.round(paneOuterHeight / contentHeight * paneOuterHeight);
+ if (sliderHeight < this.options.sliderMinHeight) {
+ sliderHeight = this.options.sliderMinHeight;
+ } else if ((this.options.sliderMaxHeight != null) && sliderHeight > this.options.sliderMaxHeight) {
+ sliderHeight = this.options.sliderMaxHeight;
+ }
+ if (contentStyleOverflowY === SCROLL && contentStyle.overflowX !== SCROLL) {
+ sliderHeight += BROWSER_SCROLLBAR_WIDTH;
+ }
+ this.maxSliderTop = paneOuterHeight - sliderHeight;
+ this.contentHeight = contentHeight;
+ this.paneHeight = paneHeight;
+ this.paneOuterHeight = paneOuterHeight;
+ this.sliderHeight = sliderHeight;
+ this.slider.height(sliderHeight);
+ this.events.scroll();
+ this.pane.show();
+ this.isActive = true;
+ if ((content.scrollHeight === content.clientHeight) || (this.pane.outerHeight(true) >= content.scrollHeight && contentStyleOverflowY !== SCROLL)) {
+ this.pane.hide();
+ this.isActive = false;
+ } else if (this.el.clientHeight === content.scrollHeight && contentStyleOverflowY === SCROLL) {
+ this.slider.hide();
+ } else {
+ this.slider.show();
+ }
+ this.pane.css({
+ opacity: (this.options.alwaysVisible ? 1 : ''),
+ visibility: (this.options.alwaysVisible ? 'visible' : '')
+ });
+ return this;
+ };
+
+ /**
+ @method scroll
+ @private
+ @example
+ $(".nano").nanoScroller({ scroll: 'top' });
+ */
+
+
+ NanoScroll.prototype.scroll = function() {
+ if (!this.isActive) {
+ return;
+ }
+ this.sliderY = Math.max(0, this.sliderY);
+ this.sliderY = Math.min(this.maxSliderTop, this.sliderY);
+ this.$content.scrollTop((this.paneHeight - this.contentHeight + BROWSER_SCROLLBAR_WIDTH) * this.sliderY / this.maxSliderTop * -1);
+ this.slider.css({
+ top: this.sliderY
+ });
+ return this;
+ };
+
+ /**
+ Scroll at the bottom with an offset value
+ @method scrollBottom
+ @param offsetY {Number}
+ @chainable
+ @example
+ $(".nano").nanoScroller({ scrollBottom: value });
+ */
+
+
+ NanoScroll.prototype.scrollBottom = function(offsetY) {
+ if (!this.isActive) {
+ return;
+ }
+ this.reset();
+ this.$content.scrollTop(this.contentHeight - this.$content.height() - offsetY).trigger(MOUSEWHEEL);
+ return this;
+ };
+
+ /**
+ Scroll at the top with an offset value
+ @method scrollTop
+ @param offsetY {Number}
+ @chainable
+ @example
+ $(".nano").nanoScroller({ scrollTop: value });
+ */
+
+
+ NanoScroll.prototype.scrollTop = function(offsetY) {
+ if (!this.isActive) {
+ return;
+ }
+ this.reset();
+ this.$content.scrollTop(+offsetY).trigger(MOUSEWHEEL);
+ return this;
+ };
+
+ /**
+ Scroll to an element
+ @method scrollTo
+ @param node {Node} A node to scroll to.
+ @chainable
+ @example
+ $(".nano").nanoScroller({ scrollTo: $('#a_node') });
+ */
+
+
+ NanoScroll.prototype.scrollTo = function(node) {
+ if (!this.isActive) {
+ return;
+ }
+ this.reset();
+ this.scrollTop($(node).get(0).offsetTop);
+ return this;
+ };
+
+ /**
+ To stop the operation.
+ This option will tell the plugin to disable all event bindings and hide the gadget scrollbar from the UI.
+ @method stop
+ @chainable
+ @example
+ $(".nano").nanoScroller({ stop: true });
+ */
+
+
+ NanoScroll.prototype.stop = function() {
+ this.stopped = true;
+ this.removeEvents();
+ this.pane.hide();
+ return this;
+ };
+
+ /**
+ To flash the scrollbar gadget for an amount of time defined in plugin settings (defaults to 1,5s).
+ Useful if you want to show the user (e.g. on pageload) that there is more content waiting for him.
+ @method flash
+ @chainable
+ @example
+ $(".nano").nanoScroller({ flash: true });
+ */
+
+
+ NanoScroll.prototype.flash = function() {
+ var _this = this;
+ if (!this.isActive) {
+ return;
+ }
+ this.reset();
+ this.pane.addClass('flashed');
+ setTimeout(function() {
+ _this.pane.removeClass('flashed');
+ }, this.options.flashDelay);
+ return this;
+ };
+
+ return NanoScroll;
+
+ })();
+ $.fn.nanoScroller = function(settings) {
+ return this.each(function() {
+ var options, scrollbar;
+ if (!(scrollbar = this.nanoscroller)) {
+ options = $.extend({}, defaults, settings);
+ this.nanoscroller = scrollbar = new NanoScroll(this, options);
+ }
+ if (settings && typeof settings === "object") {
+ $.extend(scrollbar.options, settings);
+ if (settings.scrollBottom) {
+ return scrollbar.scrollBottom(settings.scrollBottom);
+ }
+ if (settings.scrollTop) {
+ return scrollbar.scrollTop(settings.scrollTop);
+ }
+ if (settings.scrollTo) {
+ return scrollbar.scrollTo(settings.scrollTo);
+ }
+ if (settings.scroll === 'bottom') {
+ return scrollbar.scrollBottom(0);
+ }
+ if (settings.scroll === 'top') {
+ return scrollbar.scrollTop(0);
+ }
+ if (settings.scroll && settings.scroll instanceof $) {
+ return scrollbar.scrollTo(settings.scroll);
+ }
+ if (settings.stop) {
+ return scrollbar.stop();
+ }
+ if (settings.flash) {
+ return scrollbar.flash();
+ }
+ }
+ return scrollbar.reset();
+ });
+ };
+})(jQuery, window, document);
diff --git a/ajax/libs/jquery.nanoscroller/0.7/javascripts/jquery.nanoscroller.min.js b/ajax/libs/jquery.nanoscroller/0.7/javascripts/jquery.nanoscroller.min.js
new file mode 100644
index 000000000..b1211b1e6
--- /dev/null
+++ b/ajax/libs/jquery.nanoscroller/0.7/javascripts/jquery.nanoscroller.min.js
@@ -0,0 +1,3 @@
+/*! nanoScrollerJS v0.7 (c) 2012 James Florentino; Licensed MIT */
+
+(function(e,t,n){"use strict";var r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b,w,E,S,x;S={paneClass:"pane",sliderClass:"slider",contentClass:"content",iOSNativeScrolling:!1,preventPageScrolling:!1,disableResize:!1,alwaysVisible:!1,flashDelay:1500,sliderMinHeight:20,sliderMaxHeight:null},y="scrollbar",g="scroll",l="mousedown",c="mousemove",p="mousewheel",h="mouseup",m="resize",u="drag",w="up",v="panedown",s="DOMMouseScroll",o="down",E="wheel",a="keydown",f="keyup",b="touchmove",r=t.navigator.appName==="Microsoft Internet Explorer"&&/msie 7./i.test(t.navigator.appVersion)&&t.ActiveXObject,i=null,x=function(){var e,t,r;return e=n.createElement("div"),t=e.style,t.position="absolute",t.width="100px",t.height="100px",t.overflow=g,t.top="-9999px",n.body.appendChild(e),r=e.offsetWidth-e.clientWidth,n.body.removeChild(e),r},d=function(){function a(r,s){this.el=r,this.options=s,i||(i=x()),this.$el=e(this.el),this.doc=e(n),this.win=e(t),this.generate(),this.createEvents(),this.addEvents(),this.reset()}return a.prototype.preventScrolling=function(e,t){if(!this.isActive)return;if(e.type===s)(t===o&&e.originalEvent.detail>0||t===w&&e.originalEvent.detail<0)&&e.preventDefault();else if(e.type===p){if(!e.originalEvent||!e.originalEvent.wheelDelta)return;(t===o&&e.originalEvent.wheelDelta<0||t===w&&e.originalEvent.wheelDelta>0)&&e.preventDefault()}},a.prototype.updateScrollValues=function(){var e;e=this.content,this.maxScrollTop=e.scrollHeight-e.clientHeight,this.contentScrollTop=e.scrollTop,this.maxSliderTop=this.paneHeight-this.sliderHeight,this.sliderTop=this.contentScrollTop*this.maxSliderTop/this.maxScrollTop},a.prototype.createEvents=function(){var e=this;this.events={down:function(t){return e.isBeingDragged=!0,e.offsetY=t.pageY-e.slider.offset().top,e.pane.addClass("active"),e.doc.bind(c,e.events[u]).bind(h,e.events[w]),!1},drag:function(t){return e.sliderY=t.pageY-e.$el.offset().top-e.offsetY,e.scroll(),e.updateScrollValues(),e.contentScrollTop>=e.maxScrollTop?e.$el.trigger("scrollend"):e.contentScrollTop===0&&e.$el.trigger("scrolltop"),!1},up:function(t){return e.isBeingDragged=!1,e.pane.removeClass("active"),e.doc.unbind(c,e.events[u]).unbind(h,e.events[w]),!1},resize:function(t){e.reset()},panedown:function(t){return e.sliderY=(t.offsetY||t.originalEvent.layerY)-e.sliderHeight*.5,e.scroll(),e.events.down(t),!1},scroll:function(t){if(e.isBeingDragged)return;e.updateScrollValues(),e.sliderY=e.sliderTop,e.slider.css({top:e.sliderTop});if(t==null)return;e.contentScrollTop>=e.maxScrollTop?(e.options.preventPageScrolling&&e.preventScrolling(t,o),e.$el.trigger("scrollend")):e.contentScrollTop===0&&(e.options.preventPageScrolling&&e.preventScrolling(t,w),e.$el.trigger("scrolltop"))},wheel:function(t){if(t==null)return;return e.sliderY+=-t.wheelDeltaY||-t.delta,e.scroll(),!1}}},a.prototype.addEvents=function(){var e;this.removeEvents(),e=this.events,this.options.disableResize||this.win.bind(m,e[m]),this.slider.bind(l,e[o]),this.pane.bind(l,e[v]).bind(""+p+" "+s,e[E]),this.$content.bind(""+g+" "+p+" "+s+" "+b,e[g])},a.prototype.removeEvents=function(){var e;e=this.events,this.win.unbind(m,e[m]),this.slider.unbind(),this.pane.unbind(),this.$content.unbind(""+g+" "+p+" "+s+" "+b,e[g])},a.prototype.generate=function(){var e,t,n,r,s;return n=this.options,r=n.paneClass,s=n.sliderClass,e=n.contentClass,!this.$el.find(""+r).length&&!this.$el.find(""+s).length&&this.$el.append(''),this.$content=this.$el.children("."+e),this.$content.attr("tabindex",0),this.content=this.$content[0],this.slider=this.$el.find("."+s),this.pane=this.$el.find("."+r),i&&(t=this.$el.css("direction")==="rtl"?{left:-i}:{right:-i},this.$el.addClass("has-scrollbar")),n.iOSNativeScrolling&&(t||(t={}),t.WebkitOverflowScrolling="touch"),t!=null&&this.$content.css(t),this},a.prototype.restore=function(){this.stopped=!1,this.pane.show(),this.addEvents()},a.prototype.reset=function(){var e,t,n,s,o,u,a,f,l;return this.$el.find("."+this.options.paneClass).length||this.generate().stop(),this.stopped&&this.restore(),e=this.content,n=e.style,s=n.overflowY,r&&this.$content.css({height:this.$content.height()}),t=e.scrollHeight+i,u=this.pane.outerHeight(),f=parseInt(this.pane.css("top"),10),o=parseInt(this.pane.css("bottom"),10),a=u+f+o,l=Math.round(a/t*a),lthis.options.sliderMaxHeight&&(l=this.options.sliderMaxHeight),s===g&&n.overflowX!==g&&(l+=i),this.maxSliderTop=a-l,this.contentHeight=t,this.paneHeight=u,this.paneOuterHeight=a,this.sliderHeight=l,this.slider.height(l),this.events.scroll(),this.pane.show(),this.isActive=!0,e.scrollHeight===e.clientHeight||this.pane.outerHeight(!0)>=e.scrollHeight&&s!==g?(this.pane.hide(),this.isActive=!1):this.el.clientHeight===e.scrollHeight&&s===g?this.slider.hide():this.slider.show(),this.pane.css({opacity:this.options.alwaysVisible?1:"",visibility:this.options.alwaysVisible?"visible":""}),this},a.prototype.scroll=function(){if(!this.isActive)return;return this.sliderY=Math.max(0,this.sliderY),this.sliderY=Math.min(this.maxSliderTop,this.sliderY),this.$content.scrollTop((this.paneHeight-this.contentHeight+i)*this.sliderY/this.maxSliderTop*-1),this.slider.css({top:this.sliderY}),this},a.prototype.scrollBottom=function(e){if(!this.isActive)return;return this.reset(),this.$content.scrollTop(this.contentHeight-this.$content.height()-e).trigger(p),this},a.prototype.scrollTop=function(e){if(!this.isActive)return;return this.reset(),this.$content.scrollTop(+e).trigger(p),this},a.prototype.scrollTo=function(t){if(!this.isActive)return;return this.reset(),this.scrollTop(e(t).get(0).offsetTop),this},a.prototype.stop=function(){return this.stopped=!0,this.removeEvents(),this.pane.hide(),this},a.prototype.flash=function(){var e=this;if(!this.isActive)return;return this.reset(),this.pane.addClass("flashed"),setTimeout(function(){e.pane.removeClass("flashed")},this.options.flashDelay),this},a}(),e.fn.nanoScroller=function(t){return this.each(function(){var n,r;(r=this.nanoscroller)||(n=e.extend({},S,t),this.nanoscroller=r=new d(this,n));if(t&&typeof t=="object"){e.extend(r.options,t);if(t.scrollBottom)return r.scrollBottom(t.scrollBottom);if(t.scrollTop)return r.scrollTop(t.scrollTop);if(t.scrollTo)return r.scrollTo(t.scrollTo);if(t.scroll==="bottom")return r.scrollBottom(0);if(t.scroll==="top")return r.scrollTop(0);if(t.scroll&&t.scroll instanceof e)return r.scrollTo(t.scroll);if(t.stop)return r.stop();if(t.flash)return r.flash()}return r.reset()})}})(jQuery,window,document);
\ No newline at end of file