<!doctype html>
<html lang="en">
<head>
	<title>Switch between display block and none on :hover</title>
	<style>
		.box {
			width: 100px;
			height: 100px;
		}
		#dummy {
			background-color: black;
		}
		#hoverTest {
			border: 5px solid green;
			border-left: 100px solid green;
			color: black;
			display: block;
			width: 230px;
		}
		#hoverTest:hover {
			border-color: darkred;
			display: none;
		}
		#after_hoverTest {
			background-color: blue;
			color: white;
			padding: 10px;
		}
	</style>

	<script src="../../resources/js-test.js"></script>
</head>

<script type="text/javascript">
	function elementHovered() {
		if (window.testRunner)
			document.getElementById("hoverTest").style.display = "none";
	}
</script>

<body>
	<div id="dummy" class="box"></div>
	<div id="hoverTest" class="box" onmouseover="elementHovered()">When hovered, this box's display will switch from <b>block</b> to <b>none</b> (click on it and keep the mouse button pushed to avoid flicker and get a more clear view)</div>
	<div id="after_hoverTest" class="box">This is here to show the layout being recomputed</div>

	<script type="text/javascript">
		jsTestIsAsync = true;

		function beginTest() {
			if (window.eventSender) {
				var hoverTest  = document.getElementById("hoverTest");

				// move mouse on the hover test object
				eventSender.mouseMoveTo(hoverTest.offsetLeft + 50, hoverTest.offsetTop + 10);

				release();
			}
		}

		function release() {
			if (window.eventSender) {
				var hoverTest  = document.getElementById("hoverTest");
				var displayMode = window.getComputedStyle(hoverTest).getPropertyValue("display");

				if (displayMode == "none")
					testPassed("Setting display to none on hover processed OK.");
				else
					testFailed("Setting display to none on hover FAILED." + " (expected 'none', got '" + displayMode + "')");

				var elementsToHide = document.getElementsByClassName('box');
				for (var element, i = 0; element = elementsToHide[i]; i++)
				    element.style.visibility = "hidden";

				finishJSTest();
			}
		}

		beginTest();
	</script>
</body>
</html>