Ajax オブジェクトを自作

Twippera で使うために Ajax オブジェクトを自作していたが、タイムアウト処理がうまくいかず…。
"JavaScript 第5版" に参考になるコードが載っていたので作り直した。

var Ajax = {};
    Ajax.request = function(url, callback, options) {
        var xhr = new XMLHttpRequest();
        var timer;
        if(options.timeout) {
            timer = setTimeout(function() {
                xhr.abort();
                if(options.timeoutHandler) {
                    options.timeoutHandler(url);
                }
            }, options.timeout);
        }

        xhr.onreadystatechange = function() {
            if(xhr.readyState == 4) {
                if(timer) clearTimeout(timer);
                if(xhr.status == 200) {
                    callback(xhr);
                } else {
                    if(options.errorHandler) {
                        options.errorHandler(xhr.status, xhr.statusText);
                    }
                }
            }
        }

        var opts = {
            type: options.type || "GET",
            async: options.async || true,
            user: options.user || null,
            pass: options.pass || null,
            query: options.query || "",
            header: options.header || {}
        }
        if(opts.user && opts.pass) {
            xhr.open(opts.type, url, opts.async, opts.user, opts.pass);
        } else {
            xhr.open(opts.type, url, opts.async);
        }
        for(var t in opts.header) {
            xhr.setRequestHeader(t, opts.header[t]);
        }
            xhr.send(opts.query);
    }