﻿/*
function ApplyFilter() {
function BuildPageSet(xml) {
function BuildPagingLinkBar() {
function ClearFilters() {
function CreateDefaultSourceOptions(type) {
function CreateOption(type, id, val) {
function ExecuteSearch(tab) {
function GotoPage(pageNum) {
function HideResults() {
function LoadFilters(xml) {
function LoadQuerystring() {
function LoadResults(tab, xmlDoc) {
function LoadSearch(xml, tab) {
function PopulateFilterSelects() {
function ResetAll() {
function ResetFilter() {
function SetCount(xmlrow) {
function SetDefaultSort(tab) {
function SetFilterSelect(filter, value) {
function SetFilterText(filter, value) {
function SetResultsPerPage(count) {
function ShowFilter(tab) {
function SortMe() {
function SwitchTab(tab) {
function UpdateResultsPerPage() {
function ViewAll() {
*/

var Count = new Array();
var currentPage = 1;
var currentTab = "";
var currentXml;
var dataType = new Array();
var lastAction = "";
var nameOnly = false;
var page_set;
var resultsPerPage = Utilities.GetCookie("resultsPerPage");
var sortKey = new Array();
var sortOrder = 'ascending';
var startPos = 1;
var tempXml;
var isiPad = navigator.userAgent.match(/iPad/i) != null;

Count['Background'] = 0;
Count['Class'] = 0;
Count['Companion'] = 0;
Count['Deity'] = 0;
Count['Disease'] = 0;
Count['EpicDestiny'] = 0;
Count['Feat'] = 0;
Count['Glossary'] = 0;
Count['Item'] = 0;
Count['Monster'] = 0;
Count['ParagonPath'] = 0;
Count['Poison'] = 0;
Count['Power'] = 0;
Count['Race'] = 0;
Count['Ritual'] = 0;
Count['Terrain'] = 0;
Count['Theme'] = 0;
Count['Trap'] = 0;
sortKey[0] = 'DescriptionAttribute';
dataType[0] = 'text';
sortKey[1] = 'Size';
dataType[1] = 'text';
sortKey[2] = 'SourceBook';
dataType[2] = 'text';
sortKey[3] = 'Name';
dataType[3] = 'text';

if (resultsPerPage == null || resultsPerPage == undefined || isiPad) {
    if (isiPad)
        resultsPerPage = 16;
    else
        resultsPerPage = 20;
    Utilities.SetCookie("resultsPerPage", resultsPerPage, 365);
}

UpdateResultsPerPage();

function ApplyFilter() {
    var filter = "";
    switch (currentTab) {
        case "Race":
            filter += $('race_source').selectedIndex == 0 ? "null" : $('race_source').options[$('race_source').selectedIndex].value;
            break;
        case "Class":
            filter += $('class_source').selectedIndex == 0 ? "null|" : $('class_source').options[$('class_source').selectedIndex].value + "|";
            filter += $('class_role').selectedIndex == 0 ? "null|" : $('class_role').options[$('class_role').selectedIndex].text + "|";
            filter += $('class_powersource').selectedIndex == 0 ? "null" : $('class_powersource').options[$('class_powersource').selectedIndex].text;
            break;
        case "EpicDestiny":
            filter += $('epic_source').selectedIndex == 0 ? "null" : $('epic_source').options[$('epic_source').selectedIndex].value;
            break;
        case "Glossary":
            filter += $('glossary_category').selectedIndex == 0 ? "null|" : $('glossary_category').options[$('glossary_category').selectedIndex].text + "|";
            filter += $('glossary_type').selectedIndex == 0 ? "null|" : $('glossary_type').options[$('glossary_type').selectedIndex].text + "|";
            filter += $('glossary_source').selectedIndex == 0 ? "null" : $('glossary_source').options[$('glossary_source').selectedIndex].value;
            break;
        case "Background":
            filter += $('background_type').selectedIndex == 0 ? "null|" : $('background_type').options[$('background_type').selectedIndex].text + "|";
            filter += $('background_campaign').selectedIndex == 0 ? "null|" : $('background_campaign').options[$('background_campaign').selectedIndex].text + "|";
            filter += $('background_skill').selectedIndex == 0 ? "null|" : $('background_skill').options[$('background_skill').selectedIndex].text + "|";
            filter += $('background_source').selectedIndex == 0 ? "null" : $('background_source').options[$('background_source').selectedIndex].value;
            break;
        case "Item":
            filter += $('item_category').selectedIndex == 0 ? "null|" : $('item_category').options[$('item_category').selectedIndex].text + "|";
            filter += $F('item_level_low') == "" ? "-1|" : $F('item_level_low') + "|";
            filter += $F('item_level_high') == "" ? "-1|" : $F('item_level_high') + "|";
            filter += $F('item_cost_low') == "" ? "-1|" : $F('item_cost_low') + "|";
            filter += $F('item_cost_high') == "" ? "-1|" : $F('item_cost_high') + "|";
            filter += $F('item_enhancement_low') == "" ? "-1|" : $F('item_enhancement_low') + "|";
            filter += $F('item_enhancement_high') == "" ? "-1|" : $F('item_enhancement_high') + "|";
            filter += $('item_rarity').selectedIndex == 0 ? "null|" : $('item_rarity').options[$('item_rarity').selectedIndex].text + "|";
            filter += $('item_source').selectedIndex == 0 ? "null|" : $('item_source').options[$('item_source').selectedIndex].value + "|";
            filter += $('item_category').selectedIndex == 0 ? "null" : $('item_category').options[$('item_category').selectedIndex].parentNode.attributes['label'].value;
            break;
        case "Monster":
            filter += $F('monster_level_low') == "" ? "-1|" : $F('monster_level_low') + "|";
            filter += $F('monster_level_high') == "" ? "-1|" : $F('monster_level_high') + "|";
            filter += $('monster_keywords').selectedIndex == 0 ? "null|" : $('monster_keywords').options[$('monster_keywords').selectedIndex].text + "|";
            filter += $('monster_group_role').selectedIndex == 0 ? "null|" : $('monster_group_role').options[$('monster_group_role').selectedIndex].text + "|";
            filter += $('monster_combat_role').selectedIndex == 0 ? "null|" : $('monster_combat_role').options[$('monster_combat_role').selectedIndex].text + "|";
            filter += $F('monster_xp_low') == "" ? "-1|" : $F('monster_xp_low') + "|";
            filter += $F('monster_xp_high') == "" ? "-1|" : $F('monster_xp_high') + "|";
            filter += $('monster_source').selectedIndex == 0 ? "null" : $('monster_source').options[$('monster_source').selectedIndex].value;
            break;
        case "Feat":
            filter += $('feat_tier').selectedIndex == 0 ? "null|" : $('feat_tier').options[$('feat_tier').selectedIndex].text + "|";
            filter += $('feat_source').selectedIndex == 0 ? "null" : $('feat_source').options[$('feat_source').selectedIndex].value;
            break;
        case "Power":
            filter += $('power_action_type').selectedIndex == 0 ? "null|" : $('power_action_type').options[$('power_action_type').selectedIndex].text + "|";
            filter += $('power_class').selectedIndex == 0 ? "null|" : $('power_class').options[$('power_class').selectedIndex].text + "|";
            filter += $('power_kind').selectedIndex == 0 ? "null|" : $('power_kind').options[$('power_kind').selectedIndex].text + "|";
            filter += $F('power_level_low') == "" ? "-1|" : $F('power_level_low') + "|";
            filter += $F('power_level_high') == "" ? "-1|" : $F('power_level_high') + "|";
            filter += $('power_source').selectedIndex == 0 ? "null|" : $('power_source').options[$('power_source').selectedIndex].value + "|";
            filter += $('power_usage').selectedIndex == 0 ? "null" : $('power_usage').options[$('power_usage').selectedIndex].text;
            break;
        case "Ritual":
            filter += $F('ritual_level_low') == "" ? "-1|" : $F('ritual_level_low') + "|";
            filter += $F('ritual_level_high') == "" ? "-1|" : $F('ritual_level_high') + "|";
            filter += $('ritual_key_skill').selectedIndex == 0 ? "null|" : $('ritual_key_skill').options[$('ritual_key_skill').selectedIndex].text + "|";
            filter += $F('ritual_cost_low') == "" ? "-1|" : $F('ritual_cost_low') + "|";
            filter += $F('ritual_cost_high') == "" ? "-1|" : $F('ritual_cost_high') + "|";
            filter += $('ritual_source').selectedIndex == 0 ? "null" : $('ritual_source').options[$('ritual_source').selectedIndex].value;
            break;
        case "ParagonPath":
            filter += $('paragon_class').selectedIndex == 0 ? "null|" : $('paragon_class').options[$('paragon_class').selectedIndex].text + "|";
            filter += $('paragon_race').selectedIndex == 0 ? "null|" : $('paragon_race').options[$('paragon_race').selectedIndex].text + "|";
            filter += $('paragon_source').selectedIndex == 0 ? "null" : $('paragon_source').options[$('paragon_source').selectedIndex].value;
            break;
        case "Deity":
            filter += $('deity_alignment').selectedIndex == 0 ? "null|" : $('deity_alignment').options[$('deity_alignment').selectedIndex].text + "|";
            filter += $('deity_source').selectedIndex == 0 ? "null" : $('deity_source').options[$('deity_source').selectedIndex].value;
            break;
        case "Trap":
            filter += $F('trap_level_min') == "" ? "-1|" : $F('trap_level_min') + "|";
            filter += $F('trap_level_max') == "" ? "-1|" : $F('trap_level_max') + "|";
            filter += $('trap_role').selectedIndex == 0 ? "null|" : $('trap_role').options[$('trap_role').selectedIndex].text + "|";
            filter += $('trap_group_role').selectedIndex == 0 ? "null|" : $('trap_group_role').options[$('trap_group_role').selectedIndex].text + "|";
            filter += $('trap_type').selectedIndex == 0 ? "null|" : $('trap_type').options[$('trap_type').selectedIndex].text + "|";
            filter += $('trap_source').selectedIndex == 0 ? "null" : $('trap_source').options[$('trap_source').selectedIndex].value;
            break;
        case "Companion":
            filter += $('companion_type').selectedIndex == 0 ? "null|" : $('companion_type').options[$('companion_type').selectedIndex].text + "|";
            filter += $('companion_source').selectedIndex == 0 ? "null" : $('companion_source').options[$('companion_source').selectedIndex].value;
            break;
        case "Disease":
            filter += $('disease_source').selectedIndex == 0 ? "null" : $('disease_source').options[$('disease_source').selectedIndex].value;
            break;
        case "Theme":
            filter += $('theme_source').selectedIndex == 0 ? "null" : $('theme_source').options[$('theme_source').selectedIndex].value;
            break;
        case "Poison":
            filter += $('poison_source').selectedIndex == 0 ? "null" : $('poison_source').options[$('poison_source').selectedIndex].value;
            break;
        case "Terrain":
            filter += $('terrain_source').selectedIndex == 0 ? "null|" : $('terrain_source').options[$('terrain_source').selectedIndex].value + "|";
            filter += $('terrain_type').selectedIndex == 0 ? "null" : $('terrain_type').options[$('terrain_type').selectedIndex].text;
            break;
    }
    document.body.style.cursor = "wait";
    new Ajax.Request('CompendiumSearch.asmx/KeywordSearchWithFilters', {
        method: 'post',
        parameters: { keywords: $F('searchterm') == "" ? "null" : $F('searchterm'),
            tab: currentTab,
            filters: filter,
            nameOnly: nameOnly
        },
        onSuccess: function(response) {
            LoadSearch(response.responseText, currentTab);
        },
        onFailure: function() {
            document.body.style.cursor = "default";
        }
    });
    lastAction = "ExecuteFilteredSearch";
}

