/*  * jQuery.clickNScroll v1.0 * * Copyright (c) 2010 Joshua Faulkenberry * Dual licensed under the MIT and GPL licenses. * Joshua Faulkenberry * * $Date: 2010-10-25 18:55:27 -0700 (Mon, 25 Oct 2010) $ * $Revision: 5 $ */(function($){     jQuery.extend({      mouse: {         x: 0,         y: 0      },      clickNScroll: {         mousedown:false,         emaX: 0,         emaY: 0      }     });      jQuery.fn.extend({      clickNScroll: function(options) {         var ops = $.extend({            allowHiliting:false,            acceleration:.65,            deceleration:.85,            decelRate:64,            reverse:false,            rightMouse:false,            allowThrowing:true,            throwOnOut:true         }, options || {});         return this.each(function(){              var $this = $(this).data("options", ops);                                              if(!ops.allowHiliting) {              if (jQuery.browser.msie) {                 $this.get(0).onselectstart = function () { return false; };              }               else {                  $this.get(0).onmousedown = function(e){e.preventDefault()}              }               }            $this.mousedown(function(e) {               $.clickNScroll.mousedown = $this;            }).mouseup(function(e) {                                                  if(ops.allowThrowing) sling($(this));                 $.clickNScroll.mousedown = false;            }).mouseout(function(e) {             	var from = e.relatedTarget || e.toElement;                if (!from || from.nodeName == "HTML") {	               if($.clickNScroll.mousedown && ops.allowThrowing && ops.throwOnOut)  sling($(this));   	               $.clickNScroll.mousedown = false;            	}            })           });      }         });      function sling($this) {              var ops    = $this.data("options"),              changeX = ($.clickNScroll.emaX)*ops.deceleration,             changeY = ($.clickNScroll.emaY)*ops.deceleration;                                                 if((changeX < .01 && changeX > -.01) || (changeY < .01 && changeY > -.01)) {return;}        move($this, changeX, changeY);                  setTimeout(function() {         sling($this);      }, 1000/ops.decelRate);               }      function move($this, changeX, changeY) {                                                                                 if(($.clickNScroll.emaX < 0 && changeX > 0) || ($.clickNScroll.emaX > 0 && changeX < 0)) $.clickNScroll.emaX = 0;         if(($.clickNScroll.emaY < 0 && changeY > 0) || ($.clickNScroll.emaY > 0 && changeY < 0)) $.clickNScroll.emaY = 0;                  var ops    = $this.data("options"),                                                                                    amntX = ops.acceleration * changeX + (1 - ops.acceleration) * $.clickNScroll.emaX,             amntY = ops.acceleration * changeY + (1 - ops.acceleration) * $.clickNScroll.emaY,             scrollRight = $this[0].scrollWidth ? $this[0].scrollWidth - $this[0].clientWidth : $this[0].body.scrollWidth - $this[0].body.clientWidth,             scrollBottom = $this[0].scrollHeight ? $this[0].scrollHeight - $this[0].clientHeight : $this[0].body.scrollHeight - $this[0].body.clientHeight;          if(($this.scrollLeft() <= 0 && changeX <= 0) ||  ($this.scrollLeft() >= scrollRight && changeX >= 0)) {}           else $this.scrollLeft($this.scrollLeft() + (amntX));         if(($this.scrollTop() <= 0 && changeY <= 0) ||  ($this.scrollTop() >= scrollBottom && changeY >= 0)) {}           else $this.scrollTop($this.scrollTop() + (amntY));                                                                $.clickNScroll.emaX = amntX;         $.clickNScroll.emaY = amntY;   }      $(document).mousemove(function(e) {                                           if($.clickNScroll.mousedown) {               var $this  = $.clickNScroll.mousedown,             ops    = $this.data("options");         if(ops.rightMouse && e.button != 2) return;         else if(!ops.rightMouse && e.button == 2) return;             var changeX = e.pageX - $.mouse.x,                changeY = e.pageY - $.mouse.y;          if(!ops.reverse) {          changeX = 0-changeX;          changeY = 0-changeY;         }                                                                           move($this, changeX, changeY);      }        $.mouse = {         x: e.pageX,         y: e.pageY      };                             });    })(jQuery);
