<!--
  ~ 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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><title>Continuum</title>

  <link rel="stylesheet" type="text/css" href="continuum_files/tigris.css" media="screen">
  <link rel="stylesheet" type="text/css" href="continuum_files/print.css" media="print">

  <script src="continuum_files/tigris.js" type="text/javascript"></script></head>

<body onload="focus()" class="composite">

<div id="banner">
  <table border="1" cellpadding="8" cellspacing="0" width="100%">
    <tbody><tr>
      <td>
        <a href="http://www.apache.org/">
          Your company logo here
        </a>
      </td>
      <td>
        <a href="http://maven.apache.org/continuum">
          <img src="continuum_files/continuum_logo_75.gif" alt="Continuum" align="right" border="0">
        </a>
      </td>
    </tr>
    </tbody></table>
</div>

<div id="breadcrumbs">
  <div style="float: right">
    <a href="http://maven.apache.org/continuum">Continuum</a> |
    <a href="http://maven.apache.org/">Maven</a> |
    <a href="http://www.apache.org/">Apache</a>
  </div>

  <div>
    Welcome, <b>Guest</b> | <a href="login.html">Login</a>
  </div>
</div>

<table id="main" border="0" cellpadding="4" cellspacing="0" width="100%">
<tbody><tr valign="top">
<td id="leftcol" width="30%">
  <div id="navcolum">
    <div id="projectmenu" class="toolgroup">
      <div class="label">Continuum</div>

      <div class="body">
        <div><a href="index.html">Show Projects</a></div>

        <div><a href="schedule.html">View Build Schedule</a></div>
      </div>
    </div>

    <div id="projecttools" class="toolgroup">
      <div class="label">Add Project</div>

      <div class="body">
        <div><a href="addMaven2Project.html">Maven 2.0+ Project</a></div>

        <div><a href="addMaven1Project.html">Maven 1.x Project</a></div>

        <div><a href="addAntProject.html">Ant Project</a></div>

        <div><a href="addShellProject.html">Shell Project</a></div>
      </div>
    </div>

    <div id="projectimport" class="toolgroup">
      <div class="label">Import Project</div>

      <div class="body">
        <div>
          <a href="addCruiseControlProject.html">CruiseControl</a>
        </div>
      </div>
    </div>

    <div style="margin-top: 5em; color: #555; border: 1px dashed black; padding: 1em;">
      <p>Notes:</p>
      <ul>
        <li>Should the IRC host be a dropdown, only configured from the admin interface? How does this correlate with
          POMs?</li>
        <li><!-- TODO:--> I would like to split this page into one edit per notifier type, and then put the type as a
          drop down on the page where add is</li>
      </ul>
    </div>
  </div>
</td>
<td>
<div id="bodycol">
<div class="app">
<div id="axial" class="h3">
<h3>Add (Edit) Notifier</h3>

<form method="post" action="viewProject.html">
<input type="hidden" name="fid" value="antProject"/>

<input type="hidden" name="action" value="addEntity"/>
<input type="hidden" name="view" value="Summary.vm"/>
<input type="hidden" name="id" value="$id"/>

<div class="axial">
<table border="1" cellspacing="2" cellpadding="3" width="100%">
<tr>

  <th>Type</th>


  <td>
    <table>
      <tr>
        <td>
          <input value="mail" name="type" type="radio" checked="checked"/>&nbsp;Mail
        </td>
        <td colspan="2">&nbsp;</td>
      </tr>
      <tr>
        <td>
          <input value="irc" name="type" type="radio"/>&nbsp;IRC
        </td>
        <td>
          Host:
          <input type="text" name="config" value="" size="40"/>
        </td>
        <td>
          Port:
          <input type="text" name="config" value="" size="5"/>
        </td>
      </tr>
      <tr>
        <td>
          <input value="msn" name="type" type="radio"/>&nbsp;MSN
        </td>
        <td colspan="2">&nbsp;</td>
      </tr>
      <tr>
        <td>
          <input value="yahoo" name="type" type="radio"/>&nbsp;Yahoo
        </td>
        <td colspan="2">&nbsp;</td>
      </tr>
      <tr>
        <td>
          <input value="jabber" name="type" type="radio"/>&nbsp;Jabber
        </td>
        <td>
          Host:
          <input type="text" name="config" value="" size="40"/>
        </td>
        <td>
          Port:
          <input type="text" name="config" value="" size="5"/>
        </td>
      </tr>
    </table>
  </td>
</tr>
<tr>
  <th>Recipients</th>
  <td>
    <table>
      <tr>
        <td><input value="all" name="recipient" type="radio" checked="checked"/>&nbsp;All Developers</td>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td>
          <input value="developer" name="recipient" type="radio"/>&nbsp;Single Developer
        </td>
        <td>
          <input type="text" name="config" value="" size="40"/>
          <small>(Enter the developer's Continuum ID)</small>
        </td>
      </tr>
      <tr>
        <td>
          <input value="role" name="recipient" type="radio"/>&nbsp;Developers with Role
        </td>
        <td>
          <select>
            <option selected="selected">Build Manager</option>
            <option>Hippie</option>
            <option>Cowboy</option>
          </select>
        </td>
      </tr>
      <tr>
        <td>
          <input value="single" name="recipient" type="radio"/>&nbsp;Single recipient
        </td>
        <td>
          <input type="text" name="config" value="" size="40"/>
          <small>(Enter the e-mail address, Jabber ID, etc. of the recipient)</small>
        </td>
      </tr>
    </table>
  </td>
</tr>
<tr>

  <th>Events</th>


  <td>
    <input value="success" name="event" type="checkbox" checked="checked"/>&nbsp;Build Success
    <input value="failure" name="event" type="checkbox" checked="checked"/>&nbsp;Build Failure
    <input value="failure" name="event" type="checkbox" checked="checked"/>&nbsp;Build Error
  </td>
</tr>
</table>
<div class="functnbar3">
  <input type="submit" value="Submit"/>
</div>
</div>
</form>

</div>
</div>

</div></td>
</tr>
</tbody>
</table>

<div id="footer">
  <table border="0" cellpadding="4" cellspacing="0">
    <tbody><tr>
      <td>
        Continuum &#169; 2005 Apache Software Foundation
      </td>
    </tr>
    </tbody></table>
</div>

</body></html>