var canvas = {
	dom: false,
	context: false,
	height: 0,
	width: 0
};

canvas.init = function(){
	try {
		canvas.dom = $("#canvas")[0];
		canvas.context = $("#canvas")[0].getContext("2d");
		canvas.height = $("#canvas")[0].height;
		canvas.width = $("#canvas")[0].width;
		canvas.context.lineWidth = 3;
		canvas.context.lineCap = "round";
		canvas.context.lineJoin = "round";
		canvas.context.strokeStyle = "#FFFFFF";
		canvas.context.globalAlpha = 0.5;
		canvas.context.globalCompositeOperation = "xor";
		$(canvas.dom).unbind("click.clear").bind("click.clear",function(e){
			canvas.context.clearRect(0,0,canvas.width,canvas.height);
		}).click();
	} catch(e) {
		console.log(e.toString());
		return false;
	}
	return true;
}

canvas.pulse = function(ms){
	var ctxt = canvas.context;
	if(typeof canvas.pulse.count == "undefined")
		canvas.pulse.count = 0;
	canvas.pulse.lastPoint = {
		x: canvas.width / 2,
		y: canvas.height / 2
	};
	canvas.pulse.intervalID = setInterval(function(){canvas.pulse.doPulse()}, ms);
	return true;
}

canvas.pulse.doPulse = function(){
	var ctxt = canvas.context;
	var style = "#";
	for(var i = 0; i < 6; i++)
		style += parseInt(Math.random() * 16).toString(16);
	ctxt.strokeStyle = style;
	ctxt.beginPath();
	ctxt.moveTo(canvas.pulse.lastPoint.x, canvas.pulse.lastPoint.y);
	var x = (Math.random() * canvas.width) * (Math.random() >= 0.5 ? 1.2 : -1.2),
	    y = Math.random() * canvas.height,
	    cpx = Math.abs(x - canvas.pulse.lastPoint.x) / 2,
	    cpy = (y > canvas.pulse.lastPoint.y ? y + (canvas.width / 3) : y - (canvas.width / 3));
	ctxt.quadraticCurveTo(cpx, cpy, x, y);
	canvas.pulse.lastPoint = {
		x: x,
		y: y
	}
	ctxt.stroke();
	ctxt.closePath();
	canvas.pulse.count++;
/*
	if(canvas.pulse.count > 300){
		canvas.pulse.count = 0;
		ctxt.clearRect(0,0,canvas.width,canvas.height);
	}
*/
	return true;
}

canvas.pulse.stopPulse = function(){
	window.clearInterval(canvas.pulse.intervalID);
	return true;
}

$(function(){
	if(!canvas.init())
		return false;
	var intervalspeed = 100;
	canvas.pulse(intervalspeed);
	$("#canvasparams input[type='text']").add("#canvasparams select").not("#canvasparams .noncontext").unbind("change.reparam").bind("change.reparam",function(e){
		if(typeof canvas.context[this.id] == "undefined" || $(this).val() == "")
			return false;
		if($(this).attr("type") == "text"){
			var val = parseFloat($(this).val());
			if(isNaN(val))
				return false;
			$(this).val(val);
		}
		canvas.context[this.id] = $(this).val();
		return true;
	}).each(function(){ $(this).val(canvas.context[this.id]); });
	$("#canvasparams #intervalspeed").unbind("change.speed").bind("change.speed", function(e){
		var val = parseInt($(this).val());
		if(typeof val == "undefined" || val == "" || isNaN(val)){
			return false;
		}
		canvas.pulse.stopPulse();
		canvas.pulse(val);
		$(this).val(val);
		return true;
	}).val(intervalspeed);
});



