<html>
<script>
    if (window.testRunner)
        testRunner.dumpAsText();
</script>
<body id="body">

    <h2 tabindex=0>
        This should be a table because it has a thead.
    </h2>
    <table border=0>
    <thead><tr><td>asdf</td><td>asdf</td></tr></thead>
    <tr><td>asdf</td><td>asdf</td></tr>
    </table>

    <h2 tabindex=0>
        This should be a table because cells have borders.
    </h2>
    <table border=1>
    <tr><td >asdf</td><td>asdf</td></tr>
    </table>

    <h2 tabindex=0>
        This should not be a table because its cells do not have borders.
    </h2>
    <table style='border: 1px solid black'>
    <tr><td >asdf</td><td>asdf</td></tr>
    </table>

    <h2 tabindex=0>
        This should be a table because a cell has a special attribute
    </h2>
    <table border=0 cellpadding=0>
    <tr><td abbr="abbr tag">asdf</td><td>asdf</td></tr>
    </table>

    <h2 tabindex=0>
        This should be a table because a cell has a special attribute.
    </h2>
    <table border=0 cellpadding=0>
    <tr><td axis="abbr tag">asdf</td><td>asdf</td></tr>
    </table>

    <h2 tabindex=0>
        This should be a table because a cell has a special attribute.
    </h2>
    <table border=0 cellpadding=0>
    <tr><td id="test">asdf</td><td>asdf</td></tr>
    <tr><td headers="test">asdf</td><td>asdf</td></tr>
    </table>

    <h2 tabindex=0>
        This should be a table because cells have different colors.
    </h2>
    <table border=0 cellpadding=0>
    <tr><td bgcolor="red">asdf</td><td bgcolor="blue">asdf</td></tr>
    </table>

    <h2 tabindex=0>
        This should not be a table because cells have different but no spacing.
    </h2>
    <table border=0 cellpadding=0 cellspacing=0>
    <tr><td style="background-color: red;">asdf</td><td style="background-color: blue;">asdf</td></tr>
    </table>

    <h2 tabindex=0>
        This should not be a table because cells have the same colors even though there is spacing.
    </h2>
    <table border=0 cellpadding=0 bgcolor="green" cellspacing=3>
    <tr><td style="background-color: green;">asdf</td><td style="background-color: green;">asdf</td></tr>
    </table>

    <h2 tabindex=0>
        This should be a table because it has the "rules" attr.
    </h2>
    <table rules="cols" border=0 cellpadding=0>
    <tr><td>asdf</td><td>asdf</td></tr>
    </table>

    <style type="text/css">
    .appPol_080915_Lehman_Contributions {  } .labelPol_080915_Lehman_Contributions { undefined } .hedPol_080915_Lehman_Contributions { font-size: 19px; font-family:arial; font-weight:bold;color:#26386b;border-top:1px solid #a4abc1;border-left:1px solid #a4abc1;border-right:1px solid #a4abc1;font-family: Arial, Helvetica, sans-serif; font-size: 100%;font-weight:bold;padding-left:4px;width:90%;height:25px; } .deckPol_080915_Lehman_Contributions { color:#666;font-weight:bold; font-family:verdana; font-size:11px;padding:5px 9px; } .subhedPol_080915_Lehman_Contributions { font-weight:bold;text-decoration:none;text-transform:uppercase;padding:3px 3px; } .colhdrPol_080915_Lehman_Contributions { color:ffffff; font-size:10px;font-weight:bold;background-color:999999; } .font1Pol_080915_Lehman_Contributions { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 70%; line-height: 140%; } .boxB_Pol_080915_Lehman_Contributions { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 70%; line-height: 140%;;border-left:1px #a4abc1 solid;border-bottom:1px #a4abc1 solid;border-right:1px #a4abc1 solid;  ;width:100%; } .headlinePol_080915_Lehman_Contributions { font-weight:bold; } .headlinePol_080915_Lehman_Contributions:hover { } .headlinePol_080915_Lehman_Contributions:visited { font-weight:bold;} .captionPol_080915_Lehman_Contributions { undefined} #NoBg { background-color:transparent; } .navlinkPol_080915_Lehman_Contributions {  color:000000;font-size: 10px;font-family:verdana;line-height: 130%;text-decoration:none; } .navlinkPol_080915_Lehman_Contributions:hover { color:cc3333; } .navlinkPol_080915_Lehman_Contributions:active { color:#cc0000; } .navCellPol_080915_Lehman_Contributions { width:20px;text-align:center;background-color:#EEEEEE;border-left:1px #CCCCCC solid;border-top:1px #CCCCCC solid;padding:2px;cursor:hand;width:100%; } .bulletPol_080915_Lehman_Contributions { color:CC0000;font-family:verdana;font-size:11px;font-weight:bold;color:cc3333; }
    </style>
    <h2 tabindex=0>
        This should not be a table because it only has one valid cell (need more than one).
    </h2>
    <table width=100% cellspacing=0 cellpadding=0>
    <tr>
    <td nowrap="1" class="labelPol_080915_Lehman_Contributions">
    <td nowrap="1" class="hedPol_080915_Lehman_Contributions">Contributions</td>
    </tr></table>

    <style type="text/css">
    .nmIS,.nmISH{padding-left:20px;padding-right:12px;cursor:pointer;}
    .nmIP{padding-left:20px;padding-right:12px;font:60% Tahoma,sans-serif;color:#CC0000}
    .nmIB,.nmIBH,.nmIBD,.nmIBDH,.nmIK,.nmIKH,.nmIKD,.nmIKDH{padding-left:12px;padding-right:12px;cursor:pointer;}
    .nmIS,.nmISH,.nmIP{border-bottom:1px solid #CCCCCC}
    .nmIS,.nmIBH,.nmIBDH,.nmIKH,.nmIP{background-color:#EEEEEE}
    .nmIKD,.nmIKDH{background-color:#CC0000}
    .nmISH,.nmIB,.nmIBD,.nmIK{background-color:white}
    .nmLS,.nmLSH,.nmLB,.nmLBH,.nmLBD,.nmLBDH,.nmLK,.nmLKH,.nmLKD,.nmLKDH{font:70% Tahoma,sans-serif}
    .nmLS,.nmLSH,.nmLBD,.nmLBDH,.nmLKD,.nmLKDH,.nmIP{font-weight:bold}
    .nmLK,.nmLK:visited,.nmLKH,.nmLKH:visited{color:black;text-decoration:none}
    .nmLS,.nmLS:visited,.nmLS:hover,.nmLS:active,.nmLSH,.nmLSH:visited,.nmLSH:hover,.nmLSH:active,.nmLB,.nmLB:visited,.nmLBH,.nmLBH:visited,.nmLBD,.nmLBD:visited,.nmLBD:hover,.nmLBD:active,.nmLBDH,.nmLBDH:visited,.nmLBDH:hover,.nmLBDH:active{color:black !important;text-decoration:none}
    .nmLB:hover,.nmLBH:hover,nmLK:hover,.nmLKH:hover{color:#CC0000;text-decoration:underline}
    .nmLB:active,.nmLBH:active,.nmLK:active,.nmLKH:active{color:#CC0000;text-decoration:none}
    .nmLKD,.nmLKD:visited,.nmLKD:hover,.nmLKD:active,.nmLKDH,.nmLKDH:visited,.nmLKDH:hover,.nmLKDH:active{color:white;text-decoration:none}
    .nmLKD:visited:hover,.nmLKDH:visited:hover{text-decoration:underline;color:white;}
    .nmTB{border-top:1px solid #CCCCCC;border-left:1px solid #CCCCCC;border-bottom:1px solid #CCCCCC}
    .nmTK{border-left:3px solid #CC0000;border-bottom:3px solid #CC0000}
    .nmX{position:absolute;z-index: 100000000;left:0;top:0;height:0;line-height:0px}
    .nmTB,.nmTK{margin-bottom:2px}
    .nmTB,.nmTK,.nmTS{text-align:left;}
    .nmTS {width: 130px;}
    .nmTB {width: 130px; margin: 0px !important; border-left: 0px; border-top: 0px;}
    .nmTB{margin-top:12px}
    .nmCM{padding-top:2px;display:block;height:20px;}
    .nmCM:visited:hover{text-decoration:none;color:#000000;}
    </style>
    <h2 tabindex=0>
        This should not be a table because it does not have enough cell borders or background colors
    </h2>
    <table class="nmTB" cellpadding="0" cellspacing="0"><tr><td class="nmIBD" id="nmb" name="nmb" nm_sn="3032552" nm_suf="" CM_sf="Ex" CM="NewsMenuL1" pn="newsmenu" ct="nm0" cn="Politics"><a class="nmLBD" href="/id/3032553">Politics</a></td></tr><tr><td class="nmIB" id="nmb" name="nmb" nm_sn="18970411" nm_suf="" CM_sf="Ex" CM="NewsMenuL1" pn="newsmenu" ct="nxf" cn="Decision '08"><a class="nmLB" href="/id/18970417">Decision '08</a></td></tr><tr><td class="nmIB" id="nmb" name="nmb" nm_sn="18296896" nm_suf="" CM_sf="Ex" CM="NewsMenuL1" pn="newsmenu" ct="nxf" cn="The debates"><a class="nmLB" href="/id/18296908">The debates</a></td></tr><tr><td class="nmIB" id="nmb" name="nmb" nm_sn="21491043" nm_suf="" CM_sf="Ex" CM="NewsMenuL1" pn="newsmenu" ct="nxf" cn="The White House"><a class="nmLB" href="/id/21672863">The White House</a></td></tr><tr><td class="nmIB" id="nmb" name="nmb" nm_sn="21491571" nm_suf="" CM_sf="Ex" CM="NewsMenuL1" pn="newsmenu" ct="nxf" cn="Capitol Hill"><a class="nmLB" href="/id/21672985">Capitol Hill</a></td></tr><tr><td class="nmIB" id="nmb" name="nmb" nm_sn="14016004" nm_suf="" CM_sf="Ex" CM="NewsMenuL1" pn="newsmenu" ct="nxf" cn="National Journal"><a class="nmLB" href="/id/14016001">National Journal</a></td></tr><tr><td class="nmIB" id="nmb" name="nmb" nm_sn="19748467" nm_suf="" CM_sf="Ex" CM="NewsMenuL1" pn="newsmenu" ct="nxf" cn="New York Times"><a class="nmLB" href="/id/19747577">New York Times</a></td></tr></table>

    <h2 tabindex=0>
      This should be a table because it's editable.
    </h2>
    <table style='border: 1px solid black' contenteditable>
      <tr><td >asdf</td><td>asdf</td></tr>
    </table>

    <h2 tabindex=0>
      This should be a table because most cells have a top border.
    </h2>
    <table>
      <tr>
        <td style="border-top: 1px solid black">asdf</td>
        <td style="border-top: 1px solid black">asdf</td>
      </tr>
      <tr>
        <td style="border-top: 1px solid black">asdf</td>
        <td>asdf</td>
      </tr>
    </table>

    <h2 tabindex=0>
      This should not be a table because cells have different borders.
    </h2>
    <table border=0>
      <tr>
        <td style="xborder-top: 1px solid black">asdf</td>
        <td style="xborder-left: 1px solid black">asdf</td>
      </tr>
      <tr>
        <td style="xborder-bottom: 1px solid black">asdf</td>
        <td style="xborder-right: 1px solid black">asdf</td>
      </tr>
    </table>

    <h2 tabindex=0>
      This should be a table because it sets empty-cells: hide on the table.
    </h2>
    <table style="empty-cells: hide">
      <tr>
        <td>asdf</td><td>asdf</td>
      </tr>
      <tr>
        <td style="border: 1px solid black"></td>
        <td style="border: 1px solid black">asdf</td>
      </tr>
      <tr>
        <td>asdf</td><td>asdf</td>
      </tr>
    </table>

    <h2 tabindex=0>
      This should be a table because it sets empty-cells: hide on a cell.
    </h2>
    <table>
      <tr>
        <td>asdf</td><td>asdf</td>
      </tr>
      <tr>
        <td style="border: 1px solid black; empty-cells: hide"></td>
        <td style="border: 1px solid black">asdf</td>
      </tr>
      <tr>
        <td>asdf</td><td>asdf</td>
      </tr>
    </table>

    <h2 tabindex=0>
        This should be a table because it has a col.
    </h2>
    <table border=0>
    <colgroup>
      <col span="2" style="background-color:#ccf">
    </colgroup>
    <tr><td>asdf</td><td>asdf</td></tr>
    <tr><td>asdf</td><td>asdf</td></tr>
    </table>

    <h2 tabindex=0>
        This should be a table because it has at least 20 rows
    </h2>
    <table border=0>
    <tr><td>asdf</td></tr> <tr><td>asdf</td></tr> <tr><td>asdf</td></tr> <tr><td>asdf</td></tr>
    <tr><td>asdf</td></tr> <tr><td>asdf</td></tr> <tr><td>asdf</td></tr> <tr><td>asdf</td></tr>
    <tr><td>asdf</td></tr> <tr><td>asdf</td></tr> <tr><td>asdf</td></tr> <tr><td>asdf</td></tr>
    <tr><td>asdf</td></tr> <tr><td>asdf</td></tr> <tr><td>asdf</td></tr> <tr><td>asdf</td></tr>
    <tr><td>asdf</td></tr> <tr><td>asdf</td></tr> <tr><td>asdf</td></tr> <tr><td>asdf</td></tr>
    <tr><td>asdf</td></tr> <tr><td>asdf</td></tr> <tr><td>asdf</td></tr> <tr><td>asdf</td></tr>
    </table>

    <div id="result"></div>
    
    <script>
        if (window.accessibilityController) {
            function nextAxSibling(axElement) {
                var axParent = axElement.parentElement();
                for (var i = 0; i < axParent.childrenCount - 1; i++) {
                    if (axParent.childAtIndex(i).isEqual(axElement))
                        return axParent.childAtIndex(i + 1);
                }
                return null;
            }

            var tableHeadings = document.getElementsByTagName('h2');
            for (var i = 0; i < tableHeadings.length; i++) {
                var tableHeading = tableHeadings[i];
                tableHeading.focus();
                var axTableHeading = accessibilityController.focusedElement;
                var axTable = nextAxSibling(axTableHeading);
                var output = axTable.allAttributes();

                var spacerElement = document.createElement('br');
                tableHeading.parentElement.insertBefore(spacerElement, tableHeading);

                var outputElement = document.createElement('pre');
                outputElement.innerText = output + '\n\n';
                tableHeading.parentElement.insertBefore(outputElement, tableHeading.nextSibling);
            }
        }
    </script>
</body>
</html>
