function ShowLoadingScreen() {
    ShowDynamicModal("<h2>Retrieving search results. Please wait...</h2>", false);
}
function HideLoadingScreen() {
    HideDynamicModal();
}
function CommunitySearchParameterHelper() {
    var getCommunitySearchCriteria = function () {
        var cr = {
            StartRowID: 0,
            EndRowID: CalcCurrentPageSizeBasedOnClientWidth(),
            SortBy: 'Name',
            SortDirection: null,
            RequestID: GISPlanning_MapUtilities_GUID(),
            InputParameters: null,
            commType: -1, //Note this means it does not differntiate
            popmin: $("#min_Population").val(),
            popmax: $("#max_Population").val(),
            uermin: $("#min_Unemployment").val(),
            uermax: $("#max_Unemployment").val(),
            edfac: $("#educationType option:selected").val(),
            airport: $("#airportType option:selected").val(),
            lfsmin: $("#min_LaborSize").val(),
            lfsmax: $("#max_LaborSize").val(),
            bdpmin: $("#min_Bachelors").val(),
            bdpmax: $("#max_Bachelors").val(),
            hspMin: $("#min_HighSchool").val(),
            hspMax: $("#max_HighSchool").val(),
            hhimin: $("#min_HHIncome").val(),
            hhimax: $("#max_HHIncome").val(),
            medmin: $("#min_MedianAge").val(),
            medmax: $("#max_MedianAge").val(),
            dintMin: $("#min_DistanceToInterstate").val(),
            dintMax: $("#max_DistanceToInterstate").val(),
            drailMin: $("#min_DistanceToRail").val(),
            drailMax: $("#max_DistanceToRail").val(),
            yedumin: $("#min_YoungEducated").val(),
            yedumax: $("#max_YoungEducated").val(),
            homeMin: $("#min_HomeValue").val(),
            homeMax: $("#max_HomeValue").val(),
            blupctmin: $("#min_BlueCollar").val(),
            blupctmax: $("#max_BlueCollar").val(),
            whtpctmin: $("#min_WhiteCollar").val(),
            whtpctmax: $("#max_WhiteCollar").val(),
            travMin: $("#min_TravelTime").val(),
            travMax: $("#max_TravelTime").val(),
            entzone: $("#chkIncentive:checked").length > 0 ? 1 : 0,
            SubsetToken: _GISP_Theme,
            GeoEntities: GetSelectedGeoEntities("COMMUNITIES"),
            RegionsList: GetSelectedRegions("COMMUNITIES"),
            SessionID: _JavascriptSessionID
        };
        return { parameters: cr };
    };
    var searchCommunities = function () {
        var searchCriteria = getCommunitySearchCriteria();
        _SSR.ClearCurrentReportOverlays();
        _SSR.ClearOtherReportOverlays();
        _SSR._CurrentViewClass = "RESULTS";


        ShowLoadingScreen();

        //send to service
        CallCommunitySearchService(searchCriteria.parameters, { successCallback: SearchSuccess });
    };
    return {
        GetParameters: function () { return getCommunitySearchCriteria(); },
        SendData: function (pAdditionalSuccessCallback, pAdditionalErrorCallback) { searchCommunities(pAdditionalSuccessCallback, pAdditionalErrorCallback); }
    };
}



