﻿var folderTypes =
{
    General: 1,
    History: 2,
    Managed: 3,
    Group: 4
}

var folderMgr =
{
    folders: [],
    generalDivId: 'generalFolderDiv',
    historyDivId: 'historyFolderDiv',
    managedDivId: 'managedFolderDiv',
    groupDivId: 'groupFolderDiv',
    foldersListDiv: 'foldersDiv',
    isMultiView: true, // true indicates that toggle and delete buttons will be visible on folder titles

    // The Init function is designed for Search.aspx
    // param bool "autoLoadAndMultiView": false to indicate that folders will be displayed singly and should not be auto-loaded on startup,
    //      false to indicate that folders may be displayed in groups (which means the toggle and delete buttons will be visible)
    //      and will be auto-loaded on startup
    Init: function(autoLoadAndMultiView)
    {
        folderMgr.isMultiView = autoLoadAndMultiView;

        if (autoLoadAndMultiView)
        {
            ajaxHelper.ShowProgress(folderMgr.historyDivId, folderMgr.historyDivId);
            ajaxHelper.ShowProgress(folderMgr.generalDivId, folderMgr.generalDivId);
            ajaxHelper.ShowProgress(folderMgr.managedDivId, folderMgr.managedDivId);

            SearchEngineService.GetFolderSearchesHtmlByType(folderMgr.historyDivId, folderTypes['History'], folderMgr.LoadQueries_Complete);
            SearchEngineService.GetFolderSearchesHtmlByType(folderMgr.generalDivId, folderTypes['General'], folderMgr.LoadQueries_Complete);
            SearchEngineService.GetFolderSearchesHtmlByType(folderMgr.groupDivId, folderTypes['Group'], folderMgr.LoadQueries_Complete);
            SearchEngineService.GetManagedFoldersHtml(folderMgr.managedDivId, folderMgr.GetManagedFoldersHtml_Complete);
        }
    },

    //-------------------------------------------------------------------------------------------------
    //  DOM EVENTS
    //-------------------------------------------------------------------------------------------------

    ToggleQueries: function(titleDivChild)
    {
        var $div = $j(titleDivChild).parent();
        var image = $div.find('#expanderImg').get(0);

        if (!image) return;

        utility.ToggleElement($div.next().get(0));

        image.src = image.src.indexOf('defaultscreen') > -1
            ? 'Images/DocumentIcons/icon_fullscreen.gif' : 'Images/DocumentIcons/icon_defaultscreen.gif';
        image.title = image.alt.indexOf('הצג') > -1 ? 'החבא שאילתות' : 'הצג שאילתות';
    },

    AttachClueTips: function()
    {
        //alert('AttachClueTips');

        // unbind all cluetip events
        $j('.queryPopup').unbind();

        // rebind
        $j('.queryPopup').cluetip({
            width: 415,
            closeText: '<img src="Images/close_rss.gif" alt="סגור" />',
            cluetipClass: 'koldin',
            mouseOutClose: true,
            titleAttribute: 'ctTitle',
            closePosition: 'title',
            showTitle: false,
            positionBy: 'bottomTop',
            ajaxProcess: function(data)
            {
                // Parse message out of xml and wrap in a div
                return '<div style="text-align:right">' + $j(data).find('string').text() + '</div>';
            },
            ajaxSettings: {
                dataType: 'xml'
            }
        });

        // Fix IE6 combo-box z-index problem
        $j('#cluetip').bgiframe();
    },

    //-------------------------------------------------------------------------------------------------
    //  FOLDER MANAGEMENT
    //-------------------------------------------------------------------------------------------------

    FindFolder: function(folderId)
    {
        for (var i = 0; i < folderMgr.folders.length; i++)
        {
            if (folderMgr.folders[i].folderId == folderId)
            {
                return folderMgr.folders[i];
            }
        }

        return null;
    },

    RegisterFolder: function(folderId, divId)
    {
        // Save the folder's Id and target in memory
        folderMgr.folders.push({ folderId: folderId, divId: divId });
    },

    DeleteFolder: function(folderId, divId)
    {
        // Make sure the folder and its div are registered
        if (folderMgr.FindFolder(folderId) == null)
            folderMgr.RegisterFolder(folderId, divId);

        SearchEngineService.FolderHasContent(folderId, folderMgr.FolderHasContent_Complete);
    },

    FolderHasContent_Complete: function(result)
    {
        if (result)
        {
            var confirmed = false;

            //
            // Request appropriate confirmation
            //
            if (result.Result)
                confirmed = confirm('התקיה שביקשת למחוק אינה ריקה! האם אתה בטוח שברצונך למחוק את התקיה וכל התוכן שלה?');
            else
                confirmed = confirm('האם אתה בטוח שברצונך למחוק את התקיה?');

            if (confirmed)
                SearchEngineService.DeleteFolder(result.Info, folderMgr.DeleteFolder_Complete);
        }
        else
        {
            ajaxHelper.ShowError();
        }
    },

    DeleteFolder_Complete: function(result)
    {
        if (result && result.Result)
        {
            // Remove the folder from the html
            $j('#' + folderMgr.FindFolder(result.Info).divId).remove();

            alert("התקיה הוסרה בהצלחה!");
        }
        else
        {
            ajaxHelper.ShowError();
        }
    },

    // Loads the returned html into the managed-folder div, or hides the div (for IE) if there are no managed folders
    GetManagedFoldersHtml_Complete: function(result)
    {
        if (result && result.Result != '')
        {
            ajaxHelper.HideProgress(result.Target, result.Result);
            folderMgr.AttachClueTips();
        }
        else
        {
            // hide the div (for IE)
            utility.HideElement(folderMgr.managedDivId);
        }
    },

    //-------------------------------------------------------------------------------------------------
    //  QUERIES / SEARCHES
    //-------------------------------------------------------------------------------------------------

    // Hides the progress gif for the operation, inserts the html, re-attaches cluetips to all query-descriptions, and pushes
    // the returned folder into the folders collection if it does not already exist
    LoadQueries_Complete: function(result)
    {
        //alert('LoadQueries_Complete');

        if (result)
        {
            ajaxHelper.HideProgress(result.Target, result.Result)
            document.getElementById(result.Target).innerHTML = result.Result;

            if (result.Info && folderMgr.FindFolder(result.Info) === null)
            {
                // Save the folder's Id and target in memory
                folderMgr.RegisterFolder(result.Info, result.Target)
            }

            // rebind cluetips
            folderMgr.AttachClueTips();
        }
    },

    // Loads a lazy-loading folder's queries
    LoadFolderQueries: function(divId, folderId, showFloatingProgress)
    {
        showFloatingProgress ? ajaxHelper.ShowProgress() : ajaxHelper.ShowProgress(divId, divId);

        SearchEngineService.GetFolderSearchesHtmlById(divId, folderId, folderMgr.isMultiView, folderMgr.LoadQueries_Complete);
    },

    DeleteSearch: function(searchId, folderId, divId)
    {
        // Make sure the folder and its div are registered
        if (folderMgr.FindFolder(folderId) == null)
            folderMgr.RegisterFolder(folderId, divId);

        if (confirm("האם אתה בטוח שברצונך למחוק שאילתה זו"))
        {
            SearchEngineService.DeleteSearch(searchId, folderId, folderMgr.DeleteSearch_Complete);
        }
    },

    DeleteSearch_Complete: function(result)
    {
        if (result && result.Result === true)
        {
            alert("השאילתה הוסרה בהצלחה!");

            if (result.Info)
            {
                var folder = folderMgr.FindFolder(result.Info);

                if (folder)
                    folderMgr.LoadFolderQueries(folder.divId, folder.folderId, true)
            }
        }
        else
        {
            alert("השמירה נכשלה נסה שוב מאוחר יותר!");
        }
    }
};