﻿/// <reference path="../ActivityDataAccess.js" />
/// <reference path="../AgilityData.js" />


Agility.RegisterNamespace("Subaru.ActivitySearchResults");

(function(ActivitySearchResults) {

    ActivitySearchResults.ChangeSortOrder = function(sortField) {

        Subaru.ActivityDataAccess.SearchCriteria.SortField = sortField;
        Subaru.ActivityDataAccess.PerformSearch(ActivitySearchResults.PerformSearchCallback);


        ActivitySearchResults.SetSortHighlight(sortField);

    }

    ActivitySearchResults.PerformTagSearch = function(tag) {
        Subaru.TemplateUtils.LoadDefaultScreen();

        var searchCriteria = new Object();


        searchCriteria.Type = "Search";
        searchCriteria.SearchTerm = tag;
        searchCriteria.SortField = "LikeCount";
        searchCriteria.SearchPage = 1;


        Subaru.ActivityDataAccess.SetSearchCriteria(searchCriteria);
        Subaru.ActivityDataAccess.PerformSearch(ActivitySearchResults.PerformSearchCallback);
        Subaru.AgilityData.ArticleSearch(tag, ActivitySearchResults.PerformArticleSearchCallback);
    }

    ActivitySearchResults.SetSortHighlight = function(sortField) {
        if (sortField == "CreatedOn") {

            $("#SearchResultsPopular").removeClass("Highlight");
            $("#SearchResultsRecent").addClass("HighlightRecent");
        }
        else if (sortField == "LikeCount") {
            $("#SearchResultsRecent").removeClass("HighlightRecent");
            $("#SearchResultsPopular").addClass("Highlight");
        }

    }

    ActivitySearchResults.RerunLastSearch = function() {


        if (Subaru.ActivityDataAccess.SearchCriteria != null) {

            Subaru.MapUtils.ClearAllMapData();
            Subaru.MapUtils.LoadActivities();
            Subaru.ActivityDataAccess.PerformSearch(ActivitySearchResults.PerformSearchCallback);

        }
        else {
            Subaru.MapUtils.ReturnToDefaultMap();
        }
    }

    ActivitySearchResults.PerformSearch = function(sortField) {
        Subaru.ContextUtil.SelectedActivityType = -1;
        Subaru.ContextUtil.SelectedProvince = null;


        Subaru.TemplateUtils.LoadDefaultScreen();

        var searchTerm = $("#txtSearchBox").val();
        if (searchTerm == Subaru.AgilityData.GetGlobalLanguageResource("Header_SearchWatermark")) {
            searchTerm = "";
        }

        //TODO: add spinner image when a search is made
        //$(".SearchGoButton").attr("src", "./img/spinner.gif");

        var searchCriteria = new Object();


        searchCriteria.Type = "Search";
        searchCriteria.SearchTerm = searchTerm;
        searchCriteria.SortField = sortField;
        searchCriteria.SearchPage = 1;


        Subaru.ActivityDataAccess.SetSearchCriteria(searchCriteria);
        Subaru.ActivityDataAccess.PerformSearch(ActivitySearchResults.PerformSearchCallback);
        Subaru.AgilityData.ArticleSearch(searchTerm, ActivitySearchResults.PerformArticleSearchCallback);
    }


    ActivitySearchResults.PerformExploreSearch = function(activityTypeID, provinceID, sortField) {
        Subaru.TemplateUtils.LoadDefaultScreen();

        var searchCriteria = new Object();


        searchCriteria.Type = "Explore";

        searchCriteria.ActivityTypeID = activityTypeID;
        searchCriteria.ProvinceID = provinceID;
        searchCriteria.SortField = sortField;

        //set so we can rerun the search at a later time;
        ActivitySearchResults.SearchCriteria = searchCriteria;

        Subaru.ActivityDataAccess.SetSearchCriteria(searchCriteria);


        Subaru.MapUtils.ProvinceZoom(provinceID);
        Subaru.ActivityDataAccess.PerformSearch(ActivitySearchResults.PerformSearchCallback);



    }

    ActivitySearchResults.PerformArticleSearchCallback = function(data) {
        if (data.length > 0) {
            var articleNoResults = $("#ArticleSearchResultsNoResults");
            articleNoResults.hide();

            var articleResults = $("#ArticleSearchResults");


            var templateUrl = Agility.ResolveUrl("~/ClientTemplates/ArticleSearchResults.htm");
            articleResults.setTemplateURL(templateUrl);
            articleResults.setParam("Title", Subaru.AgilityData.GetGlobalLanguageResource("SearchResults_Articles"));
            articleResults.setParam("AllArticles", Subaru.AgilityData.GetGlobalLanguageResource("SearchResults_AllArticles"));
            articleResults.processTemplate(data);


            articleResults.fadeIn("slow");

        }
        else {
            var articleResults = $("#ArticleSearchResults");
            articleResults.hide();

            var articleNoResults = $("#ArticleSearchResultsNoResults");


            var templateUrl = Agility.ResolveUrl("~/ClientTemplates/ArticleSearchResults.htm");
            articleNoResults.setTemplateURL(templateUrl);
            articleNoResults.setParam("Title", Subaru.AgilityData.GetGlobalLanguageResource("SearchResults_Articles"));
            articleNoResults.setParam("AllArticles", Subaru.AgilityData.GetGlobalLanguageResource("SearchResults_AllArticles"));

            articleNoResults.setParam("NoResults", Subaru.AgilityData.GetGlobalLanguageResource("SearchResults_NoResultsFound"));
            articleNoResults.processTemplate(new Array());


            articleNoResults.fadeIn("slow");
        }
    }

    ActivitySearchResults.DisplayEditorial = function(editorialID) {
        ActivitySearchResults.CloseSearchResults();

        Subaru.Editorial.LoadEditorial(editorialID);
    }

    ActivitySearchResults.PerformSearchCallback = function(data) {

        var activitySearchPanel = $("#ActivitySearchResults");
        var mainSearchPanel = $("#SearchResultsPanel");

        if (Subaru.ActivityDataAccess.ActivityData != null && Subaru.ActivityDataAccess.ActivityData.length > 0) {

            ActivitySearchResults.LoadSearchPage(1);

            $("#ActivitySearchResultsNoResults").hide();
            mainSearchPanel.show();

            activitySearchPanel.fadeIn("slow");
        }
        else {
            activitySearchPanel.html("");
            //activitySearchPanel.addClass("ActivityNotFound");
            mainSearchPanel.show();

            var queryValue = "";
            var activityType = null;
            var searchTerm = null;
            if (Subaru.ActivityDataAccess.SearchCriteria.Type == "Explore") {
                activityType = Subaru.AgilityData.GetActivityType(Subaru.ActivityDataAccess.SearchCriteria.ActivityTypeID);
            }
            else if (Subaru.ActivityDataAccess.SearchCriteria.SearchTerm != null) {
                searchTerm = Subaru.ActivityDataAccess.SearchCriteria.SearchTerm;
            }

            if (activityType != null) {
                queryValue = activityType.Title;
            }
            else if (searchTerm != null) {
                queryValue = searchTerm;
            }
            else {
                queryValue = Subaru.AgilityData.GetGlobalLanguageResource("ActivityTypes_AllActivities");
            }

            $("#ActivitySearch_NoResultsTitle").html(Subaru.TemplateUtils.AddElipseIfRequired(queryValue, 25, false));
            $("#ActivitySearchResultsNoResults").fadeIn("slow");
            activitySearchPanel.hide();
        }
    }

    ActivitySearchResults.LoadSearchPage = function(pageNumber) {


        var activitySearchPanel = $("#ActivitySearchResults");
        var templateUrl = Agility.ResolveUrl("~/ClientTemplates/ActivitySearchResults.htm");

        activitySearchPanel.setTemplateURL(templateUrl);

        var queryValue = "";
        var activityType = null;
        var searchTerm = null;
        if (Subaru.ActivityDataAccess.SearchCriteria.Type == "Explore") {
            activityType = Subaru.AgilityData.GetActivityType(Subaru.ActivityDataAccess.SearchCriteria.ActivityTypeID);
        }
        else if (Subaru.ActivityDataAccess.SearchCriteria.SearchTerm != null) {
            searchTerm = Subaru.ActivityDataAccess.SearchCriteria.SearchTerm;
        }



        if (activityType != null) {
            queryValue = activityType.Title;
        }
        else if (searchTerm != null) {
            queryValue = searchTerm;
        }
        else {
            queryValue = Subaru.AgilityData.GetGlobalLanguageResource("ActivityTypes_AllActivities");
        }




        var totalTemp = Subaru.ActivityDataAccess.TotalSearchResults;
        while (totalTemp % 5 != 0) {
            totalTemp++;
        }

        var totalPages = (totalTemp) / 5;

        var previousPage = pageNumber - 1;
        if (previousPage < 1) {
            previousPage = 1;
        }

        var nextPage = pageNumber + 1;
        if (nextPage > totalPages) {
            nextPage = totalPages;
        }


        var ActivityPage = new Array();

        pageNumber = pageNumber - 1;
        var offset = 0;
        if (pageNumber > 0) {
            offset = 5 * pageNumber;
        }
        else {
            offset = 0;
        }

        for (var i = offset; i < offset + 5; i++) {
            if (Subaru.ActivityDataAccess.ActivityData[i] != null) {
                var index = ActivityPage.length;

                ActivityPage[index] = Subaru.ActivityDataAccess.ActivityData[i];

                ActivityPage[index].Title = Subaru.TemplateUtils.AddElipseIfRequired(ActivityPage[index].Title, 32, false);
            }
        }




        activitySearchPanel.setParam("SearchQuery", Subaru.TemplateUtils.AddElipseIfRequired(queryValue, 25, false));
        activitySearchPanel.setParam("PagerValue", pageNumber + 1 + " "+ Subaru.AgilityData.GetGlobalLanguageResource("SearchResults_of") + " " + totalPages);
        activitySearchPanel.setParam("Popular", Subaru.AgilityData.GetGlobalLanguageResource("SearchResults_Popular"));
        activitySearchPanel.setParam("RecentlyAdded", Subaru.AgilityData.GetGlobalLanguageResource("SearchResults_RecentrlyAdded"));
        

        activitySearchPanel.processTemplate(ActivityPage);

        try {
            RefreshRollOvers();
        }
        catch (e) {

        }


        $("#ActivitySearchResults_Previous").unbind("click", null);
        $("#ActivitySearchResults_Previous").bind("click", function() {
            Subaru.ActivitySearchResults.LoadSearchPage(previousPage);
        });
        $("#ActivitySearchResults_Next").unbind("click", null);
        $("#ActivitySearchResults_Next").bind("click", function() {
            Subaru.ActivitySearchResults.LoadSearchPage(nextPage);
        });


        ActivitySearchResults.SetSortHighlight(Subaru.ActivityDataAccess.SearchCriteria.SortField);
    }

    ActivitySearchResults.CloseSearchResults = function() {
        var activitySearchPanel = $("#SearchResultsPanel");
        activitySearchPanel.hide();

        $("#ArticleSearchResults").hide();
        $("#ActivitySearchResultsNoResults").hide();

    }

    ActivitySearchResults.ShowSearchResults = function() {
        var activitySearchPanel = $("#SearchResultsPanel");
        activitySearchPanel.show();
    }

})(Subaru.ActivitySearchResults);