/*
 * Javascript Image Effects - Sepia filter
 * Copyright (c) 2008 Jacob Seidelin, cupboy@gmail.com
 * This software is free to use for non-commercial purposes. For anything else, please contact the author.
 */

jsImageFX.effects.sepia = function(oImage)
{
	if (oImage.client.hasCanvas && oImage.client.hasCanvasImageData) {

		var oCtx = oImage.canvas.getContext("2d");
		var oDataSrc = oCtx.getImageData(0, 0, oImage.width, oImage.height);
		var oDataDst = oCtx.getImageData(0, 0, oImage.width, oImage.height);
		var aDataSrc = oDataSrc.data;
		var aDataDst = oDataDst.data;
		oImage.canvasData = oDataDst;

		var h = oImage.height;
		var w = oImage.width;
		var y = h;
		do {
			var iOffsetY = (y-1)*w*4;
			var x = w;
			do {
				var iOffset = iOffsetY + (x-1)*4;

				var iOldR = aDataSrc[iOffset];
				var iOldG = aDataSrc[iOffset+1];
				var iOldB = aDataSrc[iOffset+2];

				var iR = (iOldR * 0.393 + iOldG * 0.769 + iOldB * 0.189);
				var iG = (iOldR * 0.349 + iOldG * 0.686 + iOldB * 0.168);
				var iB = (iOldR * 0.272 + iOldG * 0.534 + iOldB * 0.131);

				if (iR < 0) iR = 0; if (iR > 255) iR = 255;
				if (iG < 0) iG = 0; if (iG > 255) iG = 255;
				if (iB < 0) iB = 0; if (iB > 255) iB = 255;

				aDataDst[iOffset] = iR;
				aDataDst[iOffset+1] = iG;
				aDataDst[iOffset+2] = iB;
				aDataDst[iOffset+3] = aDataSrc[iOffset+3];
	
			} while (--x);
		} while (--y);
		return true;

	} else if (oImage.client.isIE) {
		// nothing for IE!
	}
}

