<!--
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.
-->
{% extends "experimentpage.html" %}

{% block content %}
    <form method="POST" name="emailBlast" action="{%url 'exp_portal:send_email' %}">
        <div>
            <div class="emailRow">
                <label for="email-to" class="emailLabel">To:</label>
                <input class="emailInput" name="email_to" id="email-to"/>
                <div class="input-group-btn">
                    <button class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                        <span class="glyphicon glyphicon-user"></span>
                        <span class="caret"></span>
                    </button>
                    <ul class="dropdown-menu dropdown-menu-right" id="contacts">
                        <li value="all">All Participants</li>
                        <div role="separator" class="divider"></div>
                        {% for userprofile in userprofiles %}
                            <li>{{userprofile.user.email}}</li>
                        {% endfor %}
                    </ul>
                </div>
            </div>
            <div class="emailRow">
                <label for="email-subject" class="emailLabel">Subject:</label>
                <input class="emailInput" name="email_subject" id="email-subject"/>
            </div>
            <div class="emailRow">
                <label for="email-message" class="emailLabel">Message:</label>
                <div>
                    <textarea name="email_message" id="email-message"></textarea>
                </div>
            </div>
        </div>
        <div id="emailSubmit">
            <input class="btn btn-default" type="submit" value="Send Mail">
        </div>
        {% csrf_token %}
    </form>
    <div id="statusMessage" class="{{ status }}">
        {{ statusMessage }}
    </div>

{% endblock %}