<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">

<!--

   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

-->
<!-- ====================================================================== -->
<!-- append child test                                                      -->
<!--                                                                        -->
<!-- @author tkormann@ilog.fr                                               -->
<!-- @version $Id$ -->
<!-- ====================================================================== -->

<?xml-stylesheet type="text/css" href="../../resources/style/test.css" ?>  

<svg xmlns="http://www.w3.org/2000/svg" 
     xmlns:xlink="http://www.w3.org/1999/xlink"
     id="body" width="450" height="500" viewBox="0 0 450 500">

    <title>appendChild test 'onload'</title>

    <text x="50%" y="45" class="title">appendChild test 'onload'</text>

    <script type="text/ecmascript">

    var svgNamespaceURI = "http://www.w3.org/2000/svg";

    function build(evt) {
        var g = evt.target;
        var document = g.ownerDocument;
        var e;

        e = createElement(document, 200, 100, "fill:crimson");
        g.appendChild(e);

        e = createElement(document, 250, 100, "fill:orange");
        g.appendChild(e);

        e = createElement(document, 150, 100, "fill:gold");
        g.insertBefore(e, g.firstChild);

        var ee = createElement(document, 100, 100, "fill:#eee");
        g.insertBefore(ee, e);
    }

    function createElement(g, x, y, style) {
        var e = document.createElementNS(svgNamespaceURI, "rect");
        e.setAttribute("x", x);
        e.setAttribute("y", y);
        e.setAttribute("width", 100);
        e.setAttribute("height", 100);
        e.setAttribute("style", style);
        return e;
    }

    </script>

    <g onload="build(evt)" id="test-content">
    </g>
        <text x="225" y="220" style="text-anchor:middle">constructed using 'onload'</text>
    <g>
       <rect x="100" y="300" width="100" height="100" style="fill:#eee"/>
       <rect x="150" y="300" width="100" height="100" style="fill:gold"/>
       <rect x="200" y="300" width="100" height="100" style="fill:crimson"/>
       <rect x="250" y="300" width="100" height="100" style="fill:orange"/>
    </g>
        <text x="225" y="420" style="text-anchor:middle">reference</text>
</svg>
