/**
 * Crop signature canvas to only contain the signature and no whitespace.
 *
 * @returns The cropped canvas
 * @credit - https://github.com/szimek/signature_pad/issues/49#issuecomment-260976909
 */
SignaturePad.prototype.crop = function() {
  var canvas = this._ctx.canvas;

	// First duplicate the canvas to not alter the original
	var croppedCanvas = document.createElement('canvas'),
	croppedCtx    = croppedCanvas.getContext('2d');

	croppedCanvas.width  = canvas.width;
	croppedCanvas.height = canvas.height;
	croppedCtx.drawImage(canvas, 0, 0);

	// Next do the actual cropping
	var w         = croppedCanvas.width,
	h         = croppedCanvas.height,
	pix       = {x:[], y:[]},
	imageData = croppedCtx.getImageData(0,0,croppedCanvas.width,croppedCanvas.height),
	x, y, index;

	for (y = 0; y < h; y++) {
		for (x = 0; x < w; x++) {
			index = (y * w + x) * 4;
			if (imageData.data[index+3] > 0) {
				pix.x.push(x);
				pix.y.push(y);

			}
		}
	}
	pix.x.sort(function(a,b){return a-b});
	pix.y.sort(function(a,b){return a-b});
	var n = pix.x.length-1;

	w = pix.x[n] - pix.x[0];
	h = pix.y[n] - pix.y[0];
	var cut = croppedCtx.getImageData(pix.x[0], pix.y[0], w, h);

	croppedCanvas.width = w;
	croppedCanvas.height = h;
	croppedCtx.putImageData(cut, 0, 0);

	return croppedCanvas;
};