function BuildPageSet(xml) {
    var xslt = new ActiveXObject("Msxml2.XSLTemplate.3.0");
    var xsldoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.3.0");
    var xslproc;
    xsldoc.async = false;
    xsldoc.load("xsl/IE.xsl");
    xslt.stylesheet = xsldoc;
    var xmldoc = new ActiveXObject("Msxml2.DOMDocument.3.0");
    xmldoc.async = false;
    xmldoc.load(xml);
    xslproc = xslt.createProcessor();
    xslproc.input = xmldoc;
    for (var i = 0; i < sortKey.length; i++) {
        xslproc.addParameter(('sortKey' + (parseInt(i) + 1)), sortKey[i]);
        xslproc.addParameter(('dataType' + (parseInt(i) + 1)), dataType[i]);
    }
    xslproc.addParameter('sortOrder', sortOrder);
    xslproc.transform();
    var ps = xslproc.output;
    ps = ps.substring(ps.indexOf('{') + 1);
    var psa = ps.split("|");

    page_set = new Array();
    for (i = 0; i < psa.length; i++) {
        var temp = psa[i].split(",");
        page_set.push({ caption: temp[0].replace('?',','), url: temp[1] });
    }
}

function BuildPageSetForSafari(xml) {
    var request = new window.XMLHttpRequest();
    request.open("GET", "xsl/IE.xsl", false);
    request.send(null);
    var xsldoc = request.responseXML;
    var xslproc = new XSLTProcessor();
    xslproc.importStylesheet(xsldoc);

    for (var i = 0; i < sortKey.length; i++) {
        xslproc.setParameter(null, ('sortKey' + (parseInt(i) + 1)), sortKey[i]);
        xslproc.setParameter(null, ('dataType' + (parseInt(i) + 1)), dataType[i]);
    }
    xslproc.setParameter(null, 'sortOrder', sortOrder);

    var ps = xslproc.transformToFragment(xml, document);

    var ps2 = ps.textContent;
    ps2 = ps2.substring(ps2.indexOf('{') + 1);
    var psa = ps2.split("|");

    page_set = new Array();
    for (i = 0; i < psa.length; i++) {
        var temp = psa[i].split(",");
        page_set.push({ caption: temp[0].replace('?', ','), url: temp[1] });
    }
}

function BuildPagingLinkBar() {
    var totalResults = parseInt(Count[currentTab]);
    var totalPages = Math.ceil(totalResults / resultsPerPage);
    var html = "";
    if (totalPages > 1) {
        var firstPage = currentPage < 5 ? 1 : eval(currentPage - 4);
        var lastPage = eval(firstPage + 8) > totalPages ? totalPages : eval(firstPage + 8);
        if (currentPage > 1) {
            html += "<a href='javascript:GotoPage(" + eval(currentPage - 1) + ");' style='text-decoration:underline;'>Prev</a>&nbsp;&nbsp;";
        }
        if (firstPage > 1) {
            if (eval(firstPage - 1) <= 1) {
                html += "<a href='javascript:GotoPage(1);'>. . .</a>&nbsp;&nbsp;";
            } else {
                html += "<a href='javascript:GotoPage(" + eval(firstPage - 1) + ");'>. . .</a>&nbsp;&nbsp;";
            }
        }
        for (var i = 0; i < 9; i++) {
            if (currentPage == eval(firstPage + i)) {
                html += "<span class='current_page'>" + currentPage + "</span>&nbsp;&nbsp;";
            } 
            else if (eval(firstPage + i) >= 1 && eval(firstPage + i) <= lastPage) {
            html += "<a href='javascript:GotoPage(" + eval(firstPage + i) + ");'>" + eval(firstPage + i) + "</a>&nbsp;&nbsp;";
            }
        }
        if (lastPage < totalPages) {
            html += "<a href='javascript:GotoPage(" + eval(firstPage + 9) + ");'>. . .</a>&nbsp;&nbsp;";
        }
        if (currentPage < totalPages) {
            html += "<a href='javascript:GotoPage(" + eval(currentPage + 1) + ");' style='text-decoration:underline;'>Next</a>&nbsp;&nbsp;";
        }

        html = "Page: " + html;
    }

    $('page_nav_bottom').update(html);
}

