<html>
<head>
<title>Hover tests</title>
<script src="jquery.js"></script>
<style>
/* Remove body dimensions so we can test enter/leave to surrounding browser chrome */
body, html {
	border: 0;
	margin: 0;
	padding: 0;
}
p {
	margin: 2px 0;
}
.hover-box {
	background: #f33;
	padding: 3px;
	margin: 10px 40px 20px 0;
}
.hover-status {
	background: #f66;
	padding: 1px;
}
.hover-inside {
	background: #6f6;
	padding: 1px;
	margin: 8px auto;
	width: 40%;
	text-align: center;
}
</style>
 </head>
 <body>
	<h2>Hover (mouse{over,out,enter,leave}) Tests</h2>
	<p>Be sure to try moving the mouse out of the browser via the left side on each test.</p>
	<div id="wrapper">

	<div id="hoverbox" class="hover-box">
		<div class="hover-status">
			<button>Activate</button>
			.hover() in/out: <span class="ins">0</span> / <span class="outs">0</span>
		</div>
		<div class="hover-inside">
			Mouse over here should NOT trigger the counter.
		</div>
	</div>
	<div id="liveenterbox" class="hover-box">
		<div class="hover-status">
			<button>Activate</button>
			Live enter/leave: <span class="ins">0</span> / <span class="outs">0</span>
		</div>
		<div class="hover-inside">
			Mouse over here should NOT trigger the counter.
		</div>
	</div>
	<div id="delegateenterbox" class="hover-box">
		<div class="hover-status">
			<button>Activate</button>
			Delegated enter/leave: <span class="ins">0</span> / <span class="outs">0</span>
		</div>
		<div class="hover-inside">
			Mouse over here should NOT trigger the counter.
		</div>
	</div>

	<div id="overbox" class="hover-box">
		<div class="hover-status">
			<button>Activate</button>
			Bind over/out: <span class="ins">0</span> / <span class="outs">0</span>
		</div>
		<div class="hover-inside">
			Mouse over here SHOULD trigger the counter.
		</div>
	</div>
	<div id="liveoverbox" class="hover-box">
		<div class="hover-status">
			<button>Activate</button>
			Live over/out: <span class="ins">0</span> / <span class="outs">0</span>
		</div>
		<div class="hover-inside">
			Mouse over here SHOULD trigger the counter.
		</div>
	</div>
	<div id="delegateoverbox" class="hover-box">
		<div class="hover-status">
			<button>Activate</button>
			Delegated over/out: <span class="ins">0</span> / <span class="outs">0</span>
		</div>
		<div class="hover-inside">
			Mouse over here SHOULD trigger the counter.
		</div>
	</div>

	</div> <!-- wrapper -->

<script>

$(function(){

	var x,
		countIns = function() {
			var d = $(this).data();
			$("span.ins", this).text(++d.ins);
		},
		countOuts = function() {
			var d = $(this).data();
			$("span.outs", this).text(++d.outs);
		};

	// Tests can be activated separately or in combination to check for interference

	$("#hoverbox button").click(function(){
		$("#hoverbox")
			.data({ ins: 0, outs: 0 })
			.hover( countIns, countOuts );
		$(this).remove();
	});
	$("#delegateenterbox button").click(function(){
		$("html")
			.find("#delegateenterbox").data({ ins: 0, outs: 0 }).end()
			.delegate("#delegateenterbox", "mouseenter", countIns )
			.delegate("#delegateenterbox", "mouseleave", countOuts );
		$(this).remove();
	});
	$("#liveenterbox button").click(function(){
		$("#liveenterbox")
			.data({ ins: 0, outs: 0 })
			.live("mouseenter", countIns )
			.live("mouseleave", countOuts );
		$(this).remove();
	});

	$("#overbox button").click(function(){
		$("#overbox")
			.data({ ins: 0, outs: 0 })
			.bind("mouseover", countIns )
			.bind("mouseout", countOuts );
		$(this).remove();
	});
	$("#liveoverbox button").click(function(){
		$("#liveoverbox")
			.data({ ins: 0, outs: 0 })
			.live("mouseover", countIns )
			.live("mouseout", countOuts );
		$(this).remove();
	});
	$("#delegateoverbox button").click(function(){
		$(document)
			.find("#delegateoverbox").data({ ins: 0, outs: 0 }).end()
			.delegate("#delegateoverbox", "mouseover", countIns )
			.delegate("#delegateoverbox", "mouseout", countOuts );
		$(this).remove();
	});
});

</script>
</body>
</html>
