
// Affiinin muunnoksen parametrit:
a = new Array(0,.85,.2,-.15);
b = new Array(0,.04,-.26,.28);
c = new Array(0,-.04,.23,.26);
d = new Array(.16,.85,.22,.24);
e = new Array(0,0,0,0);
f = new Array(0,1.6,1.6,.44);
p = new Array(.01,.85,.07,.07);

var teksti  = "It is clear, then, that rhetoric is not bound up with a single definite class of subjects, but is as universal as dialectic; it is clear, also, that it is useful. It is clear, further, that its function is not simply to succeed in persuading, but rather to discover the means of coming as near such success as the circumstances of each particular case allow. In this it resembles all other arts.";
var merkit  = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ,.;!?-()";
emakset = new Array("A","G","T","C");
var aminolaskuri = 0;
var pituus = 2000;
var dna = "";

var x  = 0;
var y  = 0;
var tn = new Array();

var s  = 0;
var z;
varit = new Array("3","4","5","6","7","8","9","a","b","c");

aminohapot = new Array();

for (i in emakset) {
	for (j in emakset) {
		for (k in emakset) {
			aminohapot[aminolaskuri++] = emakset[i]+emakset[j]+emakset[k];
		}
	}
}

for (i=0; i<teksti.length; i++)
	dna += aminohapot[merkit.indexOf(teksti.charAt(i))];

function laskePaikka() {
	r = Math.random();
	i = 0;
	while (r>tn[i])
		i++;
	uusi_x = (a[i]*x) + (b[i]*y) + e[i];
	uusi_y = (c[i]*x) + (d[i]*y) + f[i];
	x = uusi_x;
	y = uusi_y;
}
function muunnaTodennakoisyydet() {
	summa = 0;
	for (i=0; i<p.length; i++) {
		summa+=p[i];
		tn[i] = summa;
	}
}
function generoiHTML() {
	merkki = "";
	for (i=0; i<pituus; i++) {
		merkki = dna.charAt(i%dna.length);
		document.write("<div id=\"i"+i+"\">"+ merkki + "</div>\n");
	}
}
function init() {
	muunnaTodennakoisyydet();
	setTimeout("roiski()",500);
}
function roiski() {
	laskePaikka();
	sijoita();
	s++;
	z = s;
	s %= pituus;
	setTimeout("roiski()", 25);
}
function sijoita() {
	apu_x = 210+80*x;
	apu_y = 550-52*y;
	document.getElementById("i"+s).style.left=apu_x;
	document.getElementById("i"+s).style.top=apu_y;
	col = Math.floor(Math.random()*varit.length);
	document.getElementById("i"+s).style.color="#00"+varit[col]+varit[col]+"00";
	document.getElementById("i"+s).style.zIndex=z;
}
