Hola nuevamente Derkenuke!!!!!!
Ante todo, reiterarte mi más sincero agradecimiento por todas las molestias q t has tomado, no m cansaré d repetirlo.

Gracias.
Por otro lado, debo d ser muy torpe

; pues no consigo hacer funcionar tu ejemplo
Esto es lo q tengo, siguiendo los pasos dados por ti:
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<meta http-equiv="Content-type" content="text/html;charset=iso-8859-1" />
<meta name="Author" content="derkeNuke" />
<title>Página nueva</title>
<style type="text/css">
</style>
</head>
<body>
<form action="nuevo_combobox.html" method="GET" name="frm" onsubmit="muestraElOculto()">
<select name="loc" onchange="cambiar(this.form.zona)">
<option>Cualquier ubicación</option>
<option>Agaete</option>
<option>Agüimes</option>
</select>
<select name="zona" style="visibility: hidden;">
</select>
<label>
<input name="Submit" type="submit" onclick="muestraElOculto()" value="Enviar" />
</label>
</form>
<script type="text/javascript">
<!--
function addOpt(oCntrl, iPos, sTxt, sVal){
var selOpcion=new Option(sTxt, sVal);
eval(oCntrl.options[iPos]=selOpcion);
}
function cambiar(oCntrl){
while (oCntrl.length) oCntrl.remove(0);
oCntrl.style.visibility="visible";
switch (document.frm.loc.selectedIndex){
case 0:
oCntrl.style.visibility="hidden";
break;
case 1:
addOpt(oCntrl, 0, "Cualquier ubicación", "%%");
addOpt(oCntrl, 1, "Puerto de las Nieves", "(Puerto de Las Nieves)");
addOpt(oCntrl, 2, "Valle de Agaete", "(Valle de Agaete)");
break;
case 2:
addOpt(oCntrl, 0, "Cualquier ubicación", "%%");
addOpt(oCntrl, 1, "Villa de Agüimes", "(Villa de Agüimes)");
addOpt(oCntrl, 2, "Cruce de Arinaga", "(Cruce de Arinaga)");
addOpt(oCntrl, 3, "Playa de Arinaga", "(Playa de Arinaga)");
addOpt(oCntrl, 4, "Polígono industrial de Arinaga", "(Polígono industrial de Arinaga)");
break;
}
}
function muestraElOculto() {
var comoEstaba = document.frm.zona.style.visibility;
document.forms["frm"].zona.style.visibility = "visible";
setTimeout("document.frm.zona.style.visibility='"+comoEstaba+"'", 100);
}
// -->
</script>
<script type="text/javascript">
<!--
function muestraElOculto() {
var comoEstaba = document.frm.zona.style.visibility;
document.forms["frm"].zona.style.visibility = "visible";
setTimeout("document.frm.zona.style.visibility='"+comoEstaba+"'", 100);
}
// -->
</script>
</body>
</html>
Ciertamente, tienes toda la razón con lo d la línea esta
Código HTML:
addOpt((oCntrl.style.visibility="hidden")== 0, "","%%");
Es completamente ilógica y absurda. Sobra la mitad d la línea

, d hecho sobra todo lo q yo le he añadido. Es el fruto d la desesperación cuando no tienes más recursos para hacerlo bien. M puse a probar y a retocar tu ejemplo a ver si conseguía q además d ocultar a la vista el campo zona pasase también su valor. Pero no funcionó y lo dejé "tal cual" mi último y frustrado intento. Al menos no da error (funciona tal y como lo hacía tu ejemplo aunque evidentemente con más caracteres sobrantes).
Nuevamente gracias infinitas
Un saludo