<html>
<script type="text/javascript">
	var win;
	function testOpen() {
		win = window.open('javascript:"<h1>Simple New Window</h2>"', "", "left=10,top=200,height=100,width=300");
	}
	function testResizeTo() {
		win.resizeTo(600,800);
	}
	function testMoveTo() {
		win.moveTo(200,100);
	}
	function testMoveBy() {
		win.moveBy(2,2);
	}
	function testScrollBy() {
		win.scrollBy(1,20);
	}
	function testResizeBy() {
		win.resizeBy(2,3);
	}
	function testClose() {
		win.close();
	}

	win1 = window.open('javascript:"<h1>Simple New Window 1</h2><p>bounds: left=10,top=200,height=100,width=300<p>"', "", "left=10,top=200,height=100,width=300");
	win2 = window.open('javascript:"<h1>Simple New Window 2</h2><p>bounds: left=10,top=200<p>"', "", "left=10,top=200");
	win3 = window.open('javascript:"<h1>Simple New Window 3</h2><p>bounds: height=100,width=300<p>"', "", "height=100,width=300");
	win4 = window.open('javascript:"<h1>Simple New Window 4</h2><p>bounds: not specified<p>"', "", "");
	
	setTimeout("win1.close();win2.close();win3.close();win4.close()", 5000);
	
</script>

<form>
	<input type="button" VALUE="window.open" onClick="testOpen()">
	<input type="button" VALUE="resizeTo" onClick="testResizeTo()">
	<input type="button" VALUE="moveTo" onClick="testMoveTo()">
	<input type="button" VALUE="moveBy" onClick="testMoveBy()">
	<input type="button" VALUE="scrollBy" onClick="testScrollBy()">
	<input type="button" VALUE="resizeBy" onClick="testResizeBy()">
	<input type="button" VALUE="close" onClick="testClose()">
</FORM>
<body>
<p>This test uses javascript.
<p>It opens a new window. Sets a timer. Then close the new window when the timer expires.
</body>
</html>
