﻿//-------------------------------------------------------------------------------------------------
//  SEARCH RESULTS
//-------------------------------------------------------------------------------------------------

var searchManager =
{
    isLoggedIn: false,
    currentPage: 1,
    sort: 'Date',
    sortDirection: 'desc',
    pageSize: 15,
    target: Object,
    queryHiddenId: '',
    searchTypeHidden: Object,
    searchTxt: Object,
    showIntro: true,
    showOccurrence: true,

    searchType:
    {
        Get: function()
        {
            return searchManager.searchTypeHidden.value;
        },
        Set: function(value)
        {
            searchManager.searchTypeHidden.value = value;
        }
    },

    queryXml:
    {
        Get: function()
        {
            return document.getElementById(searchManager.queryHiddenId).value;
        },
        Set: function(value)
        {
            document.getElementById(searchManager.queryHiddenId).value = value;
        }
    },

    searchTypes:
    {
        All: 'combinedSearchTab',
        Verdicts: 'verdictsSearchTab',
        Laws: 'lawsSearchTab'
    },

    // param "sort" (string): The sorting applied to the search-results or null to use the default (Date)
    // param "sortDirection" (string): The sort-direction applied to the search-results or null to use the default (desc)
    Init: function(isUserLoggedIn, targetId, searchTypeHiddenId, queryHiddenId, sort, sortDirection)
    {
        this.isLoggedIn = (isUserLoggedIn === 'true');
        this.target = document.getElementById(targetId);
        this.searchTypeHidden = document.getElementById(searchTypeHiddenId);
        this.queryHiddenId = queryHiddenId;
        this.sort = sort;
        this.sortDirection = sortDirection;

        ajaxHelper.Init(targetId);

        // Begin the asynchronous call to get the search results
        //BeginGetAdvancedSearchResults();

        GetAdvancedSearchResults();
    },

    GetUserLoggedInStatus: function()
    {
        return this.isLoggedIn;
    },

    SetSearchTab: function(a)
    {
        var selectedTab = a.id;

        for (var type in this.searchTypes)
        {
            tab = this.searchTypes[type];

            if (selectedTab == tab)
            {
                this.searchType.Set(type);
                document.getElementById(tab).style.fontWeight = 'bold';
            }
            else
            {
                document.getElementById(tab).style.fontWeight = 'normal';
            }
        }
    },

    ToggleSortDirection: function()
    {
        this.sortDirection = this.sortDirection == 'desc' ? 'asc' : 'desc';
    },

    // Toggles the display of all divs having the given className.  If param "spanId" is passed in, the text in the span is
    //      also toggled.
    // param "className": class whose divs to toggle
    // param "spanId": span whose text to toggle
    // param "property": searchManager property to toggle
    ToggleDisplayByClass: function(className, spanId, property)
    {
        // Get all divs
        var divs = document.getElementsByTagName('div');
        var wasShowing = this[property];

        for (i = 0; i < divs.length; i++)
        {
            if (divs[i].className == className)
            // toggle display
                divs[i].style.display = wasShowing ? 'none' : '';
        }

        if (spanId)
            document.getElementById(spanId).innerHTML = wasShowing ? 'הצג' : 'הסתר';

        this[property] = !wasShowing;
    },

    // Change the class of a searchResults row to the visited-row-style
    MakeRowVisited: function(id)
    {
        //        var rowId = 'searchResultRow' + id;
        //        document.getElementById(rowId).className = 'visitedSearchResultRow';
        var el = $j("#checkImage" + id);
        var position = el.parent().find("#poolImage").position();
        var right = $j(window).width() - position.left - el.width();
        el.css("display", "inline");
        el.css("right", right + "px");
        el.css("position", "absolute");
    }
};

function GoToPage(page)
{
    searchManager.currentPage = page;

    GetFilterResult();
}

function GoToPageSizeSelect(select)
{
    searchManager.pageSize = select.options[select.selectedIndex].value;

    GetFilterResult();
}

