<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<script src="../../resources/accessibility-helper.js"></script>
</head>
<body id="body">
  <div id="content">
  <!-- N.B. The variety of whitespace chars separating the ids is deliberate -->
  <div tabindex="0" id="test" role="group"
       aria-flowto="flowto1	flowto2"
       aria-owns="owned1 	 	 owned2"
       aria-controls="controlled1
                      controlled2"
       aria-details="details"
       aria-errormessage="error"
       aria-labelledby="label1 label2"
       aria-describedby="description1 description2">
  </div>
  <div id="owned1" role="button">owned 1</div>
  <div id="owned2" role="radio">owned 2</div>
  <div id="controlled1" role="group" aria-label="controlled 1"></div>
  <div id="controlled2" role="group" aria-label="controlled 2"></div>
  <p id="label1">label 1</p>
  <div id="label2">label 2</div>
  <p id="description1">description 1</p>
  <div id="description2">description 2</div>
  <div tabindex="0" id="flowto1" role="group" aria-label="next group (1 of 2)" aria-describedby="description1"></div>
  <div tabindex="0" id="flowto2" role="group" aria-label="next group (2 of 2)" aria-describedby="description2"></div>
  <div id="details">Detailed descriptive information.</div>
  <div id="error">Information about the error.</div>
</div>
<p id="description"></p>
<div id="console"></div>
<script>
    function info(axElement) {
        if (!axElement)
            return "(null)";

        string = axElement.title.split("AXTitle: ")[1];
        string = string ? string : axElement.stringValue.split("AXValue: ")[1];
        return axElement.role.split("AXRole: ")[1] + ": '" + string + "'";
    }

    description("This verifies the exposure of aria-properties via accessible relations.");
    if (window.accessibilityController) {
        var axElement = accessibilityController.accessibleElementById("test");

        var owned = axElement.ariaOwnsElementAtIndex(0);
        var owner = owned.ariaOwnsReferencingElementAtIndex(0);
        debug("axElement.ariaOwnsElementAtIndex(0): " + info(owned));
        debug("owned.ariaOwnsReferencingElementAtIndex(0): " + info(owner));

        owned = axElement.ariaOwnsElementAtIndex(1);
        owner = owned.ariaOwnsReferencingElementAtIndex(0);
        debug("\naxElement.ariaOwnsElementAtIndex(1): " + info(owned));
        debug("owned.ariaOwnsReferencingElementAtIndex(0): " + info(owner));

        var controlled = axElement.ariaControlsElementAtIndex(0);
        var controller = controlled.ariaControlsReferencingElementAtIndex(0);
        debug("\naxElement.ariaControlsElementAtIndex(0): " + info(controlled));
        debug("controlled.ariaControlsReferencingElementAtIndex(0): " + info(controller));

        controlled = axElement.ariaControlsElementAtIndex(1);
        controller = controlled.ariaControlsReferencingElementAtIndex(0);
        debug("\naxElement.ariaControlsElementAtIndex(1): " + info(controlled));
        debug("controlled.ariaControlsReferencingElementAtIndex(0): " + info(controller));

        var labelledBy = axElement.ariaLabelledByElementAtIndex(0);
        var label = labelledBy.ariaLabelledByReferencingElementAtIndex(0);
        debug("\naxElement.ariaLabelledByElementAtIndex(0): " + info(labelledBy));
        debug("labelledBy.ariaLabelledByReferencingElementAtIndex(0): " + info(label));

        labelledBy = axElement.ariaLabelledByElementAtIndex(1);
        label = labelledBy.ariaLabelledByReferencingElementAtIndex(0);
        debug("\naxElement.ariaLabelledByElementAtIndex(1): " + info(labelledBy));
        debug("labelledBy.ariaLabelledByReferencingElementAtIndex(0): " + info(label));

        var describedBy = axElement.ariaDescribedByElementAtIndex(0);
        var descriptionFor = describedBy.ariaDescribedByReferencingElementAtIndex(0);
        var alsoDescriptionFor = describedBy.ariaDescribedByReferencingElementAtIndex(1);
        debug("\naxElement.ariaDescribedByElementAtIndex(0): " + info(describedBy));
        debug("describedBy.ariaDescribedByReferencingElementAtIndex(0): " + info(descriptionFor));
        debug("describedBy.ariaDescribedByReferencingElementAtIndex(1): " + info(alsoDescriptionFor));

        describedBy = axElement.ariaDescribedByElementAtIndex(1);
        descriptionFor = describedBy.ariaDescribedByReferencingElementAtIndex(0);
        alsoDescriptionFor = describedBy.ariaDescribedByReferencingElementAtIndex(1);
        debug("\naxElement.ariaDescribedByElementAtIndex(1): " + info(describedBy));
        debug("describedBy.ariaDescribedByReferencingElementAtIndex(0): " + info(descriptionFor));
        debug("describedBy.ariaDescribedByReferencingElementAtIndex(1): " + info(alsoDescriptionFor));

        var flowTo = axElement.ariaFlowToElementAtIndex(0);
        var flowFrom = flowTo.ariaFlowToReferencingElementAtIndex(0);
        debug("\naxElement.ariaFlowToElementAtIndex(0): " + info(flowTo));
        debug("flowTo.ariaFlowToReferencingElementAtIndex(0): " + info(flowFrom));

        flowTo = axElement.ariaFlowToElementAtIndex(1);
        flowFrom = flowTo.ariaFlowToReferencingElementAtIndex(0);
        debug("\naxElement.ariaFlowToElementAtIndex(1): " + info(flowTo));
        debug("flowTo.ariaFlowToReferencingElementAtIndex(0): " + info(flowFrom));

        var details = axElement.ariaDetailsElementAtIndex(0);
        var detailsFor = details.ariaDetailsReferencingElementAtIndex(0);
        debug("\naxElement.ariaDetailsElementAtIndex(0): " + info(details));
        debug("details.ariaDetailsReferencingElementAtIndex(0): " + info(detailsFor));

        var error = axElement.ariaErrorMessageElementAtIndex(0);
        var errorFor = error.ariaErrorMessageReferencingElementAtIndex(0);
        debug("\naxElement.ariaErrorMessageElementAtIndex(0): " + info(error));
        debug("error.ariaErrorMessageReferencingElementAtIndex(0): " + info(errorFor));

        document.getElementById("content").style.visibility = "hidden";
    }
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