function BusinessSearchParameterHelper() {
    var me = this;
    this._getClassList = function () {
        var myClasses = [];
        $("#business_classes .selected").each(
            function () {
                myClasses.push($(this).attr("naics_class"));
            }
        );

        return myClasses.join(',');
    };

    this._getTypeList = function () {
        var myClasses = [];
        $("#business_types .selected").each(
            function () {
                myClasses.push($(this).attr("business_type"));
            }
        );

        return myClasses.join(',');
    };

    this._getNAICSList = function () {
        var myNAICS = [];
        $("#business_NAICS .selected").each(
            function () {
                myNAICS.push($(this).attr("business_NAICS"));

            }
        );

        return myNAICS.join(',');
    };
    this._getSearchCriteria = function () {
        var _params = {
            Radius: -1, //Not used in this search
            Lat: map.getCenter().lat(),
            Lng: map.getCenter().lng(),
            NAICS_Classes: me._getClassList(),
            NAICS_Codes: me._getNAICSList(),
            Clusters: "",
            Name: $("#business_BusinessName").val(),
            Address: $("#business_Address").val(),
            RevenueMin: $("#business_AnnualRevenue").val() !== "" ? $("#business_AnnualRevenue").val() : 0,
            RevenueMax: $("#business_AnnualRevenueMax").val() !== "" ? $("#business_AnnualRevenueMax").val() : 100000000000,
            EmployeesMin: $("#business_NumEmployees").val() !== "" ? $("#business_NumEmployees").val() : 0,
            EmployeesMax: $("#business_NumEmployeesMax").val() !== "" ? $("#business_NumEmployeesMax").val() : 100000000,
            PolyAreaPoints: $("#hfldPolyPoints").val(),
            GeoEntities: GetSelectedGeoEntities("Business"),
            StartRowID: 0,
            EndRowID: CalcCurrentPageSizeBasedOnClientWidth(),
            RegionsList: GetSelectedRegions("Businesses"),
            SortBy: "",
            YearsMin: $("#business_YearsMin").val() !== "" ? $("#business_YearsMin").val() : 0,
            YearsMax: $("#business_YearsMax").val() !== "" ? $("#business_YearsMax").val() : 100,
            BusinessTypes: me._getTypeList(),
            LifeCycleTypes: "",
            SubsetToken: _GISP_Theme,
            RequestID: GISPlanning_MapUtilities_GUID()
        };

        // run callbacks that can alter the search parameters.
        if (typeof (window._SearchWindowParameterCallbacks) !== "undefined" && window._SearchWindowParameterCallbacks !== null) {
            var callbackFunctionLen = window._SearchWindowParameterCallbacks.length;
            var i = 0;
            for (i = 0; i < callbackFunctionLen; i++) {
                var fn = window._SearchWindowParameterCallbacks[i];
                _params = fn(_params);
            }
        }


        return { parameters: _params };
    };        //end get SearchCriteria


    this._search = function () {

        var searchCriteria = me._getSearchCriteria();
        _SSR.ClearCurrentReportOverlays();
        _SSR.ClearOtherReportOverlays();
        _SSR._CurrentViewClass = "RESULTS";

        ShowLoadingScreen();

        //send to service
        CallBusinessSearchService(searchCriteria.parameters, { successCallback: SearchSuccess });

    };   //end search

    return new function () {
        this.GetParameters = me._getSearchCriteria;
        this.SendData = me._search;
    }; //end constructor
} //end class