function ClearFilters() {
    $$('select').each(function(s) { s.selectedIndex = 0; });
    $$('input').each(function(s) { if (s.readAttribute('id') != 'searchterm') { s.value = ""; } });
}

function CreateDefaultSourceOptions(type) {
    CreateOption(type, -1, 'Select All');
    CreateOption(type, -2, 'Rule Books');
    CreateOption(type, -3, 'Printed Adventures');
    CreateOption(type, -4, 'Dragon Magazines');
    CreateOption(type, -5, 'Dungeon Magazines');
    //CreateOption(type, -6, 'RPGA Adventures');
    CreateOption(type, -7, 'Miniatures');
    CreateOption(type, -1, '-');
}

function CreateOption(type, id, val) {
    var i;
    switch (type) {
        case 'BackgroundCampaign':
            i = $('background_campaign').options.length;
            $('background_campaign').options[i] = new Option(val, id, false, false);
            break;
        case 'BackgroundSkill':
            i = $('background_skill').options.length;
            $('background_skill').options[i] = new Option(val, id, false, false);
            break;
        case 'BackgroundSourceBook':
            i = $('background_source').options.length;
            $('background_source').options[i] = new Option(val, id, false, false);
            break;
        case 'BackgroundSourceOther':
            i = $('background_source').options.length;
            $('background_source').options[i] = new Option(val, id, false, false);
            break;
        case 'BackgroundType':
            i = $('background_type').options.length;
            $('background_type').options[i] = new Option(val, id, false, false);
            break;
        case 'ClassPowerSource':
            i = $('class_powersource').options.length;
            $('class_powersource').options[i] = new Option(val, id, false, false);
            break;
        case 'ClassSourceBook':
            i = $('class_source').options.length;
            $('class_source').options[i] = new Option(val, id, false, false);
            break;
        case 'ClassSourceOther':
            i = $('class_source').options.length;
            $('class_source').options[i] = new Option(val, id, false, false);
            break;
        case 'CompanionSourceBook':
            i = $('companion_source').options.length;
            $('companion_source').options[i] = new Option(val, id, false, false);
            break;
        case 'CompanionSourceOther':
            i = $('companion_source').options.length;
            $('companion_source').options[i] = new Option(val, id, false, false);
            break;
        case 'DeitySourceBook':
            i = $('deity_source').options.length;
            $('deity_source').options[i] = new Option(val, id, false, false);
            break;
        case 'DeitySourceOther':
            i = $('deity_source').options.length;
            $('deity_source').options[i] = new Option(val, id, false, false);
            break;
        case 'DiseaseSourceBook':
            i = $('disease_source').options.length;
            $('disease_source').options[i] = new Option(val, id, false, false);
            break;
        case 'DiseaseSourceOther':
            i = $('disease_source').options.length;
            $('disease_source').options[i] = new Option(val, id, false, false);
            break;
        case 'EpicSourceBook':
            i = $('epic_source').options.length;
            $('epic_source').options[i] = new Option(val, id, false, false);
            break;
        case 'EpicSourceOther':
            i = $('epic_source').options.length;
            $('epic_source').options[i] = new Option(val, id, false, false);
            break;
        case 'FeatSourceBook':
            i = $('feat_source').options.length;
            $('feat_source').options[i] = new Option(val, id, false, false);
            break;
        case 'FeatSourceOther':
            i = $('feat_source').options.length;
            $('feat_source').options[i] = new Option(val, id, false, false);
            break;
        case 'GlossaryCategory':
            i = $('glossary_category').options.length;
            $('glossary_category').options[i] = new Option(val, id, false, false);
            if (val == 'Rules') {
                i = $('glossary_category').options.length;
                $('glossary_category').options[i] = new Option('Skills', id, false, false);
            }
            break;
        case 'GlossarySourceBook':
            i = $('glossary_source').options.length;
            $('glossary_source').options[i] = new Option(val, id, false, false);
            break;
        case 'GlossarySourceOther':
            i = $('glossary_source').options.length;
            $('glossary_source').options[i] = new Option(val, id, false, false);
            break;
        case 'GlossaryType':
            i = $('glossary_type').options.length;
            $('glossary_type').options[i] = new Option(val, id, false, false);
            break;
        case 'ItemSlot':
            var slot = document.createElement('option');
            slot.value = id;
            slot.appendChild(document.createTextNode(val));
            var magic = $('magic');
            magic.appendChild(slot);
            break;
        case 'ItemSourceBook':
            i = $('item_source').options.length;
            $('item_source').options[i] = new Option(val, id, false, false);
            break;
        case 'ItemSourceOther':
            i = $('item_source').options.length;
            $('item_source').options[i] = new Option(val, id, false, false);
            break;
        case 'MonsterKeywords':
            i = $('monster_keywords').options.length;
            $('monster_keywords').options[i] = new Option(val, id, false, false);
            break;
        case 'MonsterSourceBook':
            i = $('monster_source').options.length;
            $('monster_source').options[i] = new Option(val, id, false, false);
            break;
        case 'MonsterSourceOther':
            i = $('monster_source').options.length;
            $('monster_source').options[i] = new Option(val, id, false, false);
            break;
        case 'ParagonClass':
            i = $('paragon_class').options.length;
            $('paragon_class').options[i] = new Option(val, id, false, false);
            break;
        case 'PagaronRace':
            i = $('paragon_race').options.length;
            $('paragon_race').options[i] = new Option(val, id, false, false);
            break;
        case 'ParagonSourceBook':
            i = $('paragon_source').options.length;
            $('paragon_source').options[i] = new Option(val, id, false, false);
            break;
        case 'ParagonSourceOther':
            i = $('paragon_source').options.length;
            $('paragon_source').options[i] = new Option(val, id, false, false);
            break;
        case 'PoisonSourceBook':
            i = $('poison_source').options.length;
            $('poison_source').options[i] = new Option(val, id, false, false);
            break;
        case 'PoisonSourceOther':
            i = $('poison_source').options.length;
            $('poison_source').options[i] = new Option(val, id, false, false);
            break;
        case 'PowerActionType':
            i = $('power_action_type').options.length;
            $('power_action_type').options[i] = new Option(val, id, false, false);
            break;
        case 'PowerClass':
            //i = $('power_class').options.length - 1;
            var op = document.createElement('option');
            op.value = id;
            op.appendChild(document.createTextNode(val));
            var sel = $('pc_by_class');
            sel.appendChild(op);
            break;
        case 'PowerKind':
            i = $('power_kind').options.length;
            $('power_kind').options[i] = new Option(val, id, false, false);
            break;
        case 'PowerRace':
            i = $('power_class').options.length;
            $('power_class').options[i] = new Option(val, id, false, false);
            break;
        case 'PowerSourceBook':
            i = $('power_source').options.length;
            $('power_source').options[i] = new Option(val, id, false, false);
            break;
        case 'PowerSourceOther':
            i = $('power_source').options.length;
            $('power_source').options[i] = new Option(val, id, false, false);
            break;
        case 'PowerUsage':
            i = $('power_usage').options.length;
            $('power_usage').options[i] = new Option(val, id, false, false);
            break;
        case 'RaceSourceBook':
            i = $('race_source').options.length;
            $('race_source').options[i] = new Option(val, id, false, false);
            break;
        case 'RaceSourceOther':
            i = $('race_source').options.length;
            $('race_source').options[i] = new Option(val, id, false, false);
            break;
        case 'RitualKeySkill':
            i = $('ritual_key_skill').options.length;
            $('ritual_key_skill').options[i] = new Option(val, id, false, false);
            break;
        case 'RitualSourceBook':
            i = $('ritual_source').options.length;
            $('ritual_source').options[i] = new Option(val, id, false, false);
            break;
        case 'RitualSourceOther':
            i = $('ritual_source').options.length;
            $('ritual_source').options[i] = new Option(val, id, false, false);
            break;
        case 'TerrainSourceBook':
            i = $('terrain_source').options.length;
            $('terrain_source').options[i] = new Option(val, id, false, false);
            break;
        case 'TerrainSourceOther':
            i = $('terrain_source').options.length;
            $('terrain_source').options[i] = new Option(val, id, false, false);
            break;
        case 'ThemeSourceBook':
            i = $('theme_source').options.length;
            $('theme_source').options[i] = new Option(val, id, false, false);
            break;
        case 'ThemeSourceOther':
            i = $('theme_source').options.length;
            $('theme_source').options[i] = new Option(val, id, false, false);
            break;
        case 'TrapGroupRole':
            i = $('trap_group_role').options.length;
            $('trap_group_role').options[i] = new Option(val, id, false, false);
            break;
        case 'TrapRole':
            i = $('trap_role').options.length;
            $('trap_role').options[i] = new Option(val, id, false, false);
            break;
        case 'TrapSourceBook':
            i = $('trap_source').options.length;
            $('trap_source').options[i] = new Option(val, id, false, false);
            break;
        case 'TrapSourceOther':
            i = $('trap_source').options.length;
            $('trap_source').options[i] = new Option(val, id, false, false);
            break;
        default:
            break;
    }
}