function GoToSort(sortExpresion)
{
    //
    // Set the sort direction
    //
    if (searchManager.sort == sortExpresion)
        searchManager.ToggleSortDirection();
    else
    // always start with desc when a new sort is requested
        searchManager.sortDirection = 'desc';

    // Set the sort expression
    searchManager.sort = sortExpresion;

    GetFilterResult();
}

function GetFilterResult()
{
    //scroll to top so user can see animation while page is loading
    scroll(0, 0);

    ajaxHelper.ShowProgress('GetResultPageByParams', 'resultContainerDiv', 'text-align: center; padding: 40px 0 40px 0');

    SearchEngineService.GetResultPageByParams
    (
        searchManager.queryXml.Get(),
        searchManager.pageSize,
        searchManager.currentPage,
        searchManager.sort,
        searchManager.sortDirection,
        searchManager.showIntro,
        searchManager.showOccurrence,
        GetFilterResult_Complete
    );
}

function GetFilterResult_Complete(args)
{
    //searchManager.target.innerHTML = args;

    // Set the result html to the target
    searchManager.target.innerHTML = args.Result;

    // Save the result xml-query to the searchManager
    searchManager.queryXml.Set(args.Info);
    SetCheckIcon();
}

function GetAdvancedSearchResults()
{
    ajaxHelper.ShowProgress('GetAdvancedSearchResults');

    SearchEngineService.GetAdvancedSearchResultsHtml
    (
        searchManager.queryXml.Get(),
        GetSearchResults_Complete
    );
}

/* ASYNCHRONOUS FUNCTIONALITY: CURRENTLY NOT IN USE
function BeginGetAdvancedSearchResults()
{
ajaxHelper.ShowProgress('BeginGetAdvancedSearchResults');

SearchEngineService.BeginGetAdvancedSearchResultsHtml
(
searchManager.queryXml.Get(),
BeginGetAdvancedSearchResults_Complete
);
}

function BeginGetAdvancedSearchResults_Complete()
{
// Begin polling for result every half second
ajaxHelper.BeginPolling(SearchEngineService.Check_GetAdvancedSearchResultsHtmlComplete, 500, PollForSearchResults_Complete)
}

// The callback method that is called each time the server is polled. When the server has finished, the args will contain
// the search results, at which time the GetSearchResults_Complete method is called and the polling-interval is cleared.
function PollForSearchResults_Complete(args)
{
if(args != null)
{
// clear the interval
window.clearInterval(ajaxHelper.intervals['PollForSearchResults_Complete']);
        
GetSearchResults_Complete(args);
}
}*/

function RefineSearchByParams(args)
{
    ajaxHelper.ShowProgress('RefineSearchByParams');

    SearchEngineService.RefineSearchByParams
    (
        searchManager.queryXml.Get(),
        args,
        GetSearchResults_Complete
    );
}

function RefineSearchByTextBox(textBoxId)
{
    var txtBox = document.getElementById(textBoxId);
    if (txtBox != null && txtBox.value != null && txtBox.value.trim() != "")
    {
        RefineSearchByText(txtBox.value);
    }
}

function RefineSearchByText(args)
{
    ajaxHelper.ShowProgress('RefineSearchByParams');

    SearchEngineService.RefineSearchByText
    (
        searchManager.queryXml.Get(),
        args,
        GetSearchResults_Complete
    );
}

function RemoveRefineItem(args)
{
    ajaxHelper.ShowProgress('RemoveRefineItem');

    SearchEngineService.RemoveRefineItem
    (
        searchManager.queryXml.Get(),
        args,
        GetSearchResults_Complete
    );
}

