
$(function() {

    if (typeof window.SH == "undefined" || !window.SH) {
        window.SH = {};
    }
    if (typeof SH.Util == "undefined" || !SH.Util) {
        SH.Util = {};
    }
    
    if (typeof SH.Results == "undefined" || !SH.Results) {
        SH.Results = {};
    }
});

SH.Results = function() {

    var _settings = null;

    var initSettings = function(searchType, resultsHolder, mapHolder, addAjaxUrlParams) {
        var settings = {
            searchType: searchType,
            resultsHolder: resultsHolder,
            mapHolder: mapHolder,
            urlParams: addAjaxUrlParams
        };

        _settings = settings;
    };

    var init = function(searchType, resultsHolder, mapHolder) {

        initSettings(searchType, resultsHolder, mapHolder);
        initMoreLessDetailLinks();
    };

    var initMoreLessDetailLinks = function() {

        var more = $("#more");
        var less = $("#less");

        more.click(function(e) {
            e.preventDefault();
            $(".result_details").show();
            $(this).attr("class", "on")
            less.attr("class", "off");
        })

        less.click(function(e) {
            e.preventDefault();
            $(".result_details").hide();
            $(this).attr("class", "on")
            more.attr("class", "off")
        })

        if (more.hasClass("on")) {
            more.click();
        }
        if (less.hasClass("on")) {
            less.click();
        }
    }

    var ajaxResults = function(searchCriteria) {
        ajaxSearchResults(searchCriteria);
    };

    var ajaxSearchResults = function(searchCriteria) {

        var resultsHolder = _settings.resultsHolder;
        var mapHolder = _settings.mapHolder;
        var searchType = _settings.searchType;
        var addParams = _settings.urlParams;

        var oldResults = $(resultsHolder).html();
        $(resultsHolder).html($("#search_results_loader").html());

        var url = "/ajax_results.aspx?search=" + searchType + "&criteria=" + JSON.stringify(searchCriteria);

        if (!SH.Util.isNull(addParams)) {
            //additional query string parameters
            url += "&" + addParams;
        }
        $.getJSON(url, function(data) {
            if (!data.IsError) {
                $(resultsHolder).html(data.results_html);
                //map
                if (!SH.Util.isNull(mapHolder)) {
                    $(mapHolder).html(data.map_html);
                    // switch to map;
                    var allViewOnMapLinks = $("#search_results .result_map a");
                    allViewOnMapLinks.click(function(i) {
                        var id = $(this).attr("id").substring(4);
                        $("#tabs").tabs("select", "#Map");
                        $("#tabs").tabs("select", "#map");
                        $("#GoogleMapSideBar li a[rel=" + id + "]").trigger("click")
                        return false;
                    });
                }
                initMoreLessDetailLinks();

                $(".result_cta a").hide();
                $(".result_details").show();
            }
            else {
                $(resultsHolder).html(oldResults);
            }
        });
    };

    return {
        init: init,
        ajaxResults: ajaxResults,
        initSettings: initSettings
    };

} ();
     