function ExecuteSearch(tab) {
    if ($F('searchterm') == '') { ViewAll(); return; }
    document.body.style.cursor = "wait";
    new Ajax.Request('CompendiumSearch.asmx/KeywordSearch', {
        method: 'post',
        parameters: { keywords: $F('searchterm'),
            nameOnly: nameOnly,
            tab: tab
        },
        onSuccess: function (response) {
            LoadSearch(response.responseText, tab);
        },
        onFailure: function () {
            document.body.style.cursor = "default";
        }
    });
    lastAction = "ExecuteSearch";
}

function GotoPage(pageNum) {
    currentPage = pageNum;
    BuildPagingLinkBar();
    startPos = eval(resultsPerPage * eval(pageNum - 1) + 1);
    LoadResults(currentTab, currentXml);
}

function HideResults() {
//    if (isiPad) {
//        $('resultsbody').update("<table class='resultsTable'><tr style='width:990px;height:24px;background-color:#000000;'><td></td></tr><tr style='background-color:#FFFFFF;'><td><div style='width:990px;height:384px;overflow-y:scroll;'></div></td></tr><tr style='width:990px;height:24px;background-color:#000000;'><td></td></tr></table>");
//    } else {
$('resultsbody').update("<table class='resultsTable'><tr style='width:990px;height:24px;background-color:#000000;'><td></td></tr><tr style='background-color:#FFFFFF;'><td><div style='width:990px;height:416px;overflow-y:scroll;'></div></td></tr><tr style='width:990px;height:24px;background-color:#000000;'><td></td></tr></table>");
//    }
    BuildPagingLinkBar();
}

function LoadFilters(xml) {
    CreateDefaultSourceOptions('MonsterSourceBook');
    CreateDefaultSourceOptions('ItemSourceBook');
    CreateDefaultSourceOptions('ParagonSourceBook');
    CreateDefaultSourceOptions('RitualSourceBook');
    CreateDefaultSourceOptions('FeatSourceBook');
    CreateDefaultSourceOptions('PowerSourceBook');
    CreateDefaultSourceOptions('GlossarySourceBook');
    CreateDefaultSourceOptions('DeitySourceBook');
    CreateDefaultSourceOptions('TrapSourceBook');
    CreateDefaultSourceOptions('RaceSourceBook');
    CreateDefaultSourceOptions('EpicSourceBook');
    CreateDefaultSourceOptions('ClassSourceBook');
    CreateDefaultSourceOptions('BackgroundSourceBook');
    CreateDefaultSourceOptions('CompanionSourceBook');
    CreateDefaultSourceOptions('DiseaseSourceBook');
    CreateDefaultSourceOptions('PoisonSourceBook');
    CreateDefaultSourceOptions('TerrainSourceBook');
    CreateDefaultSourceOptions('ThemeSourceBook');
    
    var xmldoc = XML.parse(xml);
    var xmlrows = xmldoc.getElementsByTagName('Option');
    for (var i = 0; i < xmlrows.length; i++) {
        CreateOption(
            xmlrows[i].getElementsByTagName('type')[0].firstChild.data,
            xmlrows[i].getElementsByTagName('id')[0].firstChild.data,
            xmlrows[i].getElementsByTagName('val')[0].firstChild.data);
    }
    LoadQuerystring();
}

