Ma come farebbe la funzione change() ad essere richiamata? la pagina caricata e' index e al suo interno non esiste lo script dato che, a maggior ragione, nell'iframe ospita framemain.htm che non lo contiene... quindi per forza lo si deve inserire nella index!

Il fatto che il tuo esperimento funzioni non vuol dire che sia corretto

Ecco le mie due pagine di prova (semplificate... rimetti i controlli vari che avevi )

codice:
<script>
function change() {
	var param = location.search.substr(1).split("=");
	if (param[0]=="pag") {
		document.frames['main'].location.href = param[1];
	}
}
</script> 
<body onLoad="change()">
<iframe name="main" src="framemain.htm"></iframe>
</BODY>




<script>
var thispage = "/petro/prova.htm";
if (self == top) location.href = "/index.htm?pag="+thispage; 
</script> 
<body>
prova
</body>
ciao