{{!
* 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=":form-group view.errors.isStartDateError:has-error"}}>
    <label>{{t jobs.customDateFilter.startTime}}</label>
    <div class="form-inline">
      {{view Ember.TextField valueBinding="view.customDateFormFields.startDate" class="input-sm datepicker no-autofocus form-control"}}
      {{view Ember.Select contentBinding="view.hourOptions" selectionBinding="view.customDateFormFields.hoursForStart" class="input-sm form-control"}}
      {{view Ember.Select contentBinding="view.minuteOptions" selectionBinding="view.customDateFormFields.minutesForStart" class="input-sm form-control"}}
      {{view Ember.Select contentBinding="view.middayPeriodOptions" selectionBinding="view.customDateFormFields.middayPeriodForStart" class="input-sm form-control"}}
    </div>
    <span class="help-block validation-block">{{view.errorMessages.startDate}}</span>
  </div>
  <div class="form-group">
    <label>{{t common.duration}}</label>
    <div class="form-inline">
      {{view view.durationSelect selectionBinding="view.customDateFormFields.duration" class="form-control input-sm"}}
    </div>
  </div>
  <div {{bindAttr class=":form-group :form-inline view.errors.isEndDateError:has-error view.isCustomEndDate::hidden"}}>
    <label>{{t jobs.customDateFilter.endTime}}</label>
    <div class="form-inline">
      {{view Ember.TextField valueBinding="view.customDateFormFields.endDate" class="input-sm datepicker no-autofocus form-control"}}
      {{view Ember.Select contentBinding="view.hourOptions" selectionBinding="view.customDateFormFields.hoursForEnd" class="input-sm form-control"}}
      {{view Ember.Select contentBinding="view.minuteOptions" selectionBinding="view.customDateFormFields.minutesForEnd" class="input-sm form-control"}}
      {{view Ember.Select contentBinding="view.middayPeriodOptions" selectionBinding="view.customDateFormFields.middayPeriodForEnd" class="input-sm form-control"}}
    </div>
    <span class="help-block validation-block">{{view.errorMessages.endDate}}</span>
  </div>
  <div class="timezone">
    <strong>{{t common.timezone}}</strong>: {{App.router.userSettingsController.userSettings.timezone.label}}
  </div>
</div>