function LoadQuerystring() {
    var queryString = $H((document.URL).toQueryParams());
    var ff = queryString.get('ff');
    var sa = queryString.get('sa');
    var searchterm = queryString.get('searchterm');
    var tab = queryString.get('tab');

    SetFilterText('searchterm', searchterm);

    if (sa != undefined) {
        switch (sa) {
            case '1': currentTab = 'Race'; break;
            case '2': currentTab = 'Class'; break;
            case '3': currentTab = 'Power'; break;
            case '4': currentTab = 'Feat'; break;
            case '5': currentTab = 'Item'; break;
            case '7': currentTab = 'Ritual'; break;
            case '8': currentTab = 'ParagonPath'; break;
            case '9': currentTab = 'EpicDestiny'; break;
            case '10': currentTab = 'Monster'; break;
            case '11': currentTab = 'Glossary'; break;
            case '12': currentTab = 'Deity'; break;
            case '13': currentTab = 'Background'; break;
            case '14': currentTab = 'Companion'; break;
            case '15': currentTab = 'Disease'; break;
            case '16': currentTab = 'Poison'; break;
            case '17': currentTab = 'Terrain'; break;
            case '18': currentTab = 'Trap'; break;
            default: currentTab = 'Race'; break;
        }
        ViewAll();
        //tab is used to set the selected tab
    } else if (tab != undefined && ff == undefined) {
        switch (tab) {
            case 'races': currentTab = 'Race'; break;
            case 'classes': currentTab = 'Class'; break;
            case 'powers': currentTab = 'Power'; break;
            case 'feats': currentTab = 'Feat'; break;
            case 'items': currentTab = 'Item'; break;
            case 'rituals': currentTab = 'Ritual'; break;
            case 'paths': currentTab = 'ParagonPath'; break;
            case 'destinies': currentTab = 'EpicDestiny'; break;
            case 'monsters': currentTab = 'Monster'; break;
            case 'glossary': currentTab = 'Glossary'; break;
            case 'deity': currentTab = 'Deity'; break;
            case 'background': currentTab = 'Background'; break;
            case 'companion': currentTab = 'Companion'; break;
            case 'disease': currentTab = 'Disease'; break;
            case 'theme': currentTab = 'Theme'; break;
            case 'poison': currentTab = 'Poison'; break;
            case 'terrain': currentTab = 'Terrain'; break;
            case 'trap': currentTab = 'Trap'; break;
            default: currentTab = 'Race'; break;
        }
        ExecuteSearch(currentTab);
        //if ff is set then perform a filtered search
    } else if (ff != undefined) {
        switch (ff) {
            case '1': currentTab = ''; break;
            case '2': currentTab = ''; break;
            case '3': currentTab = ''; break;
            case '4': currentTab = 'Feat'; break;
            case '5': currentTab = 'Item'; break;
            case '6': currentTab = 'Power'; break;
            case '7': currentTab = 'Ritual'; break;
            case '8': currentTab = 'ParagonPath'; break;
            case '9': currentTab = ''; break;
            case '10': currentTab = 'Monster'; break;
            case '11': currentTab = 'Glossary'; break;
            case '12': currentTab = 'Deity'; break;
            case '13': currentTab = 'Background'; break;
            case '14': currentTab = 'Companion'; break;
            case '15': currentTab = 'Disease'; break;
            case '16': currentTab = 'Poison'; break;
            case '17': currentTab = 'Terrain'; break;
            case '18': currentTab = 'Trap'; break;
            case '19': currentTab = 'Theme'; break;
            default: currentTab = 'Race'; break;
        }

        SwitchTab(currentTab);

        SetFilterSelect('race_source', queryString.get('rsb'));
        SetFilterSelect('class_source', queryString.get('csb'));
        SetFilterSelect('class_role', queryString.get('cr'));
        SetFilterSelect('class_powersource', queryString.get('cps'));
        SetFilterSelect('epic_source', queryString.get('esb'));
        SetFilterSelect('item_category', queryString.get('icat'));
        SetFilterSelect('item_source', queryString.get('isb'));
        SetFilterSelect('monster_combat_role', queryString.get('mcr'));
        SetFilterSelect('monster_group_role', queryString.get('mgr'));
        SetFilterSelect('monster_keywords', queryString.get('mk'));
        SetFilterSelect('monster_source', queryString.get('msb'));
        SetFilterSelect('power_class', queryString.get('pac'));
        SetFilterSelect('power_action_type', queryString.get('pat'));
        SetFilterSelect('power_kind', queryString.get('pk'));
        SetFilterSelect('power_usage', queryString.get('ps'));
        SetFilterSelect('power_source', queryString.get('psb'));
        SetFilterSelect('glossary_category', queryString.get('gc'));
        SetFilterSelect('glossary_type', queryString.get('gt'));
        SetFilterSelect('glossary_source', queryString.get('gs'));
        SetFilterSelect('feat_tier', queryString.get('ft'));
        SetFilterSelect('feat_source', queryString.get('fs'));
        SetFilterSelect('ritual_key_skill', queryString.get('rks'));
        SetFilterSelect('ritual_source', queryString.get('rs'));
        SetFilterSelect('paragon_class', queryString.get('ppc'));
        SetFilterSelect('paragon_race', queryString.get('ppr'));
        SetFilterSelect('paragon_source', queryString.get('pps'));
        SetFilterSelect('deity_alignment', queryString.get('da'));
        SetFilterSelect('deity_source', queryString.get('ds'));
        SetFilterSelect('background_type', queryString.get('bt'));
        SetFilterSelect('background_skill', queryString.get('bsk'));
        SetFilterSelect('background_campaign', queryString.get('bc'));
        SetFilterSelect('background_source', queryString.get('bso'));
        SetFilterSelect('companion_type', queryString.get('cft'));
        SetFilterSelect('companion_source', queryString.get('cfs'));
        SetFilterSelect('disease_source', queryString.get('dfs'));
        SetFilterSelect('poison_source', queryString.get('pfs'));
        SetFilterSelect('terrain_source', queryString.get('tes'));
        SetFilterSelect('trap_source', queryString.get('trs'));
        SetFilterSelect('item_rarity', queryString.get('ir'));

        SetFilterText('item_cost_low', queryString.get('icn'));
        SetFilterText('item_cost_high', queryString.get('icx'));
        SetFilterText('item_enhancement_low', queryString.get('iem'));
        SetFilterText('item_enhancement_high', queryString.get('iex'));
        SetFilterText('item_level_low', queryString.get('iln'));
        SetFilterText('item_level_high', queryString.get('ilx'));
        SetFilterText('monster_level_low', queryString.get('mln'));
        SetFilterText('monster_level_high', queryString.get('mlx'));
        SetFilterText('power_level_low', queryString.get('pln'));
        SetFilterText('power_level_high', queryString.get('plx'));
        SetFilterText('monster_xp_low', queryString.get('xpm'));
        SetFilterText('monster_xp_high', queryString.get('xpx'));
        SetFilterText('ritual_level_low', queryString.get('rlm'));
        SetFilterText('ritual_level_high', queryString.get('rlx'));
        SetFilterText('ritual_cost_low', queryString.get('rcm'));
        SetFilterText('ritual_cost_high', queryString.get('rcx'));

        if (applyFilters == true) {
            ApplyFilter();
        } else {
            ExecuteSearch(currentTab);
        }
    } else if (searchterm != undefined) {
        ExecuteSearch('');
    }
}

function LoadResults(tab, xmlDoc) {
    if (document.all) {
        BuildPageSet(xmlDoc);
    }
    var xslFile = 'xsl/' + tab + '.xsl';
    var xslDoc = new XML.Transformer(xslFile);
    for (var i = 0; i < sortKey.length; i++) {
        xslDoc.setParam(xmlDoc, ('sortKey' + (parseInt(i) + 1)), sortKey[i]);
        xslDoc.setParam(xmlDoc, ('dataType' + (parseInt(i) + 1)), dataType[i]);
    }
    xslDoc.setParam(xmlDoc, 'sortOrder', sortOrder);
    xslDoc.setParam(xmlDoc, 'startPos', startPos);
    xslDoc.setParam(xmlDoc, 'endPos', parseInt(startPos) + parseInt(resultsPerPage) - 1);
    xslDoc.transform(xmlDoc, 'resultsbody');

    if (Prototype.Browser.WebKit) {
        BuildPageSetForSafari(xmlDoc);
    }
    $('results_title').update('Search Results: ' + $('category').options.namedItem(tab).text);
}

function LoadSearch(xml, tab) {
    currentPage = 1;
    startPos = 1;
    var xmlDoc = XML.parse(xml);

    var xmlrow = xmlDoc.getElementsByTagName('Tab');
    SetCount(xmlrow);

    var results = xmlDoc.getElementsByTagName('Results');
    for (var i = results[0].childNodes.length - 1; i >= 0; i--) {
        if (results[0].childNodes[i].nodeName == '#text') {
            results[0].removeChild(results[0].childNodes[i]);
        }
    }
    if (tab == '') {
        if (results[0].childNodes.length > 0) {
            if (results[0].childNodes[0].nodeName == '#text') {
                if (results[0].childNodes.length > 1) {
                    tab = results[0].childNodes[1].nodeName;
                }
            }
            else {
                tab = results[0].childNodes[0].nodeName;
            }
        }
        else {
            tab = 'Race';
        }
    }
    currentTab = tab;
    LoadResults(tab, xmlDoc);
    currentXml = xmlDoc;
    ShowFilter(tab);
    BuildPagingLinkBar();
    EnableFilter();
    EnableSearch();
    document.body.style.cursor = "default";
}

function PopulateFilterSelects() {
    new Ajax.Request('CompendiumSearch.asmx/GetFilterSelect', {
        method: 'post',
        onSuccess: function(response) {
            LoadFilters(response.responseText);
        }
    });
}

