Yo lo haria asi (creo que es lo que quieres):
(ejemplo completo):
Código PHP:
<script>
//aqui los ids de tus capas de modalidades. Pon el [0] como predeterminado
var losIds=["capa1","capa2","capa3"];
function muestraDiv(id) {
//ocultamos todas las modalidades
for(a=0;a<losIds.length;a++)
document.getElementById( losIds[a] ).style.display="none";
//mostramos la modalidad en cuestion
document.getElementById( id ).style.display="block";
}
</script>
Contenido de la pagina......
<select onchange="muestraDiv(this.options[this.options.selectedIndex].value)">
<option value="capa1" selected>Comprar</option> <!-- predeterminado -->
<option value="capa2">Vender</option>
<option value="capa3">Catalogo</option>
</select>
<form>
<div id="capa1">
<input type="hidden" name="modalidad" value="comprar">
Nombre del producto a comprar: <input type="text" name="producto">
</div>
<div id="capa2">
<input type="hidden" name="modalidad" value="vender">
Nombre del producto a vender: <input type="text" name="producto">
</div>
<div id="capa3">
<input type="hidden" name="modalidad" value="observar">
Nombre del producto a observar: <input type="text" name="producto">
</div>
</form>
Contenido de la pagina......
<script>
muestraDiv(losIds[0]); //mostramos el predeterminado.
</script>
En cada modalidad pones el campo con el mismo nombre, y asi recoges de forma sencilla su valor una vez enviado (aunque no estoy muy seguro de que funcione, por aquello de poner varios campos iguales en un formulario, quizas solo se envie el primero. Pruebalo y nos lo confirmas). Para comprobar la accion que debes realizar recoges el campo oculto con nombre "modalidad".
Con suerte funciona, si no ya buscaremos otra manera..