;(function($) {
	$.fn.MMXMU_inkblobs = function(options)
	{
		var lastx = 0;
		var opts = $.extend({}, $.fn.MMXMU_inkblobs.defaults, options);
		return jQuery;
	}
	$.fn.MMXMU_inkblobs.color = "#000";
	$.fn.MMXMU_inkblobs.blobs = [];
	$.fn.MMXMU_inkblobs.current_blob = 0;
	$.fn.MMXMU_inkblobs.clicks = [];
	
	$.fn.MMXMU_inkblobs.drawBlobs = function (blobs)
	{
		// alert (blobs);
		$.fn.MMXMU_inkblobs.blobs = blobs.clicks;
		$.fn.MMXMU_inkblobs.current_blob = blobs.clicks.length-1;
		$.fn.MMXMU_inkblobs.redraw ();
	}
	
	
	$.fn.MMXMU_inkblobs.redraw = function ()
	{
		if ($.fn.MMXMU_inkblobs.blobs.length > 0)
		{
			$('#background').width($(window).width());
			$('#background').height($(window).height());
			$.fn.MMXMU_inkblobs.clearCanvas();
			$.fn.MMXMU_inkblobs.current_blob = $.fn.MMXMU_inkblobs.blobs.length-1;
			$.fn.MMXMU_inkblobs.color = $.fn.MMXMU_inkblobs.getPrettyColors ();
			$.fn.MMXMU_inkblobs.startDrawBlobs();
		}
	}
	
	$.fn.MMXMU_inkblobs.updateClicks = function ()
	{
		var clicks = $.fn.MMXMU_inkblobs.clicks;
		var l = clicks.length;
		var i = l;
		var c = 0;
		while (i-- && c < 15)
		{
			x = clicks[i][0];
			y = clicks[i][1];
			var cvs = jQuery('#background').getCanvas();
			var ctx = cvs.getContext("2d");
			var color = $.fn.MMXMU_inkblobs.color;
			var rad = 3+c;
			jQuery("#background").fillEllipse(x-rad, y-rad, rad*2, rad*2, {color: color, opacity: .03});		
			c++;
		}
	}
	
	$.fn.MMXMU_inkblobs.drawClick =  function (e)
	{
		var r = 5;
		var t = .3;
		var x = e.pageX;
		var y = e.pageY-$(window).scrollTop();
		$.fn.MMXMU_inkblobs.drawInkBlob(x, y, r, t);
		if ($(this).hasClass('thickbox') || $(this).parents('a.thickbox').length) // is thickbox link
		{
			$.fn.MMXMU_inkblobs.redraw();
		}
		$.fn.MMXMU_inkblobs.updateClicks();
		$.fn.MMXMU_inkblobs.clicks.push([x, y]);
	}
	
	$.fn.MMXMU_inkblobs.startDrawBlobs = function ()
	{
		var blobs = $.fn.MMXMU_inkblobs.blobs;
		var total = blobs.length;
		var opts = $.fn.MMXMU_inkblobs.defaults;
		var step = (opts.max_blob_rad - opts.min_blob_rad) / total;
		var rel = $($.fn.MMXMU_inkblobs.defaults.relative_to);
		var i = $.fn.MMXMU_inkblobs.current_blob;
		// alert (blobs)
		if (blobs[i])
		{
			var x = blobs[i][0]+rel.offset().left;
			var y = blobs[i][1];//-$(window).scrollTop();
			var t = (total-i)/total;
			$.fn.MMXMU_inkblobs.drawInkBlob(x, y, step*i+opts.min_blob_rad/2, t);
		}
		var curr = $.fn.MMXMU_inkblobs.current_blob--;
		if (curr > 0)//< $.fn.MMXMU_inkblobs.blobs.length-1) 
			setTimeout($.fn.MMXMU_inkblobs.startDrawBlobs,40); 
	}
	
	$.fn.MMXMU_inkblobs.drawInkBlob = function (x, y, r, t)
	{
	//	if ($.browser.msie) 
		{
			$.fn.MMXMU_inkblobs.emulateGradient(x,y,r,t);
			return
		}
		x = x-r/2;
		y = y-r/2;
		var o = Math.round(t);
		var cvs = jQuery('#background').getCanvas();
		var ctx = cvs.getContext("2d");
	  	// var radgrad = ctx.createRadialGradient(x+r,y+r,r/10,x+r,y+r,r);
		var rad_c_x = x+r;
		var rad_c_y = y+r;
		var rad_c_r = r;
		var rad_o_x = x+r;
		var rad_o_y = y+r;
		var rad_o_r = r/10;
	  	var radgrad = ctx.createRadialGradient(rad_c_x, rad_o_y, rad_c_r, rad_o_x, rad_o_y, rad_o_r);
	  	radgrad.addColorStop(0, '#000');
		// radgrad.addColorStop(.5, 'rgba(0,0,0,0.3)')
	  	// radgrad.addColorStop(0.6, 'rgba(0,0,0,.4)');
	  	// radgrad.addColorStop(0.75, 'rgba(0,0,0,.2)');
	  	// radgrad.addColorStop(0.85, 'rgba(0,0,0,.2)');
		radgrad.addColorStop(1, 'rgba(0,0,0,0)');
		  		
		jQuery("#background").fillEllipse(x, y, r*2, r*2, {color: '#000', opacity: t, gradient:radgrad});
		//jQuery("#background").fillEllipse(x, y, r*2, r*2, {color: '#000', opacity: t});
	}
	
	$.fn.MMXMU_inkblobs.emulateGradient = function (x, y, r, t)
	{
		x = x;//-r/2;
		y = y;//-r/2;
		var cvs = jQuery('#background').getCanvas();
		var ctx = cvs.getContext("2d");
		var max_steps = $.fn.MMXMU_inkblobs.defaults.gradient_max_steps;
		var step = steps = r>max_steps ? max_steps:Math.floor(r);
		var color = $.fn.MMXMU_inkblobs.color;
//		var color = '#03f';
		do
		{
			var rad = r/steps*step;
			jQuery("#background").fillEllipse(x-rad, y-rad, rad*2, rad*2, {color: color, opacity: t/steps});
		} while (step--)
	}
	
	$.fn.MMXMU_inkblobs.getPrettyColors = function ()
	{
		var ret = "#";
		var offset = 64;
		var max = 255-offset;
		var r = Math.round(Math.random()*255);
		var g = Math.round(Math.random()*255);
		var b = Math.round(Math.random()*255);
		if ((r < offset && g < offset && b < offset))// || (r > max && g > max && b > max))
		{
			// alert ("wrong");
			return $.fn.MMXMU_inkblobs.getPrettyColors();
		}
		else
		{
			ret += $.fn.MMXMU_inkblobs.hexString(r);
			ret += $.fn.MMXMU_inkblobs.hexString(g);
			ret += $.fn.MMXMU_inkblobs.hexString(b);
		}
		return ret;
	}
	
	$.fn.MMXMU_inkblobs.hexString = function (n)
	{
		return n.toString(16).pad(2, '0', 2);
	}
		
	$.fn.MMXMU_inkblobs.clearCanvas = function ()
	{
		var el = $('#background');
		var cvs = el.getCanvas();
		var ctx = cvs.getContext("2d");
		ctx.clearRect(0,0,el.width(),el.height()); // clear canvas
	}
	
	// DEFAULTS	
	$.fn.MMXMU_inkblobs.defaults = 
	{
		min_blob_rad: 3,
		max_blob_rad: 128,
		max_num_blobs: 200,
		relative_to: 'body',
		gradient_max_steps: 10
	}

	
})(jQuery);

String.prototype.pad = function(l, s, t){
    return s || (s = " "), (l -= this.length) > 0 ? (s = new Array(Math.ceil(l / s.length)
        + 1).join(s)).substr(0, t = !t ? l : t == 1 ? 0 : Math.ceil(l / 2))
        + this + s.substr(0, l - t) : this;
};

jQuery.debug = function (s)
{
	var e = $('#status');
	e.html(s);
	e.show();
	e.click(jQuery.debug.hide)
}
jQuery.debug.hide = function (e)
{
	$(this).hide();
	e.stopPropagation();
	return false;
}