function ResetAll() {
    $('category').selectedIndex = 0;
    $('searchterm').value = "";
    $('nameonly').checked = false;
    nameOnly = false;
    $('results_title').update('Search Results: ');

    ClearFilters();
    DisableSearch();
    DisableFilter();
    ShowFilter();
    HideResults();
    SetCount();
}

function ResetFilter() {
    ClearFilters();
    if ($F('searchterm') != "") {
        ExecuteSearch(currentTab);
    } else {
        ViewAll();
    }
}

function SetCount(xmlrow) {
    var s;
    Count['Race'] = 0;
    Count['Class'] = 0;
    Count['Item'] = 0;
    Count['Monster'] = 0;
    Count['EpicDestiny'] = 0;
    Count['ParagonPath'] = 0;
    Count['Ritual'] = 0;
    Count['Feat'] = 0;
    Count['Power'] = 0;
    Count['Glossary'] = 0;
    Count['Deity'] = 0;
    Count['Trap'] = 0;
    Count['Background'] = 0;
    Count['Companion'] = 0;
    Count['Disease'] = 0;
    Count['Poison'] = 0;
    Count['Terrain'] = 0;
    Count['Theme'] = 0;
    $('category').options.namedItem('Class').text = 'Classes';
    $('category').options.namedItem('Monster').text = 'Creatures';
    $('category').options.namedItem('Deity').text = 'Deities';
    $('category').options.namedItem('EpicDestiny').text = 'Epic Destinies';
    $('category').options.namedItem('Feat').text = 'Feats';
    $('category').options.namedItem('Glossary').text = 'Glossary';
    $('category').options.namedItem('Item').text = 'Items';
    $('category').options.namedItem('ParagonPath').text = 'Paragon Paths';
    $('category').options.namedItem('Power').text = 'Powers';
    $('category').options.namedItem('Race').text = 'Races';
    $('category').options.namedItem('Ritual').text = 'Rituals';
    $('category').options.namedItem('Trap').text = 'Traps';
    $('category').options.namedItem('Background').text = 'Backgrounds';
    $('category').options.namedItem('Companion').text = 'Companions & Familiars';
    $('category').options.namedItem('Disease').text = 'Diseases';
    $('category').options.namedItem('Theme').text = 'Character Themes';
    $('category').options.namedItem('Poison').text = 'Poisons';
    $('category').options.namedItem('Terrain').text = 'Terrain';

    if (xmlrow) {
        for (var i = 0; i < xmlrow.length; i++) {
            s = xmlrow[i].getElementsByTagName('Table')[0].firstChild.data;
            switch (s) {
                case 'Race':
                    Count[s] = xmlrow[i].getElementsByTagName('Total')[0].firstChild.data;
                    $('category').options.namedItem('Race').text = 'Races (' + Count[s] + ')';
                    break;
                case 'Class':
                    Count[s] = xmlrow[i].getElementsByTagName('Total')[0].firstChild.data;
                    $('category').options.namedItem('Class').text = 'Classes (' + Count[s] + ')';
                    break;
                case 'Item':
                    Count[s] = xmlrow[i].getElementsByTagName('Total')[0].firstChild.data;
                    $('category').options.namedItem('Item').text = 'Items (' + Count[s] + ')';
                    break;
                case 'Monster':
                    Count[s] = xmlrow[i].getElementsByTagName('Total')[0].firstChild.data;
                    $('category').options.namedItem('Monster').text = 'Creatures (' + Count[s] + ')';
                    break;
                case 'EpicDestiny':
                    Count[s] = xmlrow[i].getElementsByTagName('Total')[0].firstChild.data;
                    $('category').options.namedItem('EpicDestiny').text = 'Epic Destinies (' + Count[s] + ')';
                    break;
                case 'ParagonPath':
                    Count[s] = xmlrow[i].getElementsByTagName('Total')[0].firstChild.data;
                    $('category').options.namedItem('ParagonPath').text = 'Paragon Paths (' + Count[s] + ')';
                    break;
                case 'Ritual':
                    Count[s] = xmlrow[i].getElementsByTagName('Total')[0].firstChild.data;
                    $('category').options.namedItem('Ritual').text = 'Rituals (' + Count[s] + ')';
                    break;
                case 'Feat':
                    Count[s] = xmlrow[i].getElementsByTagName('Total')[0].firstChild.data;
                    $('category').options.namedItem('Feat').text = 'Feats (' + Count[s] + ')';
                    break;
                case 'Power':
                    Count[s] = xmlrow[i].getElementsByTagName('Total')[0].firstChild.data;
                    $('category').options.namedItem('Power').text = 'Powers (' + Count[s] + ')';
                    break;
                case 'Glossary':
                    Count[s] = xmlrow[i].getElementsByTagName('Total')[0].firstChild.data;
                    $('category').options.namedItem('Glossary').text = 'Glossary (' + Count[s] + ')';
                    break;
                case 'Deity':
                    Count[s] = xmlrow[i].getElementsByTagName('Total')[0].firstChild.data;
                    $('category').options.namedItem('Deity').text = 'Deities (' + Count[s] + ')';
                    break;
                case 'Trap':
                    Count[s] = xmlrow[i].getElementsByTagName('Total')[0].firstChild.data;
                    $('category').options.namedItem('Trap').text = 'Traps (' + Count[s] + ')';
                    break;
                case 'Background':
                    Count[s] = xmlrow[i].getElementsByTagName('Total')[0].firstChild.data;
                    $('category').options.namedItem('Background').text = 'Backgrounds (' + Count[s] + ')';
                    break;
                case 'Companion':
                    Count[s] = xmlrow[i].getElementsByTagName('Total')[0].firstChild.data;
                    $('category').options.namedItem('Companion').text = 'Companions & Familiars (' + Count[s] + ')';
                    break;
                case 'Disease':
                    Count[s] = xmlrow[i].getElementsByTagName('Total')[0].firstChild.data;
                    $('category').options.namedItem('Disease').text = 'Diseases (' + Count[s] + ')';
                    break;
                case 'Theme':
                    Count[s] = xmlrow[i].getElementsByTagName('Total')[0].firstChild.data;
                    $('category').options.namedItem('Theme').text = 'Character Themes (' + Count[s] + ')';
                    break;
                case 'Poison':
                    Count[s] = xmlrow[i].getElementsByTagName('Total')[0].firstChild.data;
                    $('category').options.namedItem('Poison').text = 'Poisons (' + Count[s] + ')';
                    break;
                case 'Terrain':
                    Count[s] = xmlrow[i].getElementsByTagName('Total')[0].firstChild.data;
                    $('category').options.namedItem('Terrain').text = 'Terrain (' + Count[s] + ')';
                    break;
                default:
                    break;
            }
        }
    }
}

