﻿/// <reference path="jquery-1.6.2.min.js" />

/****** Loading Spinners ******/
function StatusLoadSpnr(strDivID) {
    var div = document.createElement('div');
    var hding = document.createElement('h1');
    var img = document.createElement('img');
    hding.innerHTML = "Loading Results"
    img.setAttribute('src', '../Images/loader.gif');
    img.setAttribute('alt', 'Loading');
    div.setAttribute('id', strDivID);
    div.setAttribute('align', 'center');
    div.className = 'loadingSpinnerDiv';  //added for IE7. Remove when IE7 EOL is reached
    div.setAttribute('class', 'loadingSpinnerDiv');
    div.appendChild(hding);
    div.appendChild(img);
    return div;
}

function StatusLoadLittleSpnr(strDivID) {
    var urlRoot = location.protocol + '//' + location.host;
    var div = document.createElement('div');
    var hding = document.createElement('label');
    var img = document.createElement('img');
    hding.innerHTML = "&nbsp;Loading Results"
    img.setAttribute('src', urlRoot + '/Images/little_loader.gif');
    img.setAttribute('alt', 'Loading');
    div.setAttribute('id', strDivID);
    div.className = 'loadingLittleSpinnerDiv';  //added for IE7. Remove when IE7 EOL is reached
    div.setAttribute('class', 'loadingLittleSpinnerDiv');
    div.appendChild(img);
    div.appendChild(hding);
    return div;
}

/********** End - Loading Spinners ***********/

/****** Begin - Show all Antibodies on search ******/
function ShowAllAbResults() {

    var blnResponse = confirm("WARNING: It may take a while to return all of the results of your search. Are you sure this is what you want to do?");
    if (blnResponse == true) {
        insertParam("LoadAll", "true");
    }
}

function insertParam(key, value) {
    key = escape(key); value = escape(value);

    var kvp = document.location.search.substr(1).split('&');

    var i = kvp.length; var x; while (i--) {
        x = kvp[i].split('=');

        if (x[0] == key) {
            x[1] = value;
            kvp[i] = x.join('=');
            break;
        }
    }

    if (i < 0) { kvp[kvp.length] = [key, value].join('='); }

    //this will reload the page, it's likely better to store this until finished
    document.location.search = kvp.join('&');
}

/****** End - Show all Antibodies on search ******/

/***** Begin - Filter Summary View *****/
function ShowSummaryFilterMenu() {
    $('#divFilterMenuBackground').show(); $('#divFilterMenuWindow').show();
}

function HideSummaryFilterMenu() {
    $('#divFilterMenuBackground').hide(); $('#divFilterMenuWindow').hide();
}

function ClearFilters() {
    $.each($("#divFilterMenuWindow").find("select"), function (indx, val) {
        //console.log(val);
        $(val)[0].selectedIndex = 0;
    });
    FilterAbSummaryResults();
}

