// Code layout taken from http://www.mozbox.org/pub/green/main.js

var processor = {
	doLoad: function() {
		this.video = document.getElementById("video");
		
		this.c1 = document.createElement("canvas");
		this.c1.width = "160"
		this.c1.height = "96"
		this.ctx1 = this.c1.getContext("2d");
		
		this.c2 = document.getElementById("c2");
		this.ctx2 = this.c2.getContext("2d");
		
		var self = this;
		this.video.addEventListener("play", function() {
			self.width = self.video.videoWidth / 2;
			self.height = self.video.videoHeight / 2;
			self.len = self.width * self.height;
			
			self.video.addEventListener('timeupdate', function(event) {
				self.computeFrame()
			}, true);
		}, false);
	},

	computeFrame: function() {
		var frame, data, i, offset, rgba, mod
		
		this.ctx1.drawImage(this.video, 0, 0, this.width, this.height);
		frame = this.ctx1.getImageData(0, 0, this.width, this.height);
		data = frame.data;
		ndata = []
		
		for (i = 0; i < this.len; i++) {
			ndata.push(0);
			ndata.push(0);
			ndata.push(0);
			ndata.push(255);
		}
		
		offset = Math.floor(Math.random()*10) + 5
		
		for (i = 0; i < this.len; i++) {
			rgba = data.getPixel(i);
			mod = i % this.width;
			
			ndata.setPixel(i, 1, rgba[1]);
			
			if (mod + offset < this.width)
				ndata.setPixel(i + offset, 0, rgba[0]);
			if (mod - offset > 0)
				ndata.setPixel(i - offset, 2, rgba[2]);
			
		}
		
		frame.data = ndata
		this.ctx2.putImageData(frame, 0, 0);
		return;
	}
};

Array.prototype.getPixel = function(number) {
	var real = number * 4;
	return this.slice(real, real + 4);
};

Array.prototype.setPixel = function(number, rgba, val) {
	var real = number * 4 + rgba;
	if (number < 0 || real > this.length)
		return;
	this[real] = val;
};

