/**
* jQuery mousehold plugin - fires an event while the mouse is clicked down.
* Additionally, the function, when executed, is passed a single
* argument representing the count of times the event has been fired during
* this session of the mouse hold.
*
* @author Remy Sharp (leftlogic.com)
* @date 2006-12-15
* @example $("img").mousehold(function(i){  }, 200)
* @desc Repeats firing the passed function while the mouse is clicked down
*
* @name mousehold
* @type jQuery
* @param Number timeout The frequency to repeat the event in milliseconds
* @param Function fn A function to execute
* @cat Plugin
*/

jQuery.fn.mousehold = function(f, timeout)
{
	if (!timeout)
		timeout = 100;

	if (f && typeof f == 'function')
	{
		var timer = 0;
		var fireStep = 0;
		return this.each(function()
		{
			jQuery(this).mousedown(function()
			{
				fireStep = 1;
				var ctr = 0;
				var t = this;
				timer = setInterval(function()
				{
					ctr++;
					f.call(t, ctr);
					fireStep = 2;
				}, timeout);
			})

			clearMousehold = function()
			{
				clearInterval(timer);
				if (fireStep == 1) f.call(this, 1);
				fireStep = 0;
			}

			jQuery(this).mouseout(clearMousehold);
			jQuery(this).mouseup(clearMousehold);
		})
	}
}