function SetDefaultSort(tab) {
    for (var i = sortKey.length; i > 0; i--) {
        sortKey.pop();
        dataType.pop();
    }
    switch (tab) {
        case 'Background':
            sortKey[0] = 'Type'; dataType[0] = 'text'; sortKey[1] = 'Campaign'; dataType[1] = 'text'; sortKey[2] = 'Skills'; dataType[2] = 'text'; sortKey[3] = 'SourceBook'; dataType[3] = 'text'; sortKey[4] = 'Name'; dataType[4] = 'text'; break;
        case 'Class':
            sortKey[0] = 'RoleName'; dataType[0] = 'text'; sortKey[1] = 'PowerSourceText'; dataType[1] = 'text'; sortKey[2] = 'KeyAbilities'; dataType[2] = 'text'; sortKey[3] = 'SourceBook'; dataType[3] = 'text'; sortKey[4] = 'Name'; dataType[4] = 'text'; break;
        case 'Companion':
            sortKey[0] = 'Type'; dataType[0] = 'text'; sortKey[1] = 'SourceBook'; dataType[1] = 'text'; sortKey[2] = 'Name'; dataType[2] = 'text'; break;
        case 'Deity':
            sortKey[0] = 'Name'; dataType[0] = 'text'; sortKey[1] = 'Alignment'; dataType[1] = 'text'; sortKey[2] = 'SourceBook'; dataType[2] = 'text'; break;
        case 'Disease':
            sortKey[0] = 'Level'; dataType[0] = 'number'; sortKey[1] = 'SourceBook'; dataType[1] = 'text'; sortKey[2] = 'Name'; dataType[2] = 'text'; break;
        case 'EpicDestiny':
            sortKey[0] = 'Prerequisite'; dataType[0] = 'text'; sortKey[1] = 'SourceBook'; dataType[1] = 'text'; sortKey[2] = 'Name'; dataType[2] = 'text'; break;
        case 'Feat':
            sortKey[0] = 'TierSort'; dataType[0] = 'text'; sortKey[1] = 'SourceBook'; dataType[1] = 'text'; sortKey[2] = 'Name'; dataType[2] = 'text'; break;
        case 'Glossary':
            sortKey[0] = 'Name'; dataType[0] = 'text'; sortKey[1] = 'Category'; dataType[1] = 'text'; sortKey[2] = 'Type'; dataType[2] = 'text'; sortKey[3] = 'SourceBook'; dataType[3] = 'text'; break;
        case 'Item':
            sortKey[0] = 'CostSort'; dataType[0] = 'number'; sortKey[1] = 'LevelSort'; dataType[1] = 'number'; sortKey[2] = 'Category'; dataType[2] = 'text'; sortKey[3] = 'Rarity'; dataType[3] = 'text'; sortKey[4] = 'SourceBook'; dataType[4] = 'text'; sortKey[5] = 'Name'; dataType[5] = 'text'; break;
        case 'Monster':
            sortKey[0] = 'Level'; dataType[0] = 'number'; sortKey[1] = 'GroupRole'; dataType[1] = 'text'; sortKey[2] = 'SourceBook'; dataType[2] = 'text'; sortKey[3] = 'Name'; dataType[3] = 'text'; break;
        case 'ParagonPath':
            sortKey[0] = 'Prerequisite'; dataType[0] = 'text'; sortKey[1] = 'SourceBook'; dataType[1] = 'text'; sortKey[2] = 'Name'; dataType[2] = 'text'; break;
        case 'Poison':
            sortKey[0] = 'Level'; dataType[0] = 'number'; sortKey[1] = 'Cost'; dataType[1] = 'number'; sortKey[2] = 'SourceBook'; dataType[2] = 'text'; sortKey[2] = 'Name'; dataType[2] = 'text'; break;
        case 'Power':
            sortKey[0] = 'Level'; dataType[0] = 'number'; sortKey[1] = 'ClassName'; dataType[1] = 'text'; sortKey[2] = 'ActionType'; dataType[2] = 'text'; sortKey[3] = 'SourceBook'; dataType[3] = 'text'; sortKey[4] = 'Name'; dataType[4] = 'text'; break;
        case 'Race':
            sortKey[0] = 'DescriptionAttribute'; dataType[0] = 'text'; sortKey[1] = 'Size'; dataType[1] = 'text'; sortKey[2] = 'SourceBook'; dataType[2] = 'text'; sortKey[3] = 'Name'; dataType[3] = 'text'; break;
        case 'Ritual':
            sortKey[0] = 'Level'; dataType[0] = 'number'; sortKey[1] = 'KeySkillDescription'; dataType[1] = 'text'; sortKey[2] = 'Price'; dataType[2] = 'number'; sortKey[3] = 'SourceBook'; dataType[3] = 'text'; sortKey[4] = 'Name'; dataType[4] = 'text'; break;
        case 'Terrain':
            sortKey[0] = 'Name'; dataType[0] = 'text'; sortKey[1] = 'Type'; dataType[1] = 'text'; sortKey[2] = 'SourceBook'; dataType[2] = 'text'; break;
        case 'Theme':
            sortKey[0] = 'Name'; dataType[0] = 'text'; sortKey[1] = 'Type'; dataType[1] = 'text'; sortKey[2] = 'SourceBook'; dataType[2] = 'text'; break;
        case 'Trap':
            sortKey[0] = 'Level'; dataType[0] = 'number'; sortKey[1] = 'Type'; dataType[1] = 'text'; sortKey[2] = 'GroupRole'; dataType[2] = 'text'; sortKey[3] = 'SourceBook'; dataType[3] = 'text'; sortKey[4] = 'Name'; dataType[4] = 'text'; break;
        default:
            break;
    }
}

//SetFilterSelect - used during page load to set drop down values based on querystring parameters
function SetFilterSelect(filter, value) {
    if (value != undefined) {
        var el = $(filter);
        for (var i = 0; i < el.length; i++) {
            if (el.options[i].value == value || el.options[i].text == value) {
                el.selectedIndex = i;
                window.applyFilters = true;
                break;
            }
        }
    }
}

//SetFilterText - used during page load to set text box values based on querystring parameters
function SetFilterText(filter, value) {
    if (value != undefined && value != -1) {
        $(filter).value = value;
        window.applyFilters = true;
    }
}

function SetResultsPerPage(count) {
    currentPage = 1;
    if (isiPad)
        resultsPerPage = 16;
    else 
        resultsPerPage = count;
    startPos = 1;
    BuildPagingLinkBar();
    Utilities.SetCookie("resultsPerPage", resultsPerPage, 365);
    switch (lastAction) {
        case "ExecuteSearch":
            ExecuteSearch(currentTab);
            break;
        case "ViewAll":
            ViewAll();
            break;
        case "ExecuteFilteredSearch":
            ApplyFilter();
            break;
        default:
            break;
    }
    UpdateResultsPerPage();
}

