{{!
* 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.
}}

<div class="jobs-custom-dates">
  <div {{bindAttr class=":control-group view.errors.isStartDateError:error"}}>
    <label>{{t jobs.customDateFilter.startTime}}</label>
    {{view Ember.TextField valueBinding="view.customDateFormFields.startDate" class="input-small datepicker no-autofocus"}}
    {{view Ember.Select contentBinding="view.hourOptions" selectionBinding="view.customDateFormFields.hoursForStart" class="input-mini"}}
    {{view Ember.Select contentBinding="view.minuteOptions" selectionBinding="view.customDateFormFields.minutesForStart" class="input-mini"}}
    {{view Ember.Select contentBinding="view.middayPeriodOptions" selectionBinding="view.customDateFormFields.middayPeriodForStart" class="input-mini"}}
    <span class="help-inline">{{view.errorMessages.startDate}}</span>
  </div>
  <div class="control-group">
    <label>{{t common.duration}}</label>
    {{view view.durationSelect selectionBinding="view.customDateFormFields.duration"}}
  </div>
  <div {{bindAttr class=":control-group view.errors.isEndDateError:error view.isCustomEndDate::hidden"}}>
    <label>{{t jobs.customDateFilter.endTime}}</label>
    {{view Ember.TextField valueBinding="view.customDateFormFields.endDate" class="input-small datepicker no-autofocus"}}
    {{view Ember.Select contentBinding="view.hourOptions" selectionBinding="view.customDateFormFields.hoursForEnd" class="input-mini"}}
    {{view Ember.Select contentBinding="view.minuteOptions" selectionBinding="view.customDateFormFields.minutesForEnd" class="input-mini"}}
    {{view Ember.Select contentBinding="view.middayPeriodOptions" selectionBinding="view.customDateFormFields.middayPeriodForEnd" class="input-mini"}}
    <span class="help-inline">{{view.errorMessages.endDate}}</span>
  </div>
  <div class="timezone">
    <strong>{{t common.timezone}}</strong>: {{App.router.userSettingsController.userSettings.timezone.label}}
  </div>
</div>