function FilterAbSummaryResults() {
    HideSummaryFilterMenu();
    $("#divSummarySearchResult > .outputPannelRowLink").show();
    var divs = $("#divSummarySearchResult > .outputPannelRowLink > .outputPannelRow > .SummaryResultData");
    var selectedTargets = $("select#lstbxTargets").val();
    var selectedHost = $("select#lstbxHost").val();
    var selectedType = $("select#lstbxType").val();
    var selectedMod = $("select#lstbxMod").val();
    var selectedAgMod = $("select#lstbxAgMod").val();
    var selectedReactivity = $("select#lstbxReactivity").val();
    var selectedAssays = $("select#lstbxAssay").val();
    var selectedImages = $("select#lstbxImages").val();
    $.each(divs, function (inx, val) {

        var blnTargetFoundFlag = false;
        for (var indx in selectedTargets) {
            if ($(val).children("#spanTargetName").text() == selectedTargets[indx] || selectedTargets[indx] == "All") {
                blnTargetFoundFlag = true;
                break;
            }
        }

        var blnHostFoundFlag = false;
        for (var indx in selectedHost) {
            if ($(val).children("#spanHostSpecies").text() == selectedHost[indx] || selectedHost[indx] == "All") {
                blnHostFoundFlag = true;
                break;
            }
        }

        var blnTypeFoundFlag = false;
        for (var indx in selectedType) {
            if ($(val).children("#spanType").text() == $.trim(selectedType[indx]) || selectedType[indx] == "All") {
                blnTypeFoundFlag = true;
                break;
            }
        }

        var blnModFoundFlag = false;
        for (var indx in selectedMod) {
            if ($(val).children("#spanMod").text() == selectedMod[indx] || selectedMod[indx] == "All") {
                blnModFoundFlag = true;
                break;
            }
            else if (selectedMod[indx] == "(blank)" && $(val).children("#spanMod").text() == "") {
                blnModFoundFlag = true;
                break;
            }
        }

        var blnAgModFoundFlag = false;
        for (var indx in selectedAgMod) {
            if ($(val).children("#spanAgMod").text() == selectedAgMod[indx] || selectedAgMod[indx] == "All") {
                blnAgModFoundFlag = true;
                break;
            }
            else if (selectedAgMod[indx] == "(blank)" && $(val).children("#spanAgMod").text() == "") {
                blnAgModFoundFlag = true;
                break;
            }
        }

        var blnReactivityFoundFlag = false;
        for (var indx in selectedReactivity) {
            var arrayReactivity = $(val).children("#spanReactivity").text().split(", ");
            if ($.inArray($.trim(selectedReactivity[indx]), arrayReactivity) > -1 || selectedReactivity[indx] == "All") {
                blnReactivityFoundFlag = true;
                break;
            }
            else if (selectedReactivity[indx] == "(blank)" && $(val).children("#spanReactivity").text() == "") {
                blnReactivityFoundFlag = true;
                break;
            }
        }

        var blnAssaysFoundFlag = false;
        for (var indx in selectedAssays) {
            var arrayAssays = $(val).children("#spanAssays").text().split(", ");
            if ($.inArray($.trim(selectedAssays[indx]), arrayAssays) > -1 || selectedAssays[indx] == "All") {
                blnAssaysFoundFlag = true;
                break;
            }
            else if (selectedAssays[indx] == "(blank)" && $(val).children("#spanAssays").text() == "") {
                blnAssaysFoundFlag = true;
                break;
            }
        }

        var blnImagesFoundFlag = false;
        for (var indx in selectedImages) {
            var arrayImages = $(val).children("#spanImages").text().split(", ");
            if ($.inArray($.trim(selectedImages[indx]), arrayImages) > -1 || selectedImages[indx] == "All") {
                blnImagesFoundFlag = true;
                break;
            }
            else if (selectedImages[indx] == "(blank)" && $(val).children("#spanImages").text() == "") {
                blnImagesFoundFlag = true;
                break;
            }
        }

        if (!blnTargetFoundFlag || !blnHostFoundFlag || !blnTypeFoundFlag || !blnModFoundFlag || !blnAgModFoundFlag || !blnReactivityFoundFlag || !blnAssaysFoundFlag || !blnImagesFoundFlag) {
            $(val).parent().parent().hide();
        }
    });
}

/***** End - Filter Summary View *****/

/**** Filter Table ****/
var myFilter = {};

