<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Testing Javascript</title>
    <script type="text/javascript">
        var seen = {};

        function updateContent(input) {
            document.getElementById('resultParagraph').innerHTML = input.value;
        }

        function displayMessage(message) {
            document.getElementById('resultParagraph').innerHTML = message;
        }

        function appendMessage(message) {
            document.getElementById('resultParagraph').innerHTML += message + " ";
        }

        function register(message) {
          if (!seen[message]) {
            appendMessage(message);
            seen[message] = true;
          }
        }

        function delayedShowHide(delay, show) {
          var blackBox = document.getElementById('clickToHide');
          window.setTimeout(function() {
            blackBox.style.display = show ? '' : 'none';
          }, delay);
        }
    </script>
    <script type="text/javascript">
        var startList = function() {
            // Ugh. Let's hope no-one is faking their user agent when running the tests
            if (navigator.userAgent.indexOf("MSIE") != -1) {
                var navRoot = document.getElementById("nav");
                for (var i = 0; i < navRoot.childNodes.length; i++) {
                    var node = navRoot.childNodes[i];
                    if (node.nodeName == "LI") {
                        node.onmouseover = function() {
                            this.className += " over";
                        };
                        node.onmouseout = function() {
                            this.className = this.className.replace(" over", "");
                        };
                    }
                }
            }
        };
        window.onload=startList;
    </script>
    <style type="text/css">
        #nav {
            padding: 0; margin: 0; list-style: none;
        }
        #nav li {
            float: left; position: relative; width: 10em;
        }
        #nav li ul {
            display: none; position: absolute; top: 1em; left: 0;
        }
        #nav li > ul { top: auto; left: auto; }
        #nav li:hover ul, #nav li.over ul{ display: block; background: white; }
    </style>
</head>
<body>
<h1>Type Stuff</h1>

<div>
    <ul id="nav">
        <li id="menu1">Menu 1
            <ul>
                <li id="item1" onclick="displayMessage('item 1');">Item 1</li>
                <li>Item 2</li>
            </ul>
        </li>
    </ul>
</div>

<div id="resultContainer" height="30">&nbsp;
  <div id="result" style="width:300;height:60">
    <p id="resultParagraph">&nbsp;</p>
  </div>

</div>
                                                                                         
<div id="formageddon">
    <form action="#">
        Key Up: <input type="text" id="keyUp" onkeyup="javascript:updateContent(this)"/><br/>
        Key Down: <input type="text" id="keyDown" onkeydown="javascript:updateContent(this)"/><br/>
        Key Press: <input type="text" id="keyPress" onkeypress="javascript:updateContent(this)"/><br/>
        Change: <input type="text" id="change" onkeypress="javascript:displayMessage('change')"/><br/>
        <textarea id="keyDownArea" onkeydown="javascript:updateContent(this)" rows="2" cols="15"></textarea>
        <textarea id="keyPressArea" onkeypress="javascript:updateContent(this)" rows="2" cols="15"></textarea>
        <textarea id="keyUpArea" onkeyup="javascript:updateContent(this)" rows="2" cols="15"></textarea>
        <select id="selector" onchange="javascript:updateContent(this)">
            <option value="foo">Foo</option>
            <option value="bar">Bar</option>
        </select>
        <select id="selector2" onclick="javascript:updateContent(this)">
            <option value="foo">Foo</option>
            <option value="bar">Bar</option>
        </select>
        <input type="checkbox" id="checkbox" value="checkbox thing" onchange="javascript:updateContent(this)"/>
        <input id="clickField" type="text" onclick="document.getElementById('clickField').value='Clicked';" value="Hello"/>
        <input id="doubleClickField" type="text" onclick="document.getElementById('doubleClickField').value='Clicked';" ondblclick="document.getElementById('doubleClickField').value='DoubleClicked';" oncontextmenu="document.getElementById('doubleClickField').value='ContextClicked'; return false;" value="DoubleHello"/>
        <input id="clearMe" value="Something" onchange="displayMessage('Cleared')"/>
    </form>
</div>

<div>
    <p><a href="#" onclick="javascript:document.title='Changed'">Change the page title!</a></p>

    <p><a onclick="javascript:document.title='Changed'" id="nohref">No href</a></p>

    <p><a id="updatediv" href="#" onclick="javascript:document.getElementById('dynamo').innerHTML = 'Fish and chips!';">Update a
        div</a></p>
</div>

<div id="dynamo">What's for dinner?</div>

<div id="mousedown" onmousedown="javascript:displayMessage('mouse down');">
    <p>Click for the mouse down event</p>
    <span><p id="child">Here's some text</p></span>
</div>

<div id="mouseup" onmouseup="javascript:displayMessage('mouse up');">
    <p>Click for the mouse up event</p>
</div>

<div id="mouseclick" onclick="javascript:displayMessage('mouse click');">
    <p>Click for the mouse click event</p>
</div>

<div id="error" onclick="document.getElementById('doesnotexist').innerHTML = 'cheese';">
    Clicking this causes a JS exception in the click handler
</div>

