<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:svg="http://www.w3.org/2000/svg" >
  <head>
    <script>
      var dx,dy;
      var circle;

      function init()
      {
        circle = document.getElementById('circ');
        circle.addEventListener("mousedown", mousedown_listener, false);
      }	    

      function mousedown_listener(evt)
      {
        dx = circle.cx.baseVal.value - evt.clientX;
        dy = circle.cy.baseVal.value - evt.clientY;
        document.addEventListener("mousemove", mousemove_listener, true);
        document.addEventListener("mouseup", mouseup_listener, true);
      }

      function mouseup_listener(evt)
      {
        document.removeEventListener("mousemove", mousemove_listener, true);
        document.removeEventListener("mouseup", mouseup_listener, true);
      }

      function mousemove_listener(evt)
      {
        var id = circle.ownerSVGElement.suspendRedraw(1000);
        circle.cx.baseVal.value = evt.clientX + dx;
        circle.cy.baseVal.value = evt.clientY + dy;
        circle.ownerSVGElement.unsuspendRedraw(id);
      }
    </script>
    <title>SVG Events</title>
  </head>

  <body onload="init();">
    <h1>SVG Events</h1>
  <ul>
    <li>SVG elements receive UI events such as mouse clicks, focusing</li>
    <li>Compliant with DOM2 event listeners</li>
  </ul>
  <pre style="background-color:#DDDDFF;">
  &lt;svg xmlns:html="http://www.w3.org/1999/xhtml"
       xmlns="http://www.w3.org/2000/svg"
       onload="init();" &gt;

    &lt;script&gt;
      var dx,dy;
      var circle;

      function init()
      {
        circle = document.getElementById('circ');
        circle.addEventListener("mousedown", mousedown_listener, false);
      }	    

      function mousedown_listener(evt)
      {
        dx = circle.cx.baseVal.value - evt.clientX;
        dy = circle.cy.baseVal.value - evt.clientY;
        document.addEventListener("mousemove", mousemove_listener, true);
        document.addEventListener("mouseup", mouseup_listener, true);
      }

      function mouseup_listener(evt)
      {
        document.removeEventListener("mousemove", mousemove_listener, true);
        document.removeEventListener("mouseup", mouseup_listener, true);
      }

      function mousemove_listener(evt)
      {
        var id = circle.ownerSVGElement.suspendRedraw(1000);
        circle.cx.baseVal.value = evt.clientX + dx;
        circle.cy.baseVal.value = evt.clientY + dy;
        circle.ownerSVGElement.unsuspendRedraw(id);
      }
    &lt;/script&gt;
       
    &lt;foreignObject ... &gt;
      &lt;html:img src="torness.jpg" /&gt;
    &lt;/foreignObject&gt;
    &lt;circle id="circ" r="2cm" cx="5cm" cy="3cm" ... /&gt;
  &lt;/svg&gt; 
  </pre>

  <svg:svg width="12cm" height="12cm">
    <svg:foreignObject x="-6cm" y="-2cm" width="18cm" height="14cm">
      <html:img src="torness.jpg" />
    </svg:foreignObject>
    <svg:circle id="circ" r="2cm" cx="5cm" cy="3cm" style="fill:red; stroke:blue; fill-opacity:0.5; stroke-width:3;"/>
    <svg:rect x="0" y="0" width="12cm" height="12cm"
              style="fill:none; stroke:black; stroke-width:1;"/>
  </svg:svg> 
</body>
</html>