﻿/**
 * 
 * credits for this plugin go to brandonaaron.net
 *  
 * unfortunately his site is down
 * 
 * @param {Object} up
 * @param {Object} down
 * @param {Object} preventDefault
 */
jQuery.fn.extend({
 mousewheel: function(up, down, preventDefault) {
  return this.hover(
   function() {
    jQuery.event.mousewheel.giveFocus(this, up, down, preventDefault);
   },
   function() {
    jQuery.event.mousewheel.removeFocus(this);
   }
  );
 },
 mousewheeldown: function(fn, preventDefault) {
  return this.mousewheel(function(){}, fn, preventDefault);
 },
 mousewheelup: function(fn, preventDefault) {
  return this.mousewheel(fn, function(){}, preventDefault);
 },
 unmousewheel: function() {
  return this.each(function() {
   jQuery(this).unmouseover().unmouseout();
   jQuery.event.mousewheel.removeFocus(this);
  });
 },
 unmousewheeldown: jQuery.fn.unmousewheel,
 unmousewheelup: jQuery.fn.unmousewheel
});


jQuery.event.mousewheel = {
 giveFocus: function(el, up, down, preventDefault) {
  if (el._handleMousewheel) jQuery(el).unmousewheel();
  
  if (preventDefault == window.undefined && down && down.constructor != Function) {
   preventDefault = down;
   down = null;
  }
  
  el._handleMousewheel = function(event) {
   if (!event) event = window.event;
   if (preventDefault)
    if (event.preventDefault) event.preventDefault();
    else event.returnValue = false;
   var delta = 0;
   if (event.wheelDelta) {
    delta = event.wheelDelta/120;
    if (window.opera) delta = -delta;
   } else if (event.detail) {
    delta = -event.detail/3;
   }
   if (up && (delta > 0 || !down))
    up.apply(el, [event, delta]);
   else if (down && delta < 0)
    down.apply(el, [event, delta]);
  };
  
  if (window.addEventListener)
   window.addEventListener('DOMMouseScroll', el._handleMousewheel, false);
  window.onmousewheel = document.onmousewheel = el._handleMousewheel;
 },
 
 removeFocus: function(el) {
  if (!el._handleMousewheel) return;
  
  if (window.removeEventListener)
   window.removeEventListener('DOMMouseScroll', el._handleMousewheel, false);
  window.onmousewheel = document.onmousewheel = null;
  el._handleMousewheel = null;
 }
};