// Create enum for filter type
myFilter.FilterType = ({ "MulitSelect": 0, "Menu": 1 });
myFilter.FieldType = ({ "List": 0, "SingleItem": 1 });
/* FitlerField Class */
myFilter.FilterField = function (strColumnID, enumFilterType, enumFieldType) {

    var _columntofilter = strColumnID;
    var _columnindex = $("#" + strColumnID).parent().children().index($("#" + strColumnID));
    var _filtertype;
    var _fieldtype;
    var _filteranchor = strColumnID;
    var _currentFilterSelects = [];
    _filtertype = enumFilterType;
    _fieldtype = enumFieldType;

    /***** Style the header that the menu will be attached to ******/

    $("#" + strColumnID).css({ "cursor": "pointer" });

    /*****************************/

    var _gettableid = function () {
        var table = $("#" + strColumnID).parent();
        while (table.get(0).tagName != "TABLE") { table = $(table).parent(); }
        return table.attr('id');
    };

    this.GetFilterType = function () { return _filtertype; };
    this.GetFieldType = function () { return _fieldtype; };
    // set the anchor element of the filter menu/dialog if it is to be different then the table heading
    // this is to be the element's id
    // by default it is the heading of the column in the table.
    this.ChangeFilterAnchorElement = function (str) { _filteranchor = str; };
    this.GetAnchorElement = function () { return _filteranchor; };

    this.GetCurrentFilterSelects = function () { return _currentFilterSelects; };

    this.GetColumnData = function () {
        var data = [];
        var tableElement = document.getElementById(_gettableid());
        for (var i = 1; i != tableElement.rows.length; i++) {
            var row = tableElement.rows[i];
            var cell = row.cells[_columnindex];
            if ($(row).is(":visible")) {
                if ($.inArray($.trim($(cell).text()), data) < 0) {
                    if ($(cell).text().length <= 0) { if ($.inArray("(blank)", data) < 0) { data.push("(blank)"); } }
                    else {
                        if (_fieldtype == myFilter.FieldType.List) {
                            for (var intTerm = 0; intTerm < $(cell).text().split(',').length; intTerm++) {
                                var strText = $(cell).text().split(',')[intTerm];
                                strText = $.trim(strText);
                                if ($.inArray(strText, data) < 0) { data.push(strText); }
                            }
                        }
                        else { data.push($.trim($(cell).text())); }
                    }
                }
            }

        }
        data.sort();
        return data;
    };

    this.FilterField = function (arraySelected) {
        _currentFilterSelects = arraySelected;
        if (arraySelected.length > 0) {
            var rowsToHide = [];
            var rowsNotToHide = [];
            var tableElement = document.getElementById(_gettableid());
            for (var i = 1; i != tableElement.rows.length; i++) {
                var row = tableElement.rows[i];
                var cell = row.cells[_columnindex];
                if ($(row).is(":visible")) {
                    var blnHideRow = false;
                    for (var indxVal = 0; indxVal < arraySelected.length; indxVal++) {
                        if (_fieldtype == myFilter.FieldType.List) {
                            var blnSplitFieldHideRow = false;
                            if (arraySelected[indxVal] == "(blank)" && $(cell).text().length == 0) {
                                blnHideRow = false;
                                break;
                            }
                            else {
                                //flip the arraySelected with the split
                                for (var iSplFld = 0; iSplFld < $(cell).text().split(',').length; iSplFld++) {
                                    var strText = $(cell).text().split(',')[iSplFld];
                                    strText = $.trim(strText);
                                    if (strText != arraySelected[indxVal]) {
                                        if ($.inArray(i, rowsNotToHide) < 0)
                                            blnSplitFieldHideRow = true;
                                    }
                                    else {
                                        blnSplitFieldHideRow = false;
                                        rowsNotToHide.push(i);
                                        break;
                                    }
                                }
                            }
                            blnHideRow = blnSplitFieldHideRow;
                        }
                        else {
                            if (arraySelected[indxVal] == "(blank)" && $(cell).text().length == 0) {
                                blnHideRow = false;
                                break;
                            }
                            else {
                                if ($(cell).text() != arraySelected[indxVal]) {
                                    if ($.inArray(i, rowsNotToHide) < 0)
                                        blnHideRow = true;
                                }
                                else {
                                    blnHideRow = false;
                                    rowsNotToHide.push(i);
                                    break;
                                }
                            }
                        }
                    }
                    if (blnHideRow)
                        rowsToHide.push($(row));
                }
            }

            for (var ii = 0; ii < rowsToHide.length; ii++) {
                $(rowsToHide[ii]).hide();
            }
        }
        else {
            // Show all rows
            var tableElement = document.getElementById(_gettableid());
            $.each(tableElement.rows, function (inx, value) { $(value).show(); });
        }
    }
}


