Take a careful look on what prado does in the response of the AJAX request. Due to the nested ActivePanels it happens that multiple objects with the same ID are inserted into the DOM. That's not valid and thus you can't really tell what effect this has in which browser. Still: not a browser problem but a problem of prado's generated code.
When the page is loaded we have this HTML in the browser (reduced to the relevant parts):
<div id="panel0" style="display:none;"><fieldset><legend>Panel 0</legend>
Panel 0 Content <input name="txt0" type="text" id="txt0" />
<div id="panel1" style="display:none;"><fieldset><legend>Panel 1</legend>
Panel 1 Content <input name="txt1" type="text" id="txt1" />
</fieldset></div>
<div id="panel2" style="display:none;"><fieldset><legend>Panel 2</legend>
Panel 2 Content <input name="txt2" type="text" id="txt2" />
</fieldset></div>
<div id="panel3" style="display:none;"><fieldset><legend>Panel 3</legend>
Panel 3 Content <input name="txt3" type="text" id="txt3" />
</fieldset></div>
</fieldset></div>
On button click, something like this is sent back to the browser (reformatted):
<!--5f000729--><div id="panel0" style="display:;"><fieldset><legend>Panel 0</legend>
Panel 0 Content <input name="txt0" type="text" id="txt0" />
<div id="panel1" style="display:;"><fieldset><legend>Panel 1</legend>
Panel 1 Content <input name="txt1" type="text" id="txt1" />
</fieldset></div>
<div id="panel2" style="display:;"><fieldset><legend>Panel 2</legend>
Panel 2 Content <input name="txt2" type="text" id="txt2" />
</fieldset></div>
<div id="panel3" style="display:;"><fieldset><legend>Panel 3</legend>
Panel 3 Content <input name="txt3" type="text" id="txt3" />
</fieldset></div>
</fieldset></div><!--//5f000729--><!--X-PRADO-PAGESTATE-->eJztlc1ygyAcxPMsPAGINoqnJj20lzbTj3MGFRKmKFbIpGmm715QjI5p781MvLn7g/3DzmgSJYiHWYwxLGDMI55AXMCQ4RgjlvE5j3AIs5hTgshREJhSgslRk5CA3EgI7Dskx+9eQE6IHIBuCNBbtV/Rikm92BmjqoF27lYU7Hc3gN3a+z8Ju7x2Bjzl2XzzaeA50o4UDAjqke40yDkRAS/mIBlInwhCBLy2qZ3kBIsEdr/ZSJ+tM5q/P5R0w94aCdLH1DJ4yhSiYbkRbvQWSKbAVjXiS1WGylspNj0WTjGdN0rKBW10R6B4SuwbWnsvcp6XuWCy0KA/6JyAQuha0gOwpL1mkLo28HiFncZvFI7kXFLtw109g77TRpX+9loXjVwf5u02/+5Q0VLk4BSwVGWtKlaZ2Zr13dhnaDCYNBhcG7ywBvGkQXxt8CIavNbzr+vp/7qnD+K4sMCecWkHtbein9nHTjSi2qyUNgtbymiTH4Lvifg=<!--//X-PRADO-PAGESTATE--><!--6a8ee784--><script type="text/javascript">
/*<![CDATA[*/
new Prado.WebUI.TTextBox({'ID':'txt0','EventTarget':'txt0','AutoPostBack':false,'CausesValidation':true,'TextMode':'SingleLine','FormID':'ctl1'});
Prado.CallbackRequest.addPostLoaders(['txt0','txt1','txt2','txt3']);
new Prado.WebUI.TTextBox({'ID':'txt1','EventTarget':'txt1','AutoPostBack':false,'CausesValidation':true,'TextMode':'SingleLine','FormID':'ctl1'});
new Prado.WebUI.TTextBox({'ID':'txt2','EventTarget':'txt2','AutoPostBack':false,'CausesValidation':true,'TextMode':'SingleLine','FormID':'ctl1'});
new Prado.WebUI.TTextBox({'ID':'txt3','EventTarget':'txt3','AutoPostBack':false,'CausesValidation':true,'TextMode':'SingleLine','FormID':'ctl1'});
/*]]>*/
</script>
[..cut..]
The interesting part comes after this - the actions at the bottom:
{"Element.setStyle":["panel0", {"display":""}]}
{"Element.setStyle":["panel1", {"display":""}]}
{"Element.setStyle":["panel2", {"display":""}]}
{"Element.setStyle":["panel3", {"display":""}]}
{"Prado.Element.replace":["panel1", "Element.replace", null, "5f000729"]}
{"Prado.Element.replace":["panel2", "Element.replace", null, "5f000729"]}
{"Prado.Element.replace":["panel3", "Element.replace", null, "5f000729"]}
{"Prado.Element.replace":["panel0", "Element.replace", null, "5f000729"]}
{"Prado.Element.replace":[null, "Prado.Element.evaluateScript", null, "6a8ee784"]}
This code first sets the panel's 0-1 display property. Then there's a call to
Prado.Element.replace. This is a wrapper around prototypes Element.replace. The first line does this:
It replaces panel1 with the content in the boundaries "5f000729" which is the HTML block from the AJAX response. That means now we have another set of panels 0-4 inserted into the DOM on the place of the previous panel1. We now already have duplicate ids for panel 0, 2 and 3. You see that this is not really what should happen. And the game goes on.
That's what i tried to say when i talked about "problems with prado's AJAX code".
I think, some wiki article that explains the whole javascript side of an AJAX callback would be helpful to analyze problems like this. I could start a basic version though i must confess, all i know about this i learned by looking at the sources.