Зачем такие заморочки? Для актуальных браузеров достаточно написать:
var xhr = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
ну или построить условие немного по другому, чтобы в IE7 создался XMLHttpRequest, а не ActiveXObject, хотя какая разница.