/***********************/
/* Filter Table Class */
myFilter.FilterTalbe = function (strTableName, strImageDirLocation) {
    this.FilterFields = []
    var _TableName = strTableName;
    var _ImageDirectoryLoaction = strImageDirLocation;
    var that = this;

    //Build loading dlg div
    var buildLoaddlg = function () {
        var loadingdlg = $("<div>", { id: strTableName + "_loading" });
        var tableElement = document.getElementById(strTableName);
        var headrow = $(tableElement.rows[0]);
        loadingdlg.addClass("divLoadingDlg");
        loadingdlg.css({ "top": (headrow.offset().top + headrow.outerHeight()) + "px", "width": headrow.outerWidth() + "px" });

        var tblLoading = $("<table>", { cellpadding: "0", cellspacing: "0" });
        var trLoading = $("<tr>");
        var tdLoadingLeft = $("<td>").append($("<img>", { src: strImageDirLocation + "left_loader_curver.gif" })).css({ "width": "11px" });
        var tdLoadingCenter = $("<td>", { text: "Loading..." }).css({ "text-align": "center", "vertical-align": "middle", "background-color": "#E0E0E0" });
        //var imgLoadingSpnr = $("<img>", { src: strImageDirLocation + "little_loader_black_gray.gif" });
        //imgLoadingSpnr.prependTo(tdLoadingCenter);
        var tdLoadingRight = $("<td>").append($("<img>", { src: strImageDirLocation + "right_loader_curver.gif" })).css({ "width": "11px" });
        tdLoadingLeft.appendTo(trLoading);
        tdLoadingCenter.appendTo(trLoading);
        tdLoadingRight.appendTo(trLoading);
        trLoading.appendTo(tblLoading);
        tblLoading.appendTo(loadingdlg);


        loadingdlg.appendTo($("form"));
        loadingdlg.hide();
    }


    function hideFilterMenus(displayedID) {
        $.each(that.FilterFields, function (index, value) {
            if (value.GetAnchorElement() + "_divSortMenu" != displayedID + "_divSortMenu") {
                $("#" + value.GetAnchorElement() + "_divSortMenu").hide();
            }
        });
    };

    function BuildSortDlg(field) {
        var divSortDlg = $("<div>", { id: field.GetAnchorElement() + "_divSortMenu" }).addClass("divfilterDlg");
        var divClearFilter = $("<div>", { text: "Clear " + $("#" + field.GetAnchorElement()).text() + " Filter" }).addClass("clearFilterMultiSelect");
        var imgClearX = $("<img>", { src: strImageDirLocation + "clearfilter.gif" }).css({ "padding-right": "4px" });
        imgClearX.prependTo(divClearFilter);
        divClearFilter.appendTo(divSortDlg);
        var divSortList = BuildSortListWndw(field);
        divSortList.appendTo(divSortDlg);

        divClearFilter.click(function () {
            $("#" + dlgname).hide();
            $("body").unbind("click");
            if ($("input[name=" + field.GetAnchorElement() + "_list]:checked").length != 0) {
                $("#" + _TableName + "_loading").show();
                $("#" + field.GetAnchorElement() + "_arrowimg").attr("src", strImageDirLocation + "downtriangle.gif");
                var doWork = function () {
                    $("input[name=" + field.GetAnchorElement() + "_list]").attr('checked', false);
                    //clear current filter on the current field
                    field.FilterField([]);

                    //loop the rest of the fields to check if they have anything selected
                    //if they do refilter the table based on those filters
                    for (var iField = 0; iField < that.FilterFields.length; iField++) {
                        var fld = that.FilterFields[iField];
                        var arrayCurrentSelect = fld.GetCurrentFilterSelects();
                        if (fld.GetCurrentFilterSelects().length != 0)
                            fld.FilterField(fld.GetCurrentFilterSelects());
                    }

                    for (var iField = 0; iField < that.FilterFields.length; iField++) {
                        var fld = that.FilterFields[iField];
                        var arrayCurrentSelect = fld.GetCurrentFilterSelects();
                        ///REBUILD FILTER LIST IN EACH DLG HERE
                        var divCurrentListCnt = $("#" + fld.GetAnchorElement() + "_divListCnt");
                        var divNewListCnt = BuildSortListWndw(fld);
                        //append new list above old list
                        divCurrentListCnt.before(divNewListCnt);
                        //remove old list
                        divCurrentListCnt.html("");
                        divCurrentListCnt.remove();
                        //reset the selected filters on thew new list
                        $.each($("input[name=" + fld.GetAnchorElement() + "_list]"), function (echIndex, echValue) {
                            for (var iCurVals = 0; iCurVals < arrayCurrentSelect.length; iCurVals++) {
                                if ($(echValue).val() == arrayCurrentSelect[iCurVals]) {
                                    $(echValue).attr('checked', true);
                                }
                            }
                        });
                    }
                    $("#" + _TableName + "_loading").hide();
                }
                //this is done to allow the ui to refresh and 
                //the loading spinner to be displayed
                setTimeout(doWork, 100);
            }

        });
        var divinputs = $("<div>").css({ "text-align": "right" });
        var inputOK = $("<input>", { type: "button", value: "OK" });
        var inputCancel = $("<input>", { type: "button", value: "Cancel" });
        var dlgname = field.GetAnchorElement() + "_divSortMenu";
        inputOK.click(function () {
            //show loading dlg
            $("#" + _TableName + "_loading").show();
            //hide dialog
            $("#" + dlgname).hide();
            $("body").unbind("click");

            var doWork = function () {
                var arraySelected = [];
                $.each($("input[name=" + field.GetAnchorElement() + "_list]:checked"), function (indx, val) {
                    arraySelected.push($(val).val());
                });

                if (arraySelected.length > 0) {
                    $("#" + field.GetAnchorElement() + "_arrowimg").attr("src", strImageDirLocation + "filter.gif");
                }

                field.FilterField(arraySelected);

                //loop the rest of the fields to check if they have anything selected
                //if they do refilter the table based on those filters
                for (var iField = 0; iField < that.FilterFields.length; iField++) {
                    var fld = that.FilterFields[iField];
                    var arrayCurrentSelect = fld.GetCurrentFilterSelects();
                    if (fld.GetCurrentFilterSelects().length != 0)
                        fld.FilterField(fld.GetCurrentFilterSelects());
                }

                for (var iField = 0; iField < that.FilterFields.length; iField++) {
                    var fld = that.FilterFields[iField];
                    var arrayCurrentSelect = fld.GetCurrentFilterSelects();
                    ///REBUILD FILTER LIST IN EACH DLG HERE
                    var divCurrentListCnt = $("#" + fld.GetAnchorElement() + "_divListCnt");
                    var divNewListCnt = BuildSortListWndw(fld);
                    //append new list above old list
                    divCurrentListCnt.before(divNewListCnt);
                    //remove old list
                    divCurrentListCnt.remove();
                    //reset the selected filters on thew new list
                    $.each($("input[name=" + fld.GetAnchorElement() + "_list]"), function (echIndex, echValue) {
                        for (var iCurVals = 0; iCurVals < arrayCurrentSelect.length; iCurVals++) {
                            if ($(echValue).val() == arrayCurrentSelect[iCurVals]) {
                                $(echValue).attr('checked', true);
                            }
                        }
                    });
                }
                $("#" + _TableName + "_loading").hide();
            }
            //this is done to allow the ui to refresh and 
            //the loading spinner to be displayed
            setTimeout(doWork, 0);
        });
        inputCancel.click(function () { $("#" + dlgname).hide(); $("body").unbind("click"); });
        inputOK.appendTo(divinputs);
        inputCancel.appendTo(divinputs);
        divinputs.appendTo(divSortDlg);
        return divSortDlg;
    };

    function BuildSortListWndw(field) {
        var divSortList = $("<div>", { id: field.GetAnchorElement() + "_divListCnt" }).addClass("divfilterList");
        var data = field.GetColumnData();
        for (var i = 0; i < data.length; i++) {
            ///// Build list
            var ln = $("<div>", { id: field.GetAnchorElement() + "_divFilterSelect_" + i });
            var label = $("<label>", { text: data[i] });
            var select = $("<input>", { type: "checkbox", name: field.GetAnchorElement() + "_list", value: data[i] });
            select.appendTo(ln);
            label.appendTo(ln);
            ln.appendTo(divSortList);
        }
        return divSortList;
    }

    function BuildTableToolbar() {
        var tblToolBar = $("<table>", { cellpadding: "0", cellspacing: "0" }).css({ "width": $("#" + _TableName).outerWidth() + "px" }).addClass("tblFilterToolBar");
        var trToolBarRow = $("<tr>");
        var tdToolbarCellLeft = $("<td>").text("Click on the columns with arrows to filter results.");
        var tdToolbarCellRight = $("<td>");

        tdToolbarCellRight.css({ "vertical-align": "middle", "text-align": "right" });

        var divClearFilter;
        if ($.browser.msie && $.browser.version == "7.0") {
            divClearFilter = $("<div>", { id: _TableName + "_divClearFilter", html: "<p>Clear All Filters</p>" }).addClass("divClearFilter");
            $("#" + _TableName + "_divClearFilter > p").css({ "vertical-align": "middle" });
        }
        else {
            divClearFilter = $("<div>", { id: _TableName + "_divClearFilter", html: "<div>Clear All Filters</div>" }).addClass("divClearFilter");
        }
        divClearFilter.css({ "display": "inline-table" });
        divClearFilter.appendTo(tdToolbarCellRight);
        divClearFilter.click(function () {
            $("#" + _TableName + "_loading").show();
            for (var iField = 0; iField < that.FilterFields.length; iField++) {
                var fld = that.FilterFields[iField];
                $("input[name=" + fld.GetAnchorElement() + "_list]").attr('checked', false);
                fld.FilterField([]);
                var divCurrentListCnt = $("#" + fld.GetAnchorElement() + "_divListCnt");
                var divNewListCnt = BuildSortListWndw(fld);
                //append new list above old list
                divCurrentListCnt.before(divNewListCnt);
                //remove old list
                divCurrentListCnt.remove();
                $("#" + fld.GetAnchorElement() + "_arrowimg").attr("src", strImageDirLocation + "downtriangle.gif");
            }
            $("#" + _TableName + "_loading").hide();
        });

        tdToolbarCellLeft.appendTo(trToolBarRow);
        tdToolbarCellRight.appendTo(trToolBarRow);
        trToolBarRow.appendTo(tblToolBar);

        return tblToolBar;
    }

    this.BuildFilters = function () {
        //create and display tool bar 

        $("#" + _TableName).before(BuildTableToolbar());
        buildLoaddlg(); //load this after the toolbar is loaded otherwise it will show up in the wrong place
        for (var cnt = 0; cnt < this.FilterFields.length; cnt++) {
            var field = this.FilterFields[cnt];
            $("#" + field.GetAnchorElement()).append($("<img>", { id: field.GetAnchorElement() + "_arrowimg", alt: "arrow", src: strImageDirLocation + "downtriangle.gif" }));
            switch (field.GetFilterType()) {
                case myFilter.FilterType.MulitSelect:
                    var dlg = BuildSortDlg(field);

                    //dlg.css({ "left": $("#" + field.GetAnchorElement()).offset().left + "px", "top": ($("#" + field.GetAnchorElement()).offset().top + $("#" + field.GetAnchorElement()).outerHeight()) + "px", "min-width": $("#" + field.GetAnchorElement()).outerWidth() + "px" });
                    dlg.css({ "left": $("#" + field.GetAnchorElement()).offset().left + "px", "top": ($("#" + field.GetAnchorElement()).offset().top + $("#" + field.GetAnchorElement()).outerHeight()) + "px" });
                    dlg.hide();
                    $("#" + field.GetAnchorElement()).click(function (eventTarget) {

                        var id;
                        if (eventTarget.target) {
                            if ($("#" + eventTarget.target.id).get(0).tagName == "IMG") {
                                id = $("#" + eventTarget.target.id).parent().attr("id");
                            }
                            else {
                                id = eventTarget.target.id;
                            }
                        }
                        else {
                            if ($("#" + eventTarget.srcElement.id).get(0).tagName == "IMG") {
                                id = $("#" + eventTarget.srcElement.id).parent().attr("id");
                            }
                            else {
                                id = eventTarget.srcElement.id;
                            }
                        }

                        var elementTriger;
                        if (eventTarget.target) elementTriger = eventTarget.target;
                        else elementTriger = event.srcElement;

                        if ($(elementTriger).parents("#" + id + "_divSortMenu").length <= 0
                        	&& $(elementTriger).attr("id") != id + "_divSortMenu") {
                            hideFilterMenus(id);
                            $("body").unbind("click");
                        }
                        //loop through fields and hide displayed filters menus
                        $("body").click(function (e) {
                            var t;
                            if (e.target) t = e.target;
                            else t = e.srcElement;
                            if ($(t).attr("id") != id && $(t).parent().attr("id") != id) {
                                if ($(t).parents("#" + id + "_divSortMenu").length <= 0
                                && $(t).attr("id") != id + "_divSortMenu") {
                                    hideFilterMenus("");    //hide all menus
                                    $("body").unbind("click");
                                }
                            }
                        });
                        if ($("#" + id + "_divSortMenu").is(":visible")) {
                            $("#" + id + "_divSortMenu").hide();
                            $("body").unbind("click");
                        }
                        else {
                            $("#" + id + "_divSortMenu").show();
                        }
                    });

                    dlg.appendTo($("form"));
                    break;
                case myFilter.FilterType.Menu:
                    //build menu 
                    var divSortMenu = $("<div>", { id: field.GetAnchorElement() + "_divSortMenu" }).addClass("divSortMenu");
                    divSortMenu.css({ "left": $("#" + field.GetAnchorElement()).offset().left + "px", "top": ($("#" + field.GetAnchorElement()).offset().top + $("#" + field.GetAnchorElement()).outerHeight()) + "px", "min-width": $("#" + field.GetAnchorElement()).outerWidth() + "px" });
                    var data = field.GetColumnData();
                    for (var i = 0; i < data.length; i++) {
                        var divSelection = $("<div>", { text: data[i] }).addClass("menuSelection");
                        //onclick events when user picks selection
                        divSelection.click(function (eventSelect) {
                            var idSelectParent;
                            if (eventSelect.target) {
                                idSelectParent = $(eventSelect.target).parent().attr("id");
                            }
                            else {
                                idSelectParent = $(eventSelect.srcElement).parent().attr("id");
                            }
                            $("#" + idSelectParent).hide();
                            $("body").unbind('click');

                        });
                        divSelection.appendTo(divSortMenu);
                    }
                    divSortMenu.hide();
                    //on click function
                    $("#" + field.GetAnchorElement()).click(function (eventTarget) {
                        var id;
                        if (eventTarget.target) id = eventTarget.target.id;
                        else id = event.srcElement.id;
                        //loop through fields and hide displayed filters menus
                        //hideFilterMenus(id);
                        $("body").click(function (e) {
                            var t;
                            if (e.target) t = e.target;
                            else t = e.srcElement;
                            hideFilterMenus(t.id);
                        });
                        if ($("#" + id + "_divSortMenu").is(":visible"))
                            $("#" + id + "_divSortMenu").hide();
                        else
                            $("#" + id + "_divSortMenu").show();
                    });
                    divSortMenu.appendTo($("form"));
                    break;
            }
        }
    }
}

myFilter.FilterTalbe.prototype.AddField = function (field) {
    if (field instanceof myFilter.FilterField) {
        this.FilterFields.push(field);
    }
    else {
        throw "Wrong type. Function requires type of FilterField.";
    }
}

/*********************/
/*********** End -  Filter Table  ***********/

/* Function for showing and hiding tabs on search page */
/* NOTE: the id of the div must begin with divTab */
function ShowTab(strTabID) {
    $("[id^='divTab']:not(#" + strTabID + ")").removeClass("showtab").addClass("hiddentab");
    $("#" + strTabID).addClass("showtab");
    if (strTabID == "divTabAntibodyResults")
        window.location.hash = "#Antibodies";
    else if (strTabID == "divTabTargetResults")
        window.location.hash = "#Targets";
    else if (strTabID == "divTabTMAResults")
        window.location.hash = "#TMAs";
    else if (strTabID == "divTabPeptideResults")
        window.location.hash = "#Peptides";
}
