<html>

  <head>
    <base target=xtc_menu>
  </head>

  <body bgcolor=#ffffff>

    <center><h1>Server-side XSL transformations</h1><p></center>

    <script language="JavaScript">

      function getURI() {
        var root = "http://gobsheen.ireland/morten/Sun/XTC/demo/plays/";
	var menu = document.XMLinput.elements[0];
        var play = menu.options[menu.selectedIndex].value;
        return(root+play);
      }

      function getTranslet() {
	var menu = document.XMLinput.elements[1];
        var translet = menu.options[menu.selectedIndex].value;
	return(translet);
      }

      function setHTMLlocation(translet) {
        var uri = getURI();
        var translet = getTranslet();
        var source = "http://gobsheen:8000/Transform/Transform?"+
                     "document="+uri+"&translet="+translet;
        open(source,"bottom");
      }

      function setXMLlocation() {
        var target = parent.frames.demo_bottom;
        var uri = getURI();
        open(uri,"bottom");
      }

    </script>

    <form name="XMLinput">

    <table>
    <tr>
      <td>
        <b>Source document:</b>
      </td>
      <td>
        <select name="dropdown">
          <option value="AsYouLikeIt.xml">As You Like It
          <option value="Cymbeline.xml">Cymbeline
          <option value="Hamlet.xml">The Tragedy of Hamlet
          <option value="HenryV.xml">The Life of Henry V
          <option value="HenryVIII.xml">The Famous History of the Life of Henry VIII
          <option value="KingJohn.xml">The Life and Death of King John
          <option value="KingLear.xml">The Tragedy of King Lear
          <option value="KingRichardII.xml">The Tragedy of King Richard II
          <option value="MeasureForMeasure.xml">Measure for Measure
          <option value="MerchantOfVenice.xml">The Merchant of Venice
          <option value="MerryWivesOfWindsor.xml">The Merry Wives of Windsor
          <option value="MidsummerNightsDream.xml">A Midsummer Night's Dream
          <option value="MuchAdoAboutNothing.xml">Much Ado about Nothing
          <option value="PericlesPrinceOfTyre.xml">Pericles, Prince of Tyre
          <option value="RomeoAndJuliet.xml">The Tragedy of Romeo and Juliet
          <option value="TamingOfTheShrew.xml">The Taming of the Shrew
          <option value="TheTempest.xml">The Tempest
          <option value="TimonOfAthens.xml">The Life of Timon of Athens
          <option value="TragedyOfCoriolanus.xml">The Tragedy of Coriolanus
          <option value="TragedyOfJuliusCaesar.xml">The Tragedy of Julius Caesar
          <option value="TragedyOfOthello.xml">The Tragedy of Othello, the Moor of Venice
          <option value="TroilusAndCresida.xml">The History of Troilus and Cressida
          <option value="TwelfthNight.xml">Twelfth Night, or What You Will
          <option value="TwoGentlementOfVerona.xml">The Two Gentlemen of Verona
          <option value="WintersTale.xml">The Winter's Tale
        </select>
      </td>
    </tr>
    <tr>
      <td>
        <b>Transformation:</b>
      </td>
      <td>
        <select name="dropdown">
          <option value="PlayToHTML">Full
          <option value="PlayToSpeakers">Speakers
          <option value="PlayToIndex">Index
        </select>
      </td>
    </tr>
    <tr>
      <td>
        <b>Method:</b>
      </td>
      <td>
        <input type="button" value="Transform" onClick="setHTMLlocation()">
        <input type="button" value="XML source" onClick="setXMLlocation()">
      </td>
    </tr>
  </table>
  </form>

  </body>

</html>
