(function(factory){
if(typeof define==="function"&&define.amd){
define([ "jquery" ], factory);
}else if(typeof exports==="object"){
module.exports=factory;
}else{
factory(jQuery);
}})(function($){
var toFix=[ "wheel", "mousewheel", "DOMMouseScroll", "MozMousePixelScroll" ],
toBind=("onwheel" in window.document||window.document.documentMode >=9) ?
[ "wheel" ]:[ "mousewheel", "DomMouseScroll", "MozMousePixelScroll" ],
slice=Array.prototype.slice,
nullLowestDeltaTimeout, lowestDelta;
if($.event.fixHooks){
for(var i=toFix.length; i;){
$.event.fixHooks[ toFix[ --i ] ]=$.event.mouseHooks;
}}
var special=$.event.special.mousewheel={
version: "3.1.12",
setup: function(){
if(this.addEventListener){
for(var i=toBind.length; i;){
this.addEventListener(toBind[ --i ], handler, {passive: true});
}}else{
this.onmousewheel=handler;
}
$.data(this, "mousewheel-line-height", special.getLineHeight(this) );
$.data(this, "mousewheel-page-height", special.getPageHeight(this) );
},
teardown: function(){
if(this.removeEventListener){
for(var i=toBind.length; i;){
this.removeEventListener(toBind[ --i ], handler, {passive: true});
}}else{
this.onmousewheel=null;
}
$.removeData(this, "mousewheel-line-height");
$.removeData(this, "mousewheel-page-height");
},
getLineHeight: function(elem){
var $elem=$(elem),
$parent=$elem[ "offsetParent" in $.fn ? "offsetParent":"parent" ]();
if(!$parent.length){
$parent=$("body");
}
return parseInt($parent.css("fontSize"), 10) ||
parseInt($elem.css("fontSize"), 10)||16;
},
getPageHeight: function(elem){
return $(elem).height();
},
settings: {
adjustOldDeltas: true,
normalizeOffset: true
}};
$.fn.extend({
mousewheel: function(fn){
return fn ? this.on("mousewheel", fn):this.trigger("mousewheel");
},
unmousewheel: function(fn){
return this.off("mousewheel", fn);
}});
function handler(event){
var orgEvent=event||window.event,
args=slice.call(arguments, 1),
delta=0,
deltaX=0,
deltaY=0,
absDelta=0;
event=$.event.fix(orgEvent);
event.type="mousewheel";
if("detail" in orgEvent){
deltaY=orgEvent.detail * -1;
}
if("wheelDelta" in orgEvent){
deltaY=orgEvent.wheelDelta;
}
if("wheelDeltaY" in orgEvent){
deltaY=orgEvent.wheelDeltaY;
}
if("wheelDeltaX" in orgEvent){
deltaX=orgEvent.wheelDeltaX * -1;
}
if("axis" in orgEvent&&orgEvent.axis===orgEvent.HORIZONTAL_AXIS){
deltaX=deltaY * -1;
deltaY=0;
}
delta=deltaY===0 ? deltaX:deltaY;
if("deltaY" in orgEvent){
deltaY=orgEvent.deltaY * -1;
delta=deltaY;
}
if("deltaX" in orgEvent){
deltaX=orgEvent.deltaX;
if(deltaY===0){
delta=deltaX * -1;
}}
if(deltaY===0&&deltaX===0){
return;
}
if(orgEvent.deltaMode===1){
var lineHeight=$.data(this, "mousewheel-line-height");
delta  *=lineHeight;
deltaY *=lineHeight;
deltaX *=lineHeight;
}else if(orgEvent.deltaMode===2){
var pageHeight=$.data(this, "mousewheel-page-height");
delta  *=pageHeight;
deltaY *=pageHeight;
deltaX *=pageHeight;
}
absDelta=Math.max(Math.abs(deltaY), Math.abs(deltaX) );
if(!lowestDelta||absDelta < lowestDelta){
lowestDelta=absDelta;
if(shouldAdjustOldDeltas(orgEvent, absDelta) ){
lowestDelta /=40;
}}
if(shouldAdjustOldDeltas(orgEvent, absDelta) ){
delta  /=40;
deltaX /=40;
deltaY /=40;
}
delta=Math[ delta  >=1 ? "floor":"ceil" ](delta  / lowestDelta);
deltaX=Math[ deltaX >=1 ? "floor":"ceil" ](deltaX / lowestDelta);
deltaY=Math[ deltaY >=1 ? "floor":"ceil" ](deltaY / lowestDelta);
if(special.settings.normalizeOffset&&this.getBoundingClientRect){
var boundingRect=this.getBoundingClientRect();
event.offsetX=event.clientX - boundingRect.left;
event.offsetY=event.clientY - boundingRect.top;
}
event.deltaX=deltaX;
event.deltaY=deltaY;
event.deltaFactor=lowestDelta;
event.deltaMode=0;
args.unshift(event, delta, deltaX, deltaY);
if(nullLowestDeltaTimeout){
window.clearTimeout(nullLowestDeltaTimeout);
}
nullLowestDeltaTimeout=window.setTimeout(nullLowestDelta, 200);
return($.event.dispatch||$.event.handle).apply(this, args);
}
function nullLowestDelta(){
lowestDelta=null;
}
function shouldAdjustOldDeltas(orgEvent, absDelta){
return special.settings.adjustOldDeltas&&orgEvent.type==="mousewheel" &&
absDelta % 120===0;
}});