<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.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.
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
<head>
  <title>OpenSocial Common Container Test Environment</title>
  <!-- My OpenSocial Beginnings -->
  <link rel="stylesheet"
        href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/themes/cupertino/jquery-ui.css"
        type="text/css" media="all"/>

  <script type="text/javascript" src="../../../gadgets/js/container:open-views:opensearch:rpc:xmlutil:pubsub-2.js?c=1&debug=1&container=default"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.5/jquery-ui.min.js"></script>
  <script type="text/javascript" src="./assembler.js"></script>
  <script type="text/javascript" src="./viewController.js"></script>
  <script type="text/javascript" src="./layout.js"></script>
  <script type="text/javascript" src="./cconviews.js"></script>
  <script type="text/javascript" src="./search.js"></script>

  <style type="text/css">
    .portlet-header .ui-icon { float: right; }
    #content {
    display: table;
    width: 100%;
    }

    #testArea {
    display: table-cell;
    width: 75%;
    padding-left:22px;
    }

    #controlPanel {
    display: table-cell;
    width: 25%;
    }

    #viewsDropdown, #viewsDropdown ul {
    list-style: none;
    }
    #viewsDropdown, #viewsdropdown * {
    padding: 0; margin: 0;
    }

    #viewsDropdown li.li-header {
    float: right; margin-left: -1px;
    }
    #viewsDropdown li.li-header a {
    display: block;
    }

    #viewsDropdown li.li-header ul {
    display: none; border: 1px black solid; text-align: left;
    }

    #viewsDropdown li.li-header:hover ul {
    display: block;
    }

    #viewsDropdown li.li-header ul li a {
    padding: 5px; height: 17px;
    }

    #tabs li .ui-icon-close { float: left; margin: 0.4em 0.2em 0 0; cursor: pointer; }

    .resultTitle {
    color: blue;
    }

    .searchEngine {
    border: 1px solid blue;
    }

    .widerInput {
      width: 270px;
    }

  </style>
</head>

<body onload="CommonContainer.init();">

  <!--  Need to add in an improved header with links to specification -->
  <a href="http://opensocial.org/">
    <img alt="OpenSocial" src="http://opensocial.org/wp-content/themes/Lucid/images/logo.png"/>
  </a>
  <span style="float:right">
    <input type="text" id="query"/>
    <button name="search" id="searchButton" onclick="updateSearchURLs()">Search</button>
    <br/><span id="engineList"></span>
  </span>

  <div id="content">

    <div id="controlPanel">

      <div id="accordionResizerControls"
           style="padding: 10px; width: 100%; height: 100%;"
           class="ui-widget-content">

        <div id="accordionGadgetControls">
          <h3><a href="#">Manage Gadgets</a></h3>

          <div>

            <p>Enter the gadget url (ex.
            http://localhost:8080/gadgets/SocialHelloWorld.xml) and select 'Add' to
            render the gadget</p>

            <div style='display: block;'>
	            <input type="text" name="gadgetUrl" id="gadgetUrl"
	                   class="text ui-widget-content ui-corner-all"
	                   style="width: 100%"/>
	            <br />
	            <button id="preloadAndAddGadget">Preload and Add</button><br />
	            <button id="addGadget">Add only</button><br />
	            <button id="preloadGadget">Preload only</button><br />
            </div>
           <p>-OR-</p>

            <p>
            Pick from one of the collections and select Add Gadgets to render the associated gadgets
            </p>
            <div style='display: block;'>
	            <select id="gadgetCollection"> </select>
	            <button id="addGadgets">Add Gadgets</button>
            </div>

          </div>
          <h3><a href="#">Container Events</a></h3>

          <div>
            <p>
            Enter the event topic (ex. org.opensocial.container.event.sampleevent)
            </p>

            <input type="text" name="eventTopic" id="eventTopic"
                   class="text ui-widget-content ui-corner-all"/>
            <p>
            Enter the event payload
            </p>
            <div style='display: block;'>
	            <textarea name="eventPayload" id="eventPayload"
	                      class="text ui-widget-content ui-corner-all"> </textarea>
	            <button id="pubEvent">Publish</button>
            </div>
          </div>
          <h3><a href="#">Embedded Experience Gadgets</a></h3>

          <div>
            <div style='display: block; padding-bottom: 5px'>
              Enter the embedded experience gadget URL
            </div>
            <div style='display: block; padding-bottom: 10px'>
	            <input type="text" name="eeUrl" id="eeUrl"
	                   class="text ui-widget-content ui-corner-all widerInput"/>
            </div>

            <div style='display: block; padding-bottom: 5px;'>
	            <label style='display: inline-block; width: 75px;' for="eeHeight">Height: </label>
	            <input type="text" name="eeHeight" id="eeHeight" class="text ui-widget-content ui-corner-all" value="400"></input>
            </div>
            <div style='display: block; padding-bottom: 10px;'>
	            <label style='display: inline-block; width: 75px;' for="eeWidth">Width: </label>
	            <input type="text" name="eeWidth" id="eeWidth" class="text ui-widget-content ui-corner-all" value="640"></input>
            </div>

            <p>
            Enter the context as a JSON String, and select 'Add' to render the embedded experience gadget
            </p>
            <textarea name="eecontextPayload" id="eecontextPayload"
                      class="text ui-widget-content ui-corner-all widerInput"> </textarea>
            <p><button id="addEmbeddedExperience">Add</button></p>
          </div>
        </div>
        <span class="ui-icon ui-icon-grip-dotted-horizontal" style="margin: 2px auto;"></span>

        <div id="accordionContainerControls">
          <h3><a href="#">Manage Container</a></h3>

          <div>More to come here with common container....</div>
        </div>
      </div>
    </div>

    <div id="testArea">
      <div id="accordionResizer"
           style="padding: 10px; width: 100%; height: 650px;"
           class="ui-widget-content">

        <div id="accordion">
          <h3><a href="#">Test Area</a></h3>

          <div>
            <div id="gadgetArea" class="column">
            </div>
            <div id="results"></div>
          </div>
        </div>

      <span class="ui-icon ui-icon-grip-dotted-horizontal" style="margin: 2px auto;"></span></div>

      <div id="accordionResizerEvents"
           style="padding: 10px; width: 100%; height: 350px;"
           class="ui-widget-content">

        <div id="accordionEvents">
          <h3><a href="#">events</a></h3>

          <div>
            <div id="output" class="column"></div>
          </div>

        </div>
        <span class="ui-icon ui-icon-grip-dotted-horizontal" style="margin: 2px auto;"></span></div>
    </div>
  </div>
</body>
</html>
