<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

<!--
  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.
-->
<head>
    <title>Flash Bridge Sample</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style type="text/css" media="screen">
    body {
        margin: 0px;
        overflow: hidden;
        font-size: .9em;
    }
    
    #container {
        width: 1024px;
    }

    #controls {
        margin-bottom: 20px; 
        float: left; 
        padding: 20px;
    }

    #flashcontent {
        margin-top: 20px; 
        width: auto;
    }

    textarea {
        font-size: 1em;
    }
    </style>
    <script type="text/javascript" src="fabridge/javascript/FABridge.js" ></script>
    <script type="text/javascript" src="FABridgeSample.js" ></script>
    <script type="text/javascript" src="fabridge/swfobject/swfobject.js"></script>
    <script type="text/javascript">
        var flashvars = {};
        flashvars.bridgeName = "example";
        var params = {};
        var attributes = {};
        attributes.id = "flexApp";
        attributes.name = "flexApp";
        swfobject.embedSWF("EmptySwf.swf", "flashcontent", "400", "400", "9.0.124", "", flashvars, params, attributes);
    </script>
</head>
<body>
    <div id="container">
        <div id="controls">
            <textarea id="expr" cols="60" rows="20">type in javascript code here.  use the radio buttons below to view sample FABridge code</textarea>
            <br />
            <input type="button" onclick="testEval();return false;" value="execute" />
            <div style="margin-left: 20px">
                <p>Sample Code:<br />
                    <input id="make_rect" onclick="updateCode('make_rect')" name="code" type="radio" />
                    <label for="make_rect">make rectangle</label>
                    
                    <input id="make_spinner" onclick="updateCode('make_spinner')" name="code" type="radio" />
                    <label for="make_spinner">make spinning rectangle</label>
                </p>
            </div>
            Trace Output:<br />
            <textarea id="output" cols="60" rows="10"></textarea><br />
        </div>
        <div id="flashcontent">
            <p>Your browser must have JavaScript enabled and the Adobe Flash Player installed.</p>
            <a href="http://www.adobe.com/go/getflashplayer">
                <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
            </a>
        </div>
    </div>
</body>
</html>


