A mi m'és igual l'idioma jeje
Bueno esto a mi me funciona bien, mira a ver que opinas, he tenido que cambiar la estructura de los bucles y condicionales, pero creo que es lo que andas buscando.
function crearTaula()
{
var fons1 = document.getElementById("color1").value;
var fons2 = document.getElementById("color2").value;
var fons3 = document.getElementById("color3").value;
var val1 = document.getElementById("valor1").value;
var val2 = document.getElementById("valor2").value;
var val3 = document.getElementById("valor3").value;
var cont = 0;
var i=1;
var j=0;
document.write("<table>");
while(i<21){
cont=cont%3+1;
if (cont == 1) {
for (x=0; x < val1; x++) {
if (j<20){
document.write("<td bgcolor=\"" + fons1 + "\"></td>");
j++;
}else if(j>=20 && i<20){
document.write("</tr><tr><td bgcolor=\"" + fons1 + "\"></td>");
j=1;
i++;
}else{i++;break;}
}
}else if(cont == 2) {
for (x=0; x < val2; x++) {
if (j<20){
document.write("<td bgcolor=\"" + fons2 + "\"></td>");
j++;
}else if(j>=20 && i<20){
document.write("</tr><tr><td bgcolor=\"" + fons2 + "\"></td>");
j=1;
i++;
}else{i++;break;}
}
}else if(cont == 3) {
for (x=0; x < val3; x++) {
if (j<20){
document.write("<td bgcolor=\"" + fons3 + "\"></td>");
j++;
}else if(j>=20 && i<20){
document.write("</tr><tr><td bgcolor=\"" + fons3 + "\"></td>");
j=1;
i++;
}else{i++;break;}
}
}else{alert("error");break;}
}
}