<!--
 * 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="row row-margin-bottom">
    <div class="col-sm-12" style="margin:15px 0px;">
        <div class="row">
            <div class="col-md-9" style="margin-top: 5px;">
                <span class="pull-left">Basic</span>
                <label class="switch pull-left">
                    <input type="checkbox" class="switch-input" name="queryType" value="text" />
                    <span class="switch-slider"></span>
                </label>
                <span class="pull-left">Advanced</span>
                <span class="advancedInfo" data-id="advancedInfo"><i class="fa fa-question-circle-o"></i></span>
            </div>
            <div class="col-md-3">
                <button type="button" class="btn btn-atlasAction btn-atlas pull-right typeLOV" title="Refresh" data-id="refreshBtn"><i class="fa fa-refresh"></i></button>
            </div>
        </div>
    </div>
    <div class="col-sm-12">
        <div class="form-group">
            <div class="srchType clearfix">
                <span class="srchTitle">Search By Type</span>
                <div class="">
                    <div class="col-sm-10 no-padding temFilter">
                        <select data-id="typeLOV"></select>
                    </div>
                    <div class="col-sm-2 no-padding temFilterBtn">
                        <button type="button" class="btn btn-atlasAction btn-atlas pull-right typeLOV active" title="Entity Attribute Filter" data-id="typeAttrFilter"><i class="fa fa-filter"></i></button>
                    </div>
                </div>
            </div>
            <div class="srchType tagBox clearfix">
                <span class="srchTitle">Search By Tag</span>
                <div>
                    <div class="col-sm-10 no-padding">
                        <select data-id="tagLOV"></select>
                    </div>
                    <div class="col-sm-2 no-padding">
                        <button type="button" class="btn btn-atlasAction btn-atlas pull-right active" title="Tag Attribute Filter" data-id="tagAttrFilter"><i class="fa fa-filter"></i></button>
                    </div>
                </div>
            </div>
            <div class="srchType">
                <span class="srchTitle">Search By Query</span>
                <input type="text" class="form-control" data-id="searchInput" placeholder="Search using a query string: e.g. sales_fact" style="margin: 5px 0px;">
            </div>
        </div>
        <div class="clearAdvanceSearch" data-id="clearSearch">Clear</div>
        <button type="button" class="btn btn-atlas advanceSearchBtn" data-id="searchBtn" disabled="disabled">Search</button>
    </div>
    <div id="searchResult"></div>
</div>
