//                                                                         //
// ______    comments are for pussies            __________                //
// ___  /_________      ________________________ __  /___(_)__   ______    //
// __  __ \_  ___/_______  ___/_  ___/  _ \  __ `/  __/_  /__ | / /  _ \   //
// _  /_/ /  /   _/_____/ /__ _  /   /  __/ /_/ // /_ _  / __ |/ //  __/   //
// /_.___//_/           \___/ /_/    \___/\__,_/ \__/ /_/  _____/ \___/    //
//                                     (C)2010 oliver@br-creative.com      //

tw = 34;
th = 19;
letter = "";



mxrunning = false;

tabs = new Array();
	
function runmx () {
	if(!mxrunning)
		return;

	var aContent = new Array();
	var aLine = new Array();
	
	tabs.pop();
	var newrow = new Array();
	for(var y=0;y<tw;y++) {
		newrow[y] = new Object();
		newrow[y].char  = mchr("japs");
		newrow[y].color = newcolor("x");
	}
	tabs.unshift(newrow);

	aContent.push('<table id="mxtab" cellspacing="0" cellpadding="0">');
	
	for(var x=0;x<th;x++) {
		aLine = [];
		for(var y=0;y<tw;y++) {
			masked = false;
			if(mask[letter] && (x>5 && x<12)) {
				if(y>11 && y<21) {
					for(var z=0;z<mask[letter].length;z++) {
						if(mask[letter][z] == x+'-'+y) 
							masked = true;
					}
				}
			}
			if(tabs[x][y].color=="x") {
				rcol = "c"; gcol = "c"; bcol = "c";
			} else {
				acol = newcolor(tabs[x][y].color);
				tabs[x][y].color = acol[1];
				rcol = (masked)?"0":acol[0];
				gcol = (masked)?"f":acol[1];
				bcol = (masked)?"c":acol[2];
			}
			aLine.push('<td class="mxtd" style="color:#'+ rcol+gcol+bcol +';">'+tabs[x][y].char+'</td>');
		}
		aContent.push("<tr>"+aLine.join("")+"</tr>");
	}

	aContent.push("</table>");
	document.getElementById("thematrix").innerHTML = aContent.join("\n");
	setTimeout("runmx()",100);
}

function newcolor(oldVal) {
	var hex = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f");
	var rnd = Math.round(Math.random()*10)/10;

	if(oldVal == "x") {
		if(Math.round(Math.random()*100)>95)
			return "x";
		return hex[parseInt(13*rnd)];
	}
		
	var green = parseInt("0x"+oldVal);
	if(green < 1)
		return ["0","0","0"];
		
	red = (green<6) ? "0" : "3";
	blue = (green>9) ? "6" : "0";
	
	if(rnd > .4) {
		return [red, hex[green-1], blue];
	}
	return [red, hex[green], blue];
}

function startthematrix() {
	mxrunning = true;
	for(var x=0;x<th;x++) {
		tabs[x] = new Array();
		for(var y=0;y<tw;y++) {
			tabs[x][y] = new Object();
			tabs[x][y].char  = " ";
			tabs[x][y].color = "9";
		}
	}
	runmx();
}

function stopthematrix() {
	mxrunning = false;
}
function rchr() {
	if(Math.random() > .9) 
		return " ";
	if(Math.random() < .1) {
		var cs = 47;
		var ce = 10;
	} else {
		var cs = 65;
		var ce = 29;
	}
	var cnt = cs + Math.round(ce * Math.random());
	return String.fromCharCode(cnt);	
}

function mchr(set) {
	if(Math.random() > .9) 
		return " ";
	var rnd = Math.round(Math.random()*10)/10;
	var unichar = 0;
	switch(set) {
		case "japs":		// japanese;
		unichar = parseInt(12448+(rnd*95));
		switch(unichar) {
			case 12448: unichar = 12449;
			case 12464: unichar = 65;
			case 12543: unichar = 12542;
		}
		return "&#" + unichar;
		case "hebr":	// hebrew
		return "&#" + parseInt(1488+(rnd*26));
		case "math":	// mathematical (8704 - 8959)
		return "&#" + parseInt(8704+(rnd*254));
		case "mamin": 	// mathematical excerpt (8816 - 8943)
		return "&#" + parseInt(8816+(rnd*127));
		default:
		return rchr();
	}
}

