I looked at your JS for a little while and didn't see that the second level had an array of key->value so that you COULD extract it from your posted form (noobie at PHP and JS, so take this with a grain of salt !) I was able to confirm my suspicions when i swapped your form's method from post to get and looked at the string in the url...
I had copied and pasted a similar script from javascriptkit.com recently and had the file saved. I just copied and pasted your values into it and it works.
I am hoping that looking at this will help you trouble shoot your JS.
<html>
<head><title>test</title></head>
<body>
<?php
if (!isset($_POST['stage2'])){
?>
<form name="dynamiccombo" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<select name="stage2" size="1" onChange="displaysub()">
<option value="#">This is a place Holder text </option>
<option value="#">This is a Place Holder text </option>
<option value="#">This is a Place Holder text </option>
<option value="#">This is a Place Holder text </option>
</select>
<input type="submit" name="submit" value="submit" />
</form>
<script>
<!--
// 2-level combo box script- by javascriptkit.com
//Visit JavaScript Kit (http://javascriptkit.com) for script
//Credit must stay intact for use
var category=new Array()
category[0]=new Option("SELECT A CATEGORY ", "") //THIS LINE RESERVED TO CONTAIN COMBO TITLE
category[1]=new Option("Fashion", "combo1")
category[2]=new Option("Art", "combo2")
category[3]=new Option("Media", "combo3")
category[4]=new Option("Sport", "combo4")
var combo1=new Array()
combo1[0]=new Option("Fashion 1","fashion.1")
combo1[1]=new Option("Fashion 2","fashion.2")
combo1[2]=new Option("Fashion 3","fashion.3")
var combo2=new Array()
combo2[0]=new Option("Art 1","art.1")
combo2[1]=new Option("Art 2","art.2")
combo2[2]=new Option("Art 3","art.3")
combo2[3]=new Option("Art 4","art.4")
combo2[4]=new Option("Art 5","art.5")
combo2[5]=new Option("Art 6","art.6")
combo2[6]=new Option("Art 7","art.7")
combo2[7]=new Option("Art 8","art.8")
combo2[8]=new Option("Art 9","art.9")
var combo3=new Array()
combo3[0]=new Option("Media 1","media.1")
combo3[1]=new Option("Media 2","media.2")
combo3[2]=new Option("Media 3","media.3")
combo3[3]=new Option("Media 4","media.4")
combo3[4]=new Option("Media 5","media.5")
var combo4=new Array()
combo4[0]=new Option("Sport 1","sport.1")
combo4[1]=new Option("Sport 2","sport.2")
var curlevel=1
var cacheobj=document.dynamiccombo.stage2
function populate(x){
for (m=cacheobj.options.length-1;m>0;m--)
cacheobj.options[m]=null
selectedarray=eval(x)
for (i=0;i<selectedarray.length;i++)
cacheobj.options[i]=new Option(selectedarray[i].text,selectedarray[i].value)
cacheobj.options[0].selected=true
}
function displaysub(){
if (curlevel==1){
populate(cacheobj.options[cacheobj.selectedIndex].value)
curlevel=2
}
else
gothere()
}
gothere()
function gothere(){
}
//SHOW categories by default
populate(category)
//-->
</script>
<?php
} else {
$choice = $_POST['stage2'];
$sub_cat = explode(".", $choice);
echo 'your form was submitted';
echo '<br />cat: ' . $sub_cat[0]; // cat
echo '<br />sub cat: ' . $sub_cat[1]; // sub_cat
}
?>
</body>
</html>