if(window) {
    var formAutoFocus = function() {
        var focusTarget;
        var focusFlag;
        var focusDone = function() {
            focusFlag = true;
        }
        var attachFocus = function() {
            if(focusTarget.attachEvent) {
                focusTarget.attachEvent('onfocus', focusDone);
            } else {
                focusTarget.prevOnFocus = focusTarget.onfocus;
                if(focusTarget.prevOnFocus) {
                    var dualFocus = function() {
                        focusTarget.prevOnFocus();
                        focusDone();
                    }
                    focusTarget.onfocus = dualFocus;
                } else {
                    focusTarget.onfocus = focusDone;
                }
            }
        }
        var detachFocus = function() {
            if(focusTarget.attachEvent) {
                focusTarget.detachEvent('onfocus', focusDone);
            } else {
                focusTarget.onfocus = focusTarget.prevOnFocus;
                focusTarget.prevOnFocus = null;
            }
        }
        var checkFocus = function() {
            detachFocus();
            if(focusFlag)
                window.formAutoFocus = null;
            else
                window.setTimeout(formAutoFocus, 50);
        }
        var tryFocus = function(obj) {
            focusTarget = obj;
            focusFlag = false;
            attachFocus();
            try {
                focusTarget.focus();
            } catch(error) {
                return;
            }
            if(focusFlag) {
                detachFocus();
                formAutoFocus = null;
                return;
            }
            window.setTimeout(checkFocus, 10);
        }
        var skip = function(obj) {
            return elem.classname.match(/\bfocusignore\b/);
        }
        if(document.focusOverride) {
            tryFocus(document.focusOverride);
            return;
        }
        var tiers = new Array;
        for(var i = 0; i < document.forms.length; i++) {
            var form = document.forms[i];
            for(var j = 0; j < form.elements.length; j++) {
                var elem = form.elements[j];
                if(!elem.focus)
                    continue;
                var tier;
                switch(elem.type) {
                case 'text'           :
                case 'textarea'       :
                case 'password'       :
                    if(elem.value != elem.defaultValue && !skip(elem))
                        return;
                    tier = elem.value ? 1 : 0;
                    break;
                case 'file'           :
                    if(elem.value != elem.defaultValue && !skip(elem))
                        return;
                    tier = 2;
                    break;
                case 'select-one'     :
                    if(!skip(elem)) {
                        var anyDefault = false;
                        for(var k = 0; k < elem.options.length; k++) {
                            if(elem.options[k].defaultSelected) {
                                anyDefault = true;
                                break;
                            }
                        }
                        if(anyDefault) {
                            for(var k = 0; k < elem.options.length; k++) {
                                var opt = elem.options[k];
                                if(opt.selected != opt.defaultSelected)
                                    return;
                            }
                        } else {
                            if(elem.selectedIndex != 0)
                                return;
                        }
                    }
                    tier = 3;
                    break;
                case 'select-multiple':
                    if(skip(elem)) {
                        for(var k = 0; k < elem.options.length; k++) {
                            var opt = elem.options[k];
                            if(opt.selected != opt.defaultSelected)
                                return;
                        }
                    }
                    tier = 3;
                    break;
                case 'radio'          :
                case 'checkbox'       :
                    if(elem.selected != elem.defaultSelected && !skip(elem))
                        return;
                    tier = 4;
                    break;
                case 'hidden'         :
                    if(elem.value != elem.defaultValue && !skip(elem))
                        return;
                    continue;
                default               :
                    continue;
                }
                if(!tiers[0] && !elem.className.match(/\bnofocus\b/)) {
                    var wantfocus = elem.className.match(/\bwantfocus\b/);
                    if(!wantfocus)
                        tier += 5;
                    if(!tiers[tier])
                        tiers[tier] = elem;
                }
            }
        }
        for(var ix = 0; ix < tiers.length; ix++) {
            if(tiers[ix]) {
                tryFocus(tiers[ix]);
                break;
            }
        }
    }
    if(window.attachEvent) {
        window.attachEvent('onload', formAutoFocus);
    } else {
        if(window.onload) {
            var curronload = window.onload;
            var newonload = function() {
                curronload();
                formAutoFocus();
            };
            window.onload = newonload;
        } else {
            window.onload = formAutoFocus;
        }
    }
}