<!--
  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.
  -->

<!DOCTYPE html>
<html>
<head>
    <title>Update Host Description</title>
    <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" media="screen">
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js" type="text/javascript"></script>
    <script src="js/x_host_descriptor_edit_json.js"></script>
</head>
<body>

<div class="navbar navbar-inverse navbar-fixed-top">
    <div class="navbar-inner">
        <div class="container-fluid">
            <a class="brand" href="">Airavata API Demo</a>
        </div>
    </div>
</div>
<br><br>


<h3>Update Host Description</h3>
<div class="well row">
    <div class="span7">
        <p class="span7">
            <label class="span3">Host Name</label><input class="span4" type="text" name="hostName" id="hostName1" size="75">
            <label class="span3">Host Address</label><input class="span4" type="text" name="hostAddress" id="hostAddress1" size="75">
            <label class="span3">Host Type</label> <select class="span4" id="hostType">
            <option selected="selected">Local</option>
            <option>Globus</option>
        </select>
            <label class="span3 endpoint">Host Endpoint</label><input class="span4 endpoint" type="text" name="hostEndpoint" id="hostEndpoint1" size="75">
            <label class="span3 endpoint">Gatekeeper Endpoint</label><input class="span4 endpoint" type="text" name="gatekeeperEndpoint" id="gatekeeperEndpoint1" size="75">
        </p>
    </div>
</div>
<button class="btn btn-primary btn-medium" id="updateHostButton">Update Host</button>
<button class="btn btn-primary btn-medium" id="deleteHostButton">Delete Host</button>

</body>
</html>
