    function getClosestButtonWithKeyCode(target,keyCode) {
    var btns = document.getElementsByTagName("INPUT");
    var buttons = [];
    for (var i=0;i<btns.length;i++) {
        var bt = btns[i];
        if (bt.attributes["keyCode"]!=null && bt.attributes["keyCode"].value==keyCode) {
            buttons.push({
                b:bt,
                parents: getElementParentsAsHash(bt)
            });
        }
    }
    
    var tP = getElementParentsAsArray(target);
    var resultButtons = [];
    for (var i=0;i<tP.length;i++) {
        var p = tP[i];
        if (p.id==undefined || p.id.length==0) continue;
        for (var j=0;j<buttons.length;j++) {
            var btn = buttons[j];
            if (btn.parents!=null && btn.parents[p.id]) {
                resultButtons.push(btn.b);
            }
        }
    }
    if (resultButtons.length>1) {
        alert("Found "+resultButtons.length+" buttons");
        var ids = [];
        for (var i=0;i<resultButtons.length;i++) {
            ids.push(resultButtons[i].id);
        }
        alert("Varies are:"+ids.join(","));
    }
    if (resultButtons.length>0) {
        return resultButtons[0];
    }
}
function debug(obj) {
    var str = "";
    for (var i in obj) {
        if (obj[i]!=null) {
            str += i+" = "+obj[i]+"\r\n";
        }
    }
    return str;
}
function getElementParentsAsArray(t) {
    var res = [];
    var p = t;
    while (p!=null && p!=document) {
        res.push(p);
        p = p.parentNode;
    }
    if (res.length==1) {
        return [document.forms[0]];
    }
    return res;
}
function getElementParentsAsHash(t) {
    var res = new Object();
    var p = t;
    while (p!=null && p!=document.body) {
        res[p.id] = true;
        p = p.parentNode;
    }
    return res;
}

