In a bug I reported last week (can't locate ticket no) I pointed out that Prototype's Ajax.Request object doesn't work asynchronously...
I've tracked this down to onStateChange, where the "this" is the "arguments array" rather than what is expected (the Request object) when called asynchronously (something to do with the bind() method)
replacing this with:
onStateChange: function() {
if( this.length ){
var readyState = this[0].transport.readyState;
if (readyState > 1) this[0].respondToReadyState(readyState);
} else {
var readyState = this.transport.readyState;
if (readyState > 1) this.respondToReadyState(readyState);
}
},
Solves the problem and Opera is happy again.... This has been checked on IE/Firefox/Opera.