<!--
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 "page.html" %}

{% block container %}
<h1>Registration</h1>

	{% if registered %}
	<h2>Thank you for registering!</h2>
	{% else %}
    <h2 class="form-signin-heading">Create an account</h2>

	<form role="form" id="user_form" method="post" action="{% url 'op_tasks:register' %}" enctype="multipart/form-data">
		{% csrf_token %}

        <div class="form-group">
            <p class="required">
                <label for="id_email">Username: (please use a valid email address)</label>
                <input class="form-control" id="id_email" name="username" type="email" placeholder="Enter email"/>
            </p>
        </div>
        <div class="form-group">
            <p class="required">
                <label for="id_password1">Password:</label>
                <input class="form-control" id="id_password" name="password" type="password" placeholder="Enter password"/>
            </p>
        </div>
        <div class="form-group">
            <p class="required">
                <label for="id_password2">Password (again):</label>
                <input class="form-control" id="id_password2" name="password2" type="password" placeholder="Enter password again" />
            </p>
        </div>
        <button id="id_register_button" type="submit" class="btn btn-default">Submit</button>
    </form>
    {% endif %}

    {% if registered %}
    <h4 class="form-signin-heading">Click here to sign in: <a href="{% url 'op_tasks:login' %}">Sign in</a>
    {% endif %}

{% endblock %}