/**
     * Shows the advanced search page
     */
    function displayAdvancedSearchPage()
    {
        $url = new TableEditor_URL();
        $url->addQueryString('asearch', '2');
        $searchURL = $url->getURL(true);
        $url->addRawQueryString('');
        $cancelURL = $url->getURL();
        $searchFields = $this->getConfig('searchableFields');
        // No searching permitted
        if (empty($searchFields)) {
            $url->removeQueryString('asearch');
            header('Location: ' . $url->getURL());
            exit;
        }
        // Define the various operators
        $operators[] = array('value' => '%', 'text' => 'Contains');
        $operators[] = array('value' => '=', 'text' => 'Matches Exactly');
        $operators[] = array('value' => '>', 'text' => 'Greater Than');
        $operators[] = array('value' => '>=', 'text' => 'Greater Than or Equal to');
        $operators[] = array('value' => '<', 'text' => 'Less Than');
        $operators[] = array('value' => '<=', 'text' => 'Less Than or Equal to');
        // Check querystring for potential search modifications
        $criteria = array();
        if (!empty($_GET['fields'])) {
            foreach ($_GET['fields'] as $i => $f) {
                $criteria[] = array('field' => $f, 'operator' => $_GET['operators'][$i], 'value' => $_GET['values'][$i]);
            }
        } else {
            $criteria[] = array('field' => '', 'operator' => '', 'value' => '');
        }
        $this->displayHeader();
        ?>
<script language="javascript" type="text/javascript">
<!--
    /**
    * Adds an extra criteria row to the search form
    */
    function addCriteria()
    {
        var tableObj = document.getElementById('searchCriteriaTable');
        var trObj    = document.getElementById('searchCriteriaRow');
        var lastRow  = document.getElementById('searchCriteriaTable_lastRow');

        // Insert new row
        var insertedRow = lastRow.parentNode.insertBefore(trObj.cloneNode(true), lastRow);
        
        // Lose the button from the top row
        var buttonObj = trObj.getElementsByTagName('button')[0];
        buttonObj.parentNode.removeChild(buttonObj);
        
        // Move the id
        trObj.id = '';
        insertedRow.id = 'searchCriteriaRow';
        
        // Reset values on the newly inserted row (needed when modifying a search)
        inputs = insertedRow.getElementsByTagName('input');
        inputs[0].value = '';
        
        selects = insertedRow.getElementsByTagName('select');
        selects[0].selectedIndex = 0;
        selects[1].selectedIndex = 0;

        return false;
    }


    /**
    * Performs the search
    */
    function search()
    {
        var selects   = document.getElementsByTagName('select');
        var inputs    = document.getElementsByTagName('input');
        var fields    = [];
        var operators = [];
        var values    = [];


        // Separate field names from operators
        for (var i=0; i<selects.length; ++i) {
            if (selects[i].name.substr(0, 5) == 'field') {
                fields[fields.length] = selects[i];
            
            } else if (selects[i].name.substr(0, 8) == 'operator') {
                operators[operators.length] = selects[i];
            }
        }
        
        // Separate out values from all inputs
        for (var i=0; i<inputs.length; ++i) {
            if (inputs[i].name.substr(0, 5) == 'value') {
                values[values.length] = inputs[i];
            }
        }


        /**
        * Now construct the url
        */
        var parameters = [];

        for (i=0; i<fields.length; ++i) {
            var f_val = fields[i].options[fields[i].selectedIndex].value; // Field value
            var o_val = operators[i].options[operators[i].selectedIndex].value; // Operator value
            var v_val = values[i].value; // Value value
            
            if (f_val) {
                //  "Contains" must have a non-empty v_val
                if (o_val == '%' && v_val == '') {
                    alert('When using the "Contains" operator, you must enter some text to search for');
                    return;
                }
                
                parameters[parameters.length] = 'fields[]=' + encodeURIComponent(f_val) + '&operators[]=' + encodeURIComponent(o_val) + '&values[]=' + encodeURIComponent(v_val);
            }
        }
        
        if (parameters.length == 0) {
            alert('Please enter some search criteria!');
            return;
        }
        
        
        // Add the match type to the parameters array
        if (document.getElementById('match_any').checked) {
            parameters[parameters.length] = 'match=any';
        } else {
            parameters[parameters.length] = 'match=all';
        }

        location.href = '<?php 
        echo $searchURL;
        ?>
&' + parameters.join('&');
    }
// -->
</script>

<h2>Advanced Search</h2>

<table border="0" id="searchCriteriaTable">
    <?foreach($criteria as $i => $c):?>
        <tr <?if($i == count($criteria) - 1):?>id="searchCriteriaRow"<?endif?> >
            <td>
                <?if($i == count($criteria) - 1):?>
                    <button onclick="addCriteria()">Add Criteria &raquo;</button>
                <?endif?>
            </td>
    
            <td>
                <select name="field[]">
                    <option value="">Select...</option>
                    <?foreach($searchFields as $sf):?>
                        <option value="<?php 
        echo $sf;
        ?>
" <?php 
        echo $sf == $c['field'] ? 'selected' : '';
        ?>
 ><?php 
        echo $this->fields[$sf]['display'];
        ?>
</option>
                    <?endforeach?>
                </select>
            </td>
    
            <td>
                <select name="operator[]">
                    <?foreach($operators as $o):?>
                        <option value="<?php 
        echo $o['value'];
        ?>
" <?php 
        echo $o['value'] == $c['operator'] ? 'selected' : '';
        ?>
 ><?php 
        echo $o['text'];
        ?>
</option>
                    <?endforeach?>
                </select>
            </td>
    
            <td>
                <input type="text" name="value[]" value="<?php 
        echo htmlspecialchars($c['value']);
        ?>
">
            </td>
        </tr>
    <?endforeach?>

    <tr id="searchCriteriaTable_lastRow">
        <td align="right" valign="top" colspan="2">
            Match:
        </td>
        
        <td>
            <input type="radio" name="match" value="any" id="match_any" <?php 
        echo !isset($_GET['match']) || $_GET['match'] == 'any' ? 'checked' : '';
        ?>
 > <label for="match_any">Any Criteria</label><br>
            <input type="radio" name="match" value="all" id="match_all" <?php 
        echo isset($_GET['match']) && $_GET['match'] == 'all' ? 'checked' : '';
        ?>
 > <label for="match_all">All Criteria</label>
        </td>
        
        <td valign="top" align="right">
            <button onclick="location.href = '<?php 
        echo $cancelURL;
        ?>
'">Cancel</button>&nbsp;
            <button onclick="search()">Search &raquo;</button>
        </td>
    </tr>
</table>

<script language="javascript" type="text/javascript">
<!--
    addCriteria();
    addCriteria();
// -->
</script>

<?php 
        $this->displayFooter();
        exit;
    }