function SearchParameterHelper(pArray, pContainerClass, pIsBuilding, pSubsetToken) {
    function searchPrep(pWhatSearch, pIsBuilding) {
        _SSR.ClearCurrentReportOverlays();
        _SSR.ClearOtherReportOverlays();
        _SSR._CurrentViewClass = "RESULTS";


        var parameters = GetSearchParameters(pWhatSearch);
        parameters.IsBuilding = pIsBuilding;

        return parameters;
    }

    function sendSearchData(pParameters) {
        //Show loading modal
        ShowLoadingScreen();
        //send to service
        if (pParameters.IsBuilding) {
            CallBuildingSearchService(pParameters,
                    {
                        successCallback: function (data) {
                            SearchSuccess(data);
                            HideLoadingScreen();
                            _searchWindow.Hide();
                        },
                        failureCallback: function () {
                            HideLoadingScreen();
                            _searchWindow.Hide();
                        }
                    }//end pOptions
                );
        } //end if is building
        else {
            CallSiteSearchService(pParameters,
                   {
                       successCallback: function (data) {
                           SearchSuccess(data);
                           HideLoadingScreen();
                           _searchWindow.Hide();
                       },
                       failureCallback: function () {
                           HideLoadingScreen();
                           _searchWindow.Hide();
                       }
                   }//end pOptions
                );
        } //end if site
    }

    return {
        dataPackage: searchPrep(pContainerClass.toUpperCase(), pIsBuilding),
        SendData: function () { sendSearchData(this.dataPackage); }
    };
}
function SearchWindow() {
    var debug = false;

    function log(msg) {
        if (debug) {
            console.log(msg);
        }
    }
    function profilestart() {
        if (debug) {
            console.profile();
        }
    }
    function profileend() {
        if (debug) {
            console.profileEnd();
        }
    }


    var $searchWindow = $("#search-window");
    var $searchWindowOverlay = $("#search-window-overlay");
    var defaultValues = [];
    var currentContainerClass = "";
    var $leftColumn = null;
    var $rightColumn = null;
    var $searchButton = null;
    var subsetToken = null;

    function GatherSearchInputs(pCallback, pAdditionalQuery) {
        var $searchInputs = null;
        if (pAdditionalQuery !== undefined) {
            $searchInputs = $searchWindow.find(pAdditionalQuery).find(".searchInput");
        }
        else {
            $searchInputs = $searchWindow.find(".searchInput");
        }
        $searchInputs.each(function (key, val) {
            var theValue = null;
            if ($(this).hasClass("checkMe")) {
                if ($(this).hasClass("propertytype")) {
                    theValue = {
                        name: $(this).attr("name"),
                        id: $(this).find("b").html(),
                        value: $(this).hasClass("checked"),
                        type: "propertytype",
                        elem: $(this)
                    };
                    pCallback(theValue);
                }
                else if ($(this).hasClass("attribute")) {
                    theValue = {
                        name: $(this).attr("name"),
                        id: $(this).find("b").html(),
                        value: $(this).hasClass("checked"),
                        type: "attribute",
                        elem: $(this)
                    };
                    pCallback(theValue);
                }
            }
            else if ($(this).hasClass("text")) {
                var $this = $(this);
                theValue = {
                    name: $this.attr("name"),
                    id: $this.attr("id"),
                    value: $this.val(),
                    type: "text",
                    elem: $this
                };
                theValue.value = SanitizeSearchValueNumber(theValue.value, $this);
                pCallback(theValue);
            }

        });
    }


    //Category Click
    function SetupCategoryClick() {
        $leftColumn.find(".container").click(function (e) {
            currentContainerClass = $(this).attr("name");
            // Remove "active" from all left column categories
            $(".container").removeClass("active");
            $rightColumn.find("> li").removeClass("active");

            $searchButton.attr("class", currentContainerClass);

            $(this).addClass("active");

            $rightColumn.find("> li." + currentContainerClass).addClass("active");

            _SSR._CurrentViewType = currentContainerClass.toUpperCase();

            //This is a bit of hack, but we need to determine if a geography list needs to be displayed and position it correctly if we do
            var myActiveSearch = $rightColumn.find("> li." + currentContainerClass);
            var myGeographySection = $("li.Geography", myActiveSearch);
            var isExpanded = myGeographySection.hasClass("expanded");
            if (isExpanded) {
                //find the active tab
                var myActiveTab = $(".tab.active", myGeographySection);
                var myGeoType = myActiveTab.attr("contentclass");
                LoadGeoEntities(myGeoType.toUpperCase(), myGeoType, currentContainerClass.toUpperCase());
            }
            else {
                HideGeoList();
            }

        });
    }

    function CleanTextboxHints() {
        $(".searchInput.text").each(function () {
            if ($(this).val() == $(this).attr("title")) {
                $(this).val("");
            }
        });
    }

    function SetupSearchButtonClick() {
        $searchButton.click(function (e) {
            var parameters = null;
            var helper = null;
            CleanTextboxHints();
            _SSR.ClearCurrentReportOverlays();
            _SSR.ClearOtherReportOverlays();

            var searchType = currentContainerClass.toUpperCase();
            if (searchType == "SITES") {
                parameters = [];
                GatherSearchInputs(function (pValue) { parameters.push(pValue); }, ".Sites");
                helper = new SearchParameterHelper(parameters, currentContainerClass, false, subsetToken);
                helper.SendData();
            }
            else if (searchType == "BUILDINGS") {
                parameters = [];
                GatherSearchInputs(function (pValue) { parameters.push(pValue); }, ".Buildings");
                helper = new SearchParameterHelper(parameters, currentContainerClass, true, subsetToken);
                helper.SendData();
            }
            else if (searchType == "COMMUNITIES") {
                helper = new CommunitySearchParameterHelper();
                helper.SendData();
            }
            else if (searchType == "BUSINESSES") {
                helper = new BusinessSearchParameterHelper();
                helper.SendData();
            }
        });
    }

    //Section Click
    function SetupSectionClick() {
        $rightColumn.find(".sectionHead").click(function (e) {
            var $section = $(this).closest(".section");
            if ($section.hasClass("expanded")) {
                $section.removeClass("expanded");
                $section.addClass("collapsed");
                if ($section.hasClass("Geography")) {
                    HideGeoList();
                }
                else {
                    //the geo tab will could need to be ropositioned if this section was above the geography section
                    PositionCurrentGeoList();
                }
            }
            else {
                $section.removeClass("collapsed");
                $section.addClass("expanded");
                //click the active tab. This fires the events associated with clicking it.
                $(".tab.active", $section).click();

                //the geo tab will could need to be ropositioned if this section was above the geography section
                PositionCurrentGeoList();
            }
            return false;
        });
    }

    function HandleBusinessTabClicks(pContent) {

        var $businessTypesUL = $("#business_types ul", pContent);
        var $businessClassesUL = $("#business_classes ul", pContent);
        var $businessNAICSUL = $("#business_NAICS ul", pContent);

        //setup the business types
        var myBizTypeHandler = function (pTypes) {
            var $myUL = $businessTypesUL;
            //clear existing
            $myUL.empty();

            //add new
            for (var i = 0; i < pTypes.length; i++) {
                var myHtml = "<li class='business_type' business_type='" + pTypes[i].BusinessTypeCode + "'>";
                myHtml += "<span>" + pTypes[i].BusinessTypeDescription + "</span>";
                myHtml += "</li>";
                $myUL.append(myHtml);
            }

            //add the click handler
            $("#business_types li", pContent).click(function () { $(this).toggleClass("selected"); });
        };
        if ($businessTypesUL.find("li").length === 0) {
            //No longer getting BusinessTypes
            //GetAllBusinessTypes(myBizTypeHandler);
        }

        //setup the business classes
        var myBizClassHandler = function (pClasses) {
            var $myUL = $businessClassesUL;
            //clear existing
            $myUL.empty();

            //add new
            for (var i = 0; i < pClasses.length; i++) {
                var myHtml = "<li class='naics_class' naics_class='" + pClasses[i].Class + "'>";
                myHtml += "<span>" + pClasses[i].ClassDesc + "</span>";
                myHtml += "</li>";
                $myUL.append(myHtml);
            }

            //add the click handler
            $("#business_classes li", pContent).click(function () { $(this).toggleClass("selected"); });
        };
        if ($businessClassesUL.find("li").length === 0) {
            GetAllNaicsClasses(myBizClassHandler);
        }

        //setup the business NAICS
        var myBizNAICSHandler = function (pNAICS) {
            var $myUL = $businessNAICSUL;
            //clear existing
            $myUL.empty();

            //add new
            for (var i = 0; i < pNAICS.length; i++) {
                var myHtml = "<li class='naics_class' business_NAICS='" + pNAICS[i].NAICS + "'>";
                myHtml += "<span>" + pNAICS[i].NAICSDesc + "</span>";
                myHtml += "</li>";
                $myUL.append(myHtml);
            }

            //add the click handler
            $("#business_NAICS li", pContent).click(function () {
                $(this).toggleClass("selected");
            });
        };
        if ($businessNAICSUL.find("li").length === 0) {
            GetAllNAICS(myBizNAICSHandler);
        }

    }



    function HandleGeographyTabClicks(pTab, pContentClass, pContent) {
        var content = pContent;

        if (pTab.closest(".Geography").length > 0) {
            var promptInit = content.find("> div." + pContentClass).find(".to li:not(.prompt)").length === 0;

            pTab.attr("isGeography", "1");
            var container = pTab.closest("ul.sections").closest("li");

            var geographysCategory = $.trim(container.attr("class").replace("active", ""));

            if (pContentClass == "cities") {
                LoadGeoEntities("CITIES", "City", geographysCategory);
                if (!promptInit)
                    InitializePromptInputs($("#" + geographysCategory.toLowerCase() + "_cities")[0]);
            }
            else if (pContentClass == "counties") {
                LoadGeoEntities("COUNTIES", "County", geographysCategory);
                if (!promptInit)
                    InitializePromptInputs($("#" + geographysCategory.toLowerCase() + "_counties")[0]);
            }
            else if (pContentClass == "msas") {
                LoadGeoEntities("MSAS", "MSA", geographysCategory);
                if (!promptInit)
                    InitializePromptInputs($("#" + geographysCategory.toLowerCase() + "_msas")[0]);
            }
            else if (pContentClass == "regions") {
                LoadGeoEntities("REGIONS", "Region", geographysCategory);
                if (!promptInit)
                    InitializePromptInputs($("#" + geographysCategory.toLowerCase() + "_regions")[0]);
            }
            // the following never happen, to my knowledge
            else if (pContentClass == "subregion") {
                LoadGeoEntities("SUBREGION", "SubRegion", geographysCategory);
                if (!promptInit)
                    InitializePromptInputs($("#" + geographysCategory.toLowerCase() + "_subregion")[0]);
            }
            else if (pContentClass == "neighborhood") {
                LoadGeoEntities("NEIGHBORHOOD", "Neighborhood", geographysCategory);
                if (!promptInit)
                    InitializePromptInputs($("#" + geographysCategory.toLowerCase() + "_neighborhood")[0]);
            }
            else if (pContentClass == "incentivezone") {
                LoadGeoEntities("INCENTIVEZONE", "IncentiveZone", geographysCategory);
                if (!promptInit)
                    InitializePromptInputs($("#" + geographysCategory.toLowerCase() + "_incentivezone")[0]);
            }
            else if (pContentClass == "custom") {
                HideGeoList();
            }

        }
    }

    

    function ClickAllIfFirstClick($pTabContent) {
        if ($pTabContent.attr("firstclick") === undefined || $pTabContent.attr("firstclick") == "1") {
            $pTabContent.attr("firstclick", "0");
            $pTabContent.find(".all").click();
        }
    }

    function SetTabAndContentAsActive($pTab, $pContent) {
        $pTab.closest(".tabs").find(".tab").removeClass("active");
        $pTab.addClass("active");
        $pContent.find(">div").removeClass("active");
        var tabContentClass = $pTab.attr("contentclass");
        var $tabContent = $pContent.find(">div." + tabContentClass);
        $tabContent.addClass("active");
    }

    function SetTabAndContentAsActiveClickAll($pTab, $pContent) {
        SetTabAndContentAsActive($pTab, $pContent);
        var tabContentClass = $pTab.attr("contentclass");
        var $tabContent = $pContent.find(">div." + tabContentClass);
        // Removed PER CUSTOMER REQEST ClickAllIfFirstClick($tabContent);
    }

    function AddModifyClickToSearchInputs() {
        $(".searchInput").click(function () {
            var $currentTab = $(this).parents(".section:first").find(".tab.active");
            $currentTab.addClass("modified");

            if ($(this).closest("ul").find(".checkMe.checked").length === 0) {
                //no checkboxes are checked, set tab as unmodified
                $currentTab.removeClass("modified");
            }

        });
    }

    function AddHintsToTextboxes() {
        $(".searchInput.text").hint("watermark");
    }

    //Tab Click
    function SetupTabClick() {
        $rightColumn.find(".tab").click(function (e) {
            var $theTab = $(this);
            var tabContentClass = $theTab.attr("contentclass");
            var $section = $theTab.closest(".section");
            var $content = $section.find(".content");

            SetTabAndContentAsActiveClickAll($theTab, $content);

            $content.find("> div." + tabContentClass).addClass("active");

            if (!$section.hasClass("expanded")) {
                $section.removeClass("collapsed").addClass("expanded");
            }

            //Call this on all tab clicks as the layout could force a change
            PositionCurrentGeoList();

            HandleTabAdditionalFunctionallity($theTab, tabContentClass, $content);
            return false;
        });
    }

    //Open the first tab of each section.
    function OpenTheFirstTabs() {
        $rightColumn.find("ul.tabs").each(function () {
            var $tab = $(this).find("li.tab:first");
            var tabContentClass = $tab.attr("contentclass");
            var $section = $tab.closest(".section");
            var $content = $section.find(".content");

            //I am not sure why we have to do this, seems to be causing extra work.
            //HandleTabAdditionalFunctionallity($tab, tabContentClass, $content);

            //if only one tab in the section, hide it.    
            if ($(this).find(".tab").length == 1) {
                $(this).find(".tab").hide(); //todo: add class to hide it.
            }

            SetTabAndContentAsActive($tab, $content);
        });
    }


    function HandleTabAdditionalFunctionallity(pTab, pContentClass, pContent) {
        
        setTimeout(function () {
            //Todo add prechecking here before sending all code to this handler
            HandleGeographyTabClicks(pTab, pContentClass, pContent);

            //If this is the businessTab then setup that as well
            if (pContentClass == "advanced" && pTab.closest(".Businesses").length > 0) {
                HandleBusinessTabClicks(pContent);
            }

        }, 5);

    }


    function ShowOverlay() {
        $searchWindowOverlay.css("z-index", $searchWindow.parent().css("z-index") - 1);
        $searchWindowOverlay.css("display", "block");
    }

    function HideOverlay() {
        $searchWindowOverlay.css("display", "none");
    }

    function SwitchToCategory(pWhatSearch) {
        pWhatSearch = pWhatSearch.toLowerCase();
        $leftColumn.find(".container." + pWhatSearch).click();
    }

    function Show(pWhatSearch) {
        if (_Initialized) {

            ShowOverlay();
            $searchWindow.show();
            SwitchToCategory(pWhatSearch);
            AddHintsToTextboxes();
        } //end if initialized
        else {
            Init(_GISP_Theme);
            Show(pWhatSearch);
        }
    }

    function Hide() {
        $(".container").removeClass("active");
        //$rightColumn.find("> li").removeClass("active");
        $searchWindow.hide();
        HideOverlay();
        HideGeoList();
    }

    function Reset() {
        try {
            $.each(defaultValues, function (key, val) {
                if (val.type == "attribute" || val.type == "propertytype") {
                    if (val.value) {
                        val.elem.addClass("checked");
                    }
                    else {
                        val.elem.removeClass("checked");
                    }
                }
                else if (val.type == "text") {
                    val.elem.val(val.value);
                }
            });
            $(".content>div").attr("firstclick", "1");
            $(".tabs .tab").removeClass("modified").removeClass("active");
            //reset geography lists
            $(".to ul :not(li.prompt)").remove();
            //reset the filter tools (circle/polygon drawer) if the are there (can be a timing issue)
            try {
                _mapBar.CircleDrawer().Stop();
            } catch (err) { } //do nothing
            try {
                _mapBar.PolygonDrawer().Stop();
            } catch (err) { } //do nothing
            //clear the poly points
            $("#hfldPolyPoints").val("");
            // reset all forsale / forlease
            $(".Buildings input:radio[name=FinancialStatusBuildings][value=-1], .Sites input:radio[name=FinancialStatusSites][value=-1]").each(function () { this.checked = 'checked'; });
            OpenTheFirstTabs();
            //todo: reload preferences (i.e. which sections were open by default)

        }
        catch (err) { }
    }

    function SetupCheckboxEvents() {
        //checkbox clicks
        $rightColumn.find(".checkMe").click(function (e) {
            $(this).toggleClass("checked");
            var $closestUL = $(this).closest("ul");
            if (!$(this).hasClass("all")) {
                //checking or unchecking a non-all checkbox will uncheck "all"
                var $currentAllCheckbox = $(this).closest("ul").find("li .all.searchInput");
                $currentAllCheckbox.removeClass("checked");
            }
            else {
                //uncheck all other checkboxes if "all" is clicked
                $closestUL.find(".checkMe:not(.all)").removeClass("checked");
            }

        });
    }

    //todo: wire up preferences button
    //todo: wire up help button



    function GetDefaultValues() {
        GatherSearchInputs(function (pValue) {
            defaultValues.push(pValue);
        });
    }

    function ShowSearchWindowOnLoad() {
        var result = false;
        var url = location.href;
        var queryStringPattern = /ShowSearch|mode=(BUILDINGS|SITES|COMMUNITIES|BUSINESSES)/;
        var match = queryStringPattern.exec(url);

        if (match !== undefined && match !== null) {
            DisplaySearch(false, match[1]); // from SearchFunctions.js
        }
        else if (window._ZPEOpenSearchWindow) {
            // from main.master.cs
            DisplaySearch(false, 'SITES');
        }
        return false;
    }

    function Init(pSubsetToken) {
        if (!_Initialized) {
            subsetToken = pSubsetToken;

            $leftColumn = $searchWindow.find(".search-column.left");
            $rightColumn = $searchWindow.find(".search-column.right");
            $searchButton = $("#searchButton");


            GetDefaultValues();

            SetupCategoryClick();
            SetupSearchButtonClick();
            SetupSectionClick();
            SetupTabClick();


            //4/1/11: Is this our css issue with ie8?
            //$leftColumn.find(".container:first").click();
            //todo: load preferences and click the appropriate section headers
            SetupCheckboxEvents();
            AddModifyClickToSearchInputs();
            //OpenTheFirstTabs();

            $("#closeSearch").click(function (e) {
                Hide();
            });

            $leftColumn.find(".reset-search").click(function (e) {
                Reset();
            });

            _Initialized = true;

            ShowSearchWindowOnLoad();
        }
    }

    var _Initialized = false;

    return {
        Show: Show,
        Hide: Hide,
        Reset: Reset,
        Init: Init
    };
}


