<html>
<head>
<script>
function log(str)
{
    var li = document.createElement("li");
    li.appendChild(document.createTextNode(str));
    var console = document.getElementById("console");
    console.appendChild(li);
}

function assertEqual(message, actual, expected)
{
    if (actual != expected)
        log("\n" + message + ": Failure, actual: " + actual + "; expected: " + expected);
    else
        log("\n" + message + ": Success");
}

function changeDir(new_dir) 
{
    document.body.dir = new_dir;
    return false;
}

onload = function()
{
    if (window.testRunner)                    
        testRunner.dumpAsText();

    assertEqual("original scroll x for RTL page ", window.scrollX, 0);
    window.scrollTo(-100, 0);
    assertEqual("horizontal scroll x for RTL page ", window.scrollX, -100);

    document.body.dir = "ltr";
    assertEqual("original scroll x for LTR page ", window.scrollX, 0);
    window.scrollTo(100, 0);
    assertEqual("horizontal scroll x for LTR page ", window.scrollX, 100);

    document.getElementById("div").style.display = "none";
}
</script>
</head>
<body dir="rtl">

<div style="width: 4000px; border: 1px solid red;" id="div">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc et nisl tellus. Vivamus aliquam elit non arcu scelerisque eget dapibus nunc vulputate. Maecenas scelerisque egestas purus, id bibendum magna venenatis vel. Vestibulum bibendum volutpat aliquam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum eget risus sodales mi tristique dignissim et sed lectus. Cras convallis, nibh ut dapibus gravida, enim mauris molestie elit, eget fringilla augue est nec est. Curabitur eu quam non purus sodales pulvinar. Donec ultrices dui eget dolor lobortis in porta quam rutrum. Nulla risus lacus, adipiscing quis ullamcorper vestibulum, condimentum sed lacus. Sed in nunc dolor, quis egestas turpis. Integer arcu tellus, posuere sit amet pellentesque a, molestie at mi. Nulla blandit, mi et euismod imperdiet, augue arcu ornare felis, nec viverra lacus ligula ut metus. Proin ut leo ante, at consectetur sem. Nullam non nunc ligula. Proin sed ante sem, id rutrum purus.
</div>
<ul id="console"></ul>
<br>
</body>
</html>
