Olá, Slowmottion!
Não sei se percebi a ideia, não conheço o frontpage, e não gosto muito de usar frames, mas cá vai:
Pelo que percebi, corrige-me se assim não fôr, tens duas frames, uma à esquerda, a que chamarei mainmenu, e uma à direita a que chamarei mainframe.
O que pretendes, é que clicando num objecto (não sei se é importante usares imagemaps, às vezes poupa-se bastante peso utilizando imagens separadas, mas isso é secundário, cada área constituirá em termos práticos um objecto) do menu, te apareça uma página com duas novas frames, uma em cima a que chamarei top_menu, e uma ao centro a que chamarei content.
Passas assim de uma página inicial
mainmenu | mainframe
Para uma nova página com três frames:
topmenu / mainmenu | content
Bom em primeiro lugar, o que é importante reter, é que quando estás a trabalhar com frames, e em termos práticos, cada frame é uma janela do browser que podes manipular.
Tens duas hipóteses de fazer isto:
Utilizando frames "aninhadas" dentro de frames (deverás ter muito cuidado com os nomes das frames e as suas relações para não embrulhares tudo) ou utilizando um script que associe a cada objecto do menu o carregamento simultâneo das duas frames correspondentes.
No primeiro caso, podes funcionar como se a tua mainframe carregasse um novo site. Deste modo, a cada chamada do mainmenu carregas no teu target mainframe a página que contém as frames topmenu e content. Essa página será naturalmente a página na qual defines essas frames,a frameset, a qual constitui a parent frame das frames topmenu e content. Podes fazer isto facilmente, usando apenas HTML, (DTD HTML 4.01 Frameset//EN pelo menos) sem links duplas, e estarás a tratar com "nested frames". A tua primeira frameset, a que define as frames mainmenu e mainframe, constituirá a frame "avó" das frames visíveis.
Como cada frame é uma janela, dá jeito ter à mão as suas propriedades.
Resumidamente, das propriedades das Janelas que estão relacionadas com o uso de frames, tens:
Frames[] o array de todas as frames contidas na janela;
lenght o número de frames na janela (window.frames.lenght)
name nome da janela
parent referência à janela mãe (a janela naquela a que tu estás se insere directamente)
self referência à própria janela (aquela em que estás)
top referência à janela de topo; se estás a trabalhar sem aninhamento de frames, a top frame e a parent frame serão a mesma. Se por outro lado o elemento frame carrega um documento que por sua vez contém frames, a topframe será a que contém todas as outras, a "avó".
Assim, se quiseres referênciar a janela correspondente ao espaço ocupado pela mainframe a partir da frame content, por exemplo, e se o nome que deste à frame content fôr content, poderás fazer:
parent.content (podes ainda aceder-lhe através da sua posição no array de definição, se a sua posição fôr a terceira no array podes fazer: parent.frames[3].name)
Se por outro lado quiseres referenciar a janela correspondente à janela do browser (que ocupará o espaço ocupado pelo conjunto de todas as frames) deverás fazer:
top.content
No segundo caso, e penso que desta forma funciona melhor, e uma vez que podes retirar o enquadramento das frames (borders), podes ter logo na página inicial as três frames e estarás a tabalhar com uma frameset apenas, o que reduzirá a probabilidade de te perderes pelo meio e poderá tornar o site mais leve; terás nesse caso de ter algum cuidado com os fundos das frames; se se tratar de uma cor única não há problema, mas se tiveres uma imagem pequena de fundo, terás de fazer as contas para que na vertical a linha de baixo da imagem repetida não saia cortada, e terás de utilizar dimenções absolutas, uma vez que as relativas dependerão do dispositivo de visualização do utilizador.
Com um script bastante simples, podes associar a cada objecto do teu mainmenu, não uma link mas um evento; esse evento apresentará a página topmenu no target frame topmenu e a página content no target frame content; terás assim um carregamento muito provavelmente mais rápido e um maior controlo sobre o site.
Para cada link do teu mainmenu deverás então definir um evento onclick ao qual poderás associar dois acontecimentos: a abertura da página topmenu correspondente na frame topmenu (target) e a abertura de uma página inicial correspondente na tua frame content. Depois será só ligar cada item do teu topmenu às páginas de conteúdo a aparecerem na frame content. A associação dos dois acontecimentos ao evento onclick deverá ser definida como uma função.
Acho que é isto, de qualquer modo, se estiver para aqui a dizer alguma asneira, agradeço que alguém mais dentro do assunto o corrija.
Tudo de bom,
Ozy