<div>
  <form action="resultPage.html" id="on-form">
    <input id="theworks"
           onfocus="appendMessage('focus')"
           onkeydown="appendMessage('keydown')"
           onkeypress="appendMessage('keypress')"
           onkeyup="appendMessage('keyup')"
           onblur="appendMessage('blur')"
           onchange="appendMessage('change')"
           />

    <input id="changeable" name="changeable" onfocus="appendMessage('focus')" onchange="appendMessage('change')" onblur="appendMessage('blur')"/>
           
    <button type="button" id="plainButton" 
    		onfocus="appendMessage('focus')"
           	onkeydown="appendMessage('keydown')"
           	onkeypress="appendMessage('keypress')"
           	onkeyup="appendMessage('keyup')"
           	onblur="appendMessage('blur')"
           	onclick="appendMessage('click')"
           	onmousedown="appendMessage('mousedown ')" 
           	onmouseup="appendMessage('mouseup ')"
            onmouseover="register('mouseover ')"
            onmousemove="register('mousemove ')"
    >
        <b>Go somewhere</b>
    </button>
    <button type="submit" id="submittingButton"><emph>submit</emph></button>
    <button type="button" id="jsSubmitButton" onclick="javascript:document.getElementById('on-form').submit();">Submitomatic</button>

    <button type="button" id="switchFocus" onclick="document.getElementById('theworks').focus();">Switch focus</button>
    <button type="button" onclick="var element = document.getElementById('switchFocus'); var clickEvent = document.createEvent('MouseEvents'); clickEvent.initMouseEvent('click', true, true, null, 0, 0, 0, 0, 0,false, false, false, false, 0, element);element.dispatchEvent(clickEvent);">Do magic</button><br/>
    <label id="labelForCheckbox" for="labeledCheckbox" onclick="appendMessage('labelclick')">Toggle checkbox</label><input type="checkbox" id="labeledCheckbox" onclick="appendMessage('chboxclick')"/>
  </form>
  
  <form action="javascriptPage.html" id="submitListeningForm" onsubmit="appendMessage('form-onsubmit '); return false;">
    <p>
      <input id="submitListeningForm-text" type="text" onsubmit="appendMessage('text-onsubmit ')" onclick="appendMessage('text-onclick ');" />
      <input id="submitListeningForm-submit" type="submit" onsubmit="appendMessage('submit-onsubmit ')" onclick="appendMessage('submit-onclick ');" />
    </p>
  </form>
</div>

<p id="suppressedParagraph" style="display: none">A paragraph suppressed using CSS display=none</p>

<div>
    <p id="displayed">Displayed</p>

    <form action="#"><input type="hidden" name="hidden" /> </form>

    <p id="none" style="display: none;">Display set to none</p>

    <p id="hidden" style="visibility: hidden;">Hidden</p>

    <div id="hiddenparent" style="height: 2em; display: none;">
      <div id="hiddenchild">
        <a href="#" id="hiddenlink">ok</a>
      </div>
    </div>
    
    <div style="visibility: hidden;">
      <span>
        <input id="unclickable" />
        <input type="checkbox" id="untogglable" checked="checked" />Check box you can't see
      </span>
    </div>

    <p id="outer" style="visibility: hidden">A <b id="visibleSubElement" style="visibility: visible">sub-element that is explicitly visible</b> using CSS visibility=visible</p>
</div>

<div>
    <form>
        <input type="text" id="keyReporter" size="80"
               onkeyup="appendMessage('up: ' + event.keyCode)"
               onkeypress="appendMessage('press: ' + event.keyCode)"
               onkeydown="displayMessage(''); appendMessage('down: ' + event.keyCode)" />
        <input name="suppress" onkeydown="if (event.preventDefault) event.preventDefault(); event.returnValue = false; return false;" onkeypress="appendMessage('press');"/>
    </form>
</div>

<!-- Used for testing styles -->
<div style="background-color: green;" id="green-parent">
  <p id="style1">This should be greenish</p>
    <ul>
      <li id="green-item">So should this</li>
      <li id="red-item" style="background-color: red;">But this is red</li>
    </ul>
</div>

<a href="#" id="close" onclick="window.close();">Close window</a>

<div id="delete" onclick="var d = document.getElementById('deleted'); this.removeChild(d);">
    <p id="deleted">I should be deleted when you click my containing div</p>
    <p>Whereas, I should not</p>
</div>

<div>
    <span id="hideMe" onclick="this.style.display = 'none';">Click to hide me.</span>
</div>

<div id="hideOnBlur" tabindex="0"
     style="width: 100px; height: 100px; border: 1px solid red"
     onblur="appendMessage('blur'); this.style.display = 'none';">
  <div id="hideOnBlurChild"
       style="width: 30px; height: 30px; border: 1px solid blue">
    x
  </div>
  Focusable. Will hide when focus is lost.
</div>

<div style="margin-top: 10px;">
  Click actions delayed by 3000ms:
  <div id="clickToShow" onclick="delayedShowHide(3000, true);"
       style="float: left;width: 100px;height:100px;border: 1px solid black;">
    Click to show black box
  </div>
  <div id="clickToHide" onclick="delayedShowHide(3000, false);"
       style="float: left;width: 100px;height:100px;border: 1px solid black;
              background-color: black; color: white; display: none;">
    Click to hide black box
  </div>
  <div style="clear: both"></div>
</div>

<a id="new_window" onmouseup="window.open('closeable_window.html', 'close_me')" href="#">Click me to open a new window</a>

<a id="throwing-mouseover" onmouseover="throw new Error()" href="#throwing-mouseover">Mouse over me will throw a JS error</a>

<div id="parent">
    <span id="movable" onmouseover="var p = document.getElementById('movable'); displayMessage('parent matches? ' + (p != event.relatedTarget));">
        Click on me to show the related target
    </span>
</div>

<div id="zero" style="width:0;height:0">
  <div>
    <img src="map.png">
  </div>
</div>

</body>
</html>