function GetSearchResults_Complete(args)
{
    if (!args)
    {
        ajaxHelper.ShowError();
        searchManager.target.innerHTML = '';
        return;
    }

    // Set the result html to the target
    searchManager.target.innerHTML = args.Result;

    // Save the result xml-query to the searchManager
    searchManager.queryXml.Set(args.Info);

    refineManager.GetRefineResults();

    var queryOptionsSpanContainer = $j(document.getElementById("ctl00_queryOptionsSpan"));
    var containerStr = "";
    if (!searchManager.GetUserLoggedInStatus())
    {
        queryOptionsSpanContainer.find("a").each(function()
        {
            if ($j(this).html() == "שמור שאילתה ")
            {
                $j(this).css("display", "none");
            }
        });

        containerStr = queryOptionsSpanContainer.html();

        if (containerStr != undefined)
        {
            queryOptionsSpanContainer.html(containerStr.replace("&nbsp;|&nbsp;", ""));
        }
    }
    else
    {
        queryOptionsSpanContainer.find("a").css("display", "");
    }
    SetCheckIcon();
}

function SetCheckIcon()
{
    $j("#tblResult tr .checkIcon").each(function()
    {
        var el = $j(this);
        if (el.css("display") != "none")
        {
            var position = el.parent().find("#poolImage").position();
            var right = $j(window).width() - position.left - el.width();
            el.css("display", "inline");
            el.css("right", right + "px");
            el.css("position", "absolute");
        }
    });
}
//-------------------------------------------------------------------------------------------------
//  REFINE RESULTS
//-------------------------------------------------------------------------------------------------

var refineManager =
{
    savedLabels: [],

    ToggleExtras: function(span, divId)
    {
        if (utility.ToggleElementById(divId) == '')
        {
            if (!refineManager.savedLabels[divId])
                refineManager.savedLabels[divId] = span.innerHTML;

            span.innerHTML = '<img src="Images/red_arr_right.gif" /> הסתר תוצאות נוספות';
        }
        else
        {
            span.innerHTML = refineManager.savedLabels[divId];
        }
    },

    /* ASYNCHRONOUS FUNCTIONALITY: CURRENTLY NOT IN USE
    BeginGetRefineResults: function()
    {
    ajaxHelper.ShowProgress('BeginGetRefineResultsLocalHtml', 'refineDiv');

        SearchEngineService.BeginGetRefineResultsLocalHtml
    (
    searchManager.queryXml.Get(),
    refineManager.BeginGetRefineResults_Complete
    );
    },

    BeginGetRefineResults_Complete: function()
    {
    // Begin polling for result every half second
    ajaxHelper.BeginPolling
    (
    SearchEngineService.Check_GetRefineResultsLocalHtmlComplete,
    500,
    refineManager.PollForRefineResults_Complete
    );
    },

    PollForRefineResults_Complete: function(result)
    {
    if (result != null)
    {
    ajaxHelper.StopPolling(refineManager.PollForRefineResults_Complete);

            refineManager.GetRefineResults_Complete(result);
    }
    },*/

    GetRefineResults: function()
    {
        ajaxHelper.ShowProgress('GetAdvancedSearchResults', 'refineDiv');

        SearchEngineService.GetRefineResultsLocalHtml
        (
            searchManager.queryXml.Get(),
            refineManager.GetRefineResults_Complete
        );
    },

    GetRefineResults_Complete: function(args)
    {
        var div = document.getElementById('refineDiv');

        if (args !== null)
        {
            div.innerHTML = args;
        }
        else
        {
            div.innerHTML = 'לא נמצאו תוצאות למיקוד';
        }
        PreventFormReload();
    }
};

//Prevent Form Reload after clicking enter
function PreventFormReload()
{
    $j("#wordsTxt").keydown(function(event)
    {
        if (event.keyCode == 13)
        {
            event.preventDefault();
            return false;
        }
    });

    $j(".WordsTxt").keydown(function(event)
    {
        if ($j(this).val() == "")
        {
            if (event.keyCode == 13)
            {
                event.preventDefault();
                return false;
            }
        }
    });
}


/* END SearchResults Methods */

