<!DOCTYPE html>
<html>
<head>
    <script type="text/javascript" src="../resources/runner.js"></script>
</head>
<body>

<div id="wrapper">
    <h2>Selected</h2>
    <div id="selected"></div>
    <h2>NonSelected</h2>
    <div id="nonselected"></div>
</div>

<script>
var numDivsInHost = 100;
var typeNames = ['A', 'B', 'C'];
var array = new Array(numDivsInHost);

function setup()
{
    var nDivs = numDivsInHost;
    var nonSelected = document.getElementById('nonselected');

    for (var i = 0; i < nDivs; ++i) {
        var div = document.createElement('div');
        div.appendChild(document.createTextNode('div' + i));
        div.className = typeNames[i % typeNames.length]
        array[i] = div;
        nonSelected.appendChild(div);
    }
}

function run()
{
    var nDivs = numDivsInHost;
    var array = window.array;

    var selected = document.getElementById('selected');
    var nonSelected = document.getElementById('nonselected');

    for (var i = 0; i < 100; ++i) {
        for (var j = 0; j < typeNames.length; ++j) {
            for (var k = 0; k < nDivs; ++k) {
                if (array[k].className == typeNames[j])
                    selected.appendChild(array[k]);
                else
                    nonSelected.appendChild(array[k]);
            }
            selected.offsetLeft;
            nonSelected.offsetLeft;
        }
    }
}

function done()
{
    wrapper.innerHTML = '';
}

setup();

PerfTestRunner.measureTime({
    description: "Measure distribution and layout performance when we do the almost same thing as select attribute of content element is changed using JavaScript",
    run: run,
    done: done
});
</script>
</body>
</html>