function ShowFilter(tab) {
    $('filterRace').setStyle({ visibility: 'hidden' });
    $('filterClass').setStyle({ visibility: 'hidden'});
    $('filterItem').setStyle({ visibility: 'hidden'});
    $('filterMonster').setStyle({ visibility: 'hidden' });
    $('filterEpicDestiny').setStyle({ visibility: 'hidden'});
    $('filterParagonPath').setStyle({ visibility: 'hidden'});
    $('filterRitual').setStyle({ visibility: 'hidden'});
    $('filterFeat').setStyle({ visibility: 'hidden'});
    $('filterPower').setStyle({ visibility: 'hidden'});
    $('filterGlossary').setStyle({ visibility: 'hidden'});
    $('filterDeity').setStyle({ visibility: 'hidden'});
    $('filterTrap').setStyle({ visibility: 'hidden' });
    $('filterBackground').setStyle({ visibility: 'hidden' });
    $('filterCompanion').setStyle({ visibility: 'hidden' });
    $('filterDisease').setStyle({ visibility: 'hidden' });
    $('filterTheme').setStyle({ visibility: 'hidden' });
    $('filterPoison').setStyle({ visibility: 'hidden' });
    $('filterTerrain').setStyle({ visibility: 'hidden' });
    $$('select').each(function (s) { s.setStyle({ visibility: 'hidden' }); });
    $('category').setStyle({visibility: 'visible' });

    switch (tab) {
        case 'Race':
            $('filterRace').setStyle({visibility: 'visible' });
            $$('#filterRace select').each(function (s) { s.setStyle({ visibility: 'visible' }); });
            document.title = 'Dungeons & Dragons Compendium - Races';
            break;
        case 'Class':
            $('filterClass').setStyle({visibility: 'visible' });
            $$('#filterClass select').each(function (s) { s.setStyle({ visibility: 'visible' }); });
            document.title = 'Dungeons & Dragons Compendium - Classes';
            break;
        case 'Item':
            $('filterItem').setStyle({visibility: 'visible' });
            $$('#item_table select').each(function (s) { s.setStyle({ visibility: 'visible' }); });
            document.title = 'Dungeons & Dragons Compendium - Items';
            break;
        case 'Monster':
            $('filterMonster').setStyle({visibility: 'visible' });
            $$('#monster_table select').each(function (s) { s.setStyle({ visibility: 'visible' }); });
            document.title = 'Dungeons & Dragons Compendium - Creatures';
            break;
        case 'EpicDestiny':
            $('filterEpicDestiny').setStyle({visibility: 'visible' });
            $$('#filterEpicDestiny select').each(function (s) { s.setStyle({ visibility: 'visible' }); });
            document.title = 'Dungeons & Dragons Compendium - Epic Destinies';
            break;
        case 'ParagonPath':
            $('filterParagonPath').setStyle({visibility: 'visible' });
            $$('#paragon_table select').each(function (s) { s.setStyle({ visibility: 'visible' }); });
            document.title = 'Dungeons & Dragons Compendium - Paragon Paths';
            break;
        case 'Ritual':
            $('filterRitual').setStyle({visibility: 'visible' });
            $$('#ritual_table select').each(function (s) { s.setStyle({ visibility: 'visible' }); });
            document.title = 'Dungeons & Dragons Compendium - Rituals';
            break;
        case 'Feat':
            $('filterFeat').setStyle({visibility: 'visible' });
            $$('#feat_table select').each(function (s) { s.setStyle({ visibility: 'visible' }); });
            document.title = 'Dungeons & Dragons Compendium - Feats';
            break;
        case 'Power':
            $('filterPower').setStyle({visibility: 'visible' });
            $$('#power_table select').each(function (s) { s.setStyle({ visibility: 'visible' }); });
            document.title = 'Dungeons & Dragons Compendium - Powers';
            break;
        case 'Glossary':
            $('filterGlossary').setStyle({visibility: 'visible' });
            $$('#glossary_table select').each(function (s) { s.setStyle({ visibility: 'visible' }); });
            document.title = 'Dungeons & Dragons Compendium - Glossary';
            break;
        case 'Deity':
            $('filterDeity').setStyle({visibility: 'visible' });
            $$('#deity_table select').each(function (s) { s.setStyle({ visibility: 'visible' }); });
            document.title = 'Dungeons & Dragons Compendium - Deities';
            break;
        case 'Trap':
            $('filterTrap').setStyle({visibility: 'visible' });
            $$('#trap_table select').each(function (s) { s.setStyle({ visibility: 'visible' }); });
            document.title = 'Dungeons & Dragons Compendium - Traps';
            break;
        case 'Background':
            $('filterBackground').setStyle({ visibility: 'visible' });
            $$('#background_table select').each(function (s) { s.setStyle({ visibility: 'visible' }); });
            document.title = 'Dungeons & Dragons Compendium - Backgrounds';
            break;
        case 'Companion':
            $('filterCompanion').setStyle({ visibility: 'visible' });
            $$('#companion_table select').each(function (s) { s.setStyle({ visibility: 'visible' }); });
            document.title = 'Dungeons & Dragons Compendium - Companions & Familiars';
            break;
        case 'Disease':
            $('filterDisease').setStyle({ visibility: 'visible' });
            $$('#filterDisease select').each(function (s) { s.setStyle({ visibility: 'visible' }); });
            document.title = 'Dungeons & Dragons Compendium - Diseases';
            break;
        case 'Theme':
            $('filterTheme').setStyle({ visibility: 'visible' });
            $$('#filterTheme select').each(function (s) { s.setStyle({ visibility: 'visible' }); });
            document.title = 'Dungeons & Dragons Compendium - Character Themes';
            break;
        case 'Poison':
            $('filterPoison').setStyle({ visibility: 'visible' });
            $$('#filterPoison select').each(function (s) { s.setStyle({ visibility: 'visible' }); });
            document.title = 'Dungeons & Dragons Compendium - Poisons';
            break;
        case 'Terrain':
            $('filterTerrain').setStyle({ visibility: 'visible' });
            $$('#filterTerrain select').each(function (s) { s.setStyle({ visibility: 'visible' }); });
            document.title = 'Dungeons & Dragons Compendium - Terrain';
            break;
        default:
            break;
    }
    SetFilterSelect("category", tab);
    currentTab = tab;
}

function SortMe() {
    if (sortKey[0] == arguments[0] && sortOrder == 'ascending') {
        sortOrder = 'descending';
    } else {
        sortOrder = 'ascending';
    }
    for (var i = sortKey.length; i > 0;  i--) {
        sortKey.pop();
        dataType.pop();
    }
    for (i = 0; i < arguments.length; i++) {
        sortKey[i] = arguments[i];
        if (sortKey[i] == 'Level' || sortKey[i] == 'Cost' || sortKey[i] == 'Price' || sortKey[i] == 'CostSort' || sortKey[i] == 'LevelSort') {
            dataType[i] = 'number';
        } else {
            dataType[i] = 'text';
        }
    }
    SetResultsPerPage(resultsPerPage);
}

function SwitchTab(tab) {
    if (tab == "" && $F('searchterm') == "") {
        DisableFilter();
        DisableSearch();
    } else {
        EnableFilter();
        EnableSearch();
    }
    HideResults();
    ClearFilters();

    Count['Race'] = 0;
    Count['Class'] = 0;
    Count['Item'] = 0;
    Count['Monster'] = 0;
    Count['EpicDestiny'] = 0;
    Count['ParagonPath'] = 0;
    Count['Ritual'] = 0;
    Count['Feat'] = 0;
    Count['Power'] = 0;
    Count['Glossary'] = 0;
    Count['Deity'] = 0;
    Count['Trap'] = 0;
    Count['Background'] = 0;
    Count['Companion'] = 0;
    Count['Disease'] = 0;
    Count['Poison'] = 0;
    Count['Terrain'] = 0;
    Count['Theme'] = 0;
    if ($F('searchterm')) {
        ExecuteSearch(tab);
    } else {
        ShowFilter(tab);
    }
    SetDefaultSort(tab);
    currentTab = tab;
}

function UpdateResultsPerPage() {
    var html = "";
    switch (parseInt(resultsPerPage)) {
//        case 16:
//            html = "";
//            break;
        case 20:
            html = "Results per page: 20 | <a id='50_per_page' href='javascript:SetResultsPerPage(50);'>50</a> | <a id='100_per_page' href='javascript:SetResultsPerPage(100);'>100</a>";
            break;
        case 50:
            html = "Results per page: <a id='20_per_page' href='javascript:SetResultsPerPage(20);'>20</a> | 50 | <a id='100_per_page' href='javascript:SetResultsPerPage(100);'>100</a>";
            break;
        case 100:
            html = 'Results per page: <a id="20_per_page" href="javascript:SetResultsPerPage(20);">20</a> | <a id="50_per_page" href="javascript:SetResultsPerPage(50);">50</a> | 100';
            break;
    }
    $('results_per_page').update(html);
}

function ViewAll() {
    if ($('category').selectedIndex == 0) { return; }
    currentTab = $('category').options[$('category').selectedIndex].value;
    document.body.style.cursor = "wait";
    new Ajax.Request('CompendiumSearch.asmx/ViewAll', {
        method: 'post',
        parameters: { tab: currentTab },
        onSuccess: function (response) {
            LoadSearch(response.responseText, currentTab);
        },
        onFailure: function () {
            document.body.style.cursor = "default";
        }
    });
    lastAction = "ViewAll";
}


