(function(){
	 var special = jQuery.event.special,
	 uid1 = 'D' + (+new Date()),
	 uid2 = 'D' + (+new Date() + 1);


	 special.scrollstart = {
	 setup: function() {


	 var timer,
	 handler = function(evt) {

	var _self = this,
	 _args = arguments;


	if (timer) {
	 clearTimeout(timer);
	 } else {
	 evt.type = 'scrollstart';
	 jQuery.event.handle.apply(_self, _args);
	 }


	timer = setTimeout( function(){
	 timer = null;
	 }, special.scrollstop.latency);


	};


	jQuery(this).bind('scroll', handler).data(uid1, handler);


	},
	 teardown: function(){
	 jQuery(this).unbind( 'scroll', jQuery(this).data(uid1) );
	 }
	 };


	special.scrollstop = {
	 latency: 300,
	 setup: function() {


	var timer,
	 handler = function(evt) {


	var _self = this,
	 _args = arguments;


	if (timer) {
	 clearTimeout(timer);
	 }


	timer = setTimeout( function(){


	timer = null;
	 evt.type = 'scrollstop';
	 jQuery.event.handle.apply(_self, _args);


	}, special.scrollstop.latency);


	};


	jQuery(this).bind('scroll', handler).data(uid2, handler);


	},
	 teardown: function() {
	 jQuery(this).unbind( 'scroll', jQuery(this).data(uid2) );
	 }
	 };


	})();
