<!--
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 %}

<h1>Add Experiment</h1>

<form method="POST" action="{% url 'exp_portal:add_exp' %}">
	<div class="form-group">
		<label for="id_exp_name">Experiment Name</label>
		<input class="form-control" name="exp_name" id='id_exp_name' value="{{ experiment.name }}" size="60" required/>
	</div>
	<div class="form-group">
		<label for="id_exp_taskcount">Task Count</label>
		<input class="form-control" name="exp_taskcount" id="id_exp_taskcount" value="{{ experiment.task_count }}" size="60" required/>
	</div>
	<div class="form-group">
		<label for="id_exp_tasklength">Task Length (mins)</label>
		<input class="form-control" name="exp_tasklength" id="id_exp_tasklength" value="{{ experiment.task_length }}" size="60" required/>
	</div>
	<div class="checkbox">
		<input type="checkbox" name="exp_achievements" id="id_exp_achievements" {% if experiment.has_achievements %}checked{% endif %}/>
		<label>Achievements</label>
	</div>
	<div class="checkbox">
		<input type="checkbox" name="exp_intake" id="id_exp_intake" {% if experiment.has_intake %}checked{% endif %}/>
		<label>Intake Survey Online</label>
	</div>
	<div class="checkbox">
		<input type="checkbox" name="exp_followup" id="id_exp_followup" {% if experiment.has_followup %}checked{% endif %}/>
		<label>Post Task Survey Online</label>
	</div>
	<div class="checkbox">
		<input type="checkbox" name="exp_consent" id="id_exp_consent" {% if experiment.consent %}checked{% endif %}/>
		<label>Consent Online</label>
	</div>
	<div class="checkbox">
		<input type="checkbox" name="exp_sequentialtasks" id="id_exp_sequentialtasks" {% if experiment.sequential_tasks %}checked{% endif %}/>
		<label for="exp_sequentialtasks" id="id_exp_st">Sequential Tasks (unchecked will open all tasks)</label>
	</div>
	<div class="checkbox">
		<input type="checkbox" name="exp_progress" id="id_exp_progress" {% if experiment.show_progress %}checked{% endif %}/>
		<label>Show Progress Bar</label>
	</div>
	<div class="checkbox">
		<input type="checkbox" name="exp_timed" id="id_exp_timed" {% if experiment.timed %}checked{% endif %}/>
		<label>Timed Tasks</label>
	</div>
	<button class="btn btn-primary" type="submit">Save Changes</button>
	{% csrf_token %}
</form>

{% endblock %}