var Core_BrowseGroups_CurrentBrowseGroup = null;

function Core_BrowseGroups_KeyUp(context)
{
    var wrapper = $('#' + context.parameter.popupWrapperID);
    var searchText = $('.browse-groups-search-textbox', wrapper).val();
    if (searchText == null || searchText == "")
    {
        clearTimeout(context.timeout);
        $('.browse-groups-search-results', wrapper).hide();
        $('.multiple-column-list', wrapper).show();
        $('.internal-link.view-all', wrapper).show();
        $('.browse-groups-search-results > ul', wrapper).html('');
        eval(context.parameter.popupName).Refresh();
        $('.browse-groups-search-textbox', wrapper).get(0).focus();
    }
    else
    {
        if (context.timeout)
        {
            clearTimeout(context.timeout);
        }
        context.timeout = setTimeout(function() { Core_BrowseGroups_SearchGroups(searchText, context); }, 500);
    }
}

function Core_BrowseGroups_SearchGroups(searchText, context)
{
    var wrapper = $('#' + context.parameter.popupWrapperID);
    $('.multiple-column-list', wrapper).hide();
    $('.internal-link.view-all-groups', wrapper).hide();
    $('.browse-groups-search-results', wrapper).show();
    
    var message = '{"searchText":"' + searchText + '"}';

    $.ajax({
        type: "POST",
        url: Core_BrowseGroups_AjaxEndpoint + "/FindGroup",
        data: message,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            var resultsList = "";
            var objs = msg.d;
            if (objs.length > 0) {
                $.each(objs, function() {
                    resultsList += context.parameter.searchResultItemHtmlBlock.replace(/{Url}/g, this.Url).replace(/{Name}/g, this.Name);
                });
            }
            else {
                resultsList = context.parameter.t2GroupHtmlBlock.replace(/{Item}/g, context.parameter.searchNoneText);
            }
            $('.browse-groups-search-results > ul', wrapper).html(resultsList);
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            $('.browse-groups-search-results > ul', wrapper).html('Error searching groups...');
        }
    });
}

function Core_BrowseGroups_PopulatePopup(context)
{
    var popupPanel = eval(context.parameter.popupName); 
    var content = context.parameter.loadingHtml
    content = context.parameter.browseGroupsContentWrapperHtmlBlock.replace(/{BrowseGroupsContent}/g, content);
    popupPanel.SetPanelContent(content);

    $.ajax({
        type: "POST",
        url: Core_BrowseGroups_AjaxEndpoint + "/PopulateGroupList",
        contentType: "application/json; charset=utf-8",
        data: "{}",
        dataType: "json",
        success: function(msg) {
            var objs = msg.d;
            var content = context.parameter.browseGroupsSearchHtmlBlock;
            var columnsMarkup = "";
            var columnsCount = 0;
            var columnGroups = 0;

            var listContent = context.parameter.browseGroupsListHtmlBlock;
            if (objs.Groups.length > 0) {
                var t1Groups = "";
                columnsCount = 1;
                // t1 Groups
                $.each(objs.Groups, function() {
                    if (columnsCount > 3) { return; }
                    if (this.Groups.length + 2 + columnGroups > 21) {
                        columnsMarkup += context.parameter.columnWrapperHtmlBlock.replace(/{ColumnId}/g, columnsCount).replace(/{T1GroupsData}/g, t1Groups);
                        t1Groups = "";
                        columnsCount++;
                        columnGroups = 0;
                        if (columnsCount > 3) { return; }
                    }
                    columnGroups += this.Groups.length + 2;
                    t1Groups += context.parameter.t1GroupHtmlBlock.replace(/{Name}/g,
                        context.parameter.linkHtmlBlock.replace(/{Name}/g, this.Name).replace(/{Url}/g, this.Url));

                    var t2Groups = "";
                    // t2 Groups
                    $.each(this.Groups, function() {
                        t2Groups += context.parameter.t2GroupHtmlBlock.replace(/{Item}/g,
                            context.parameter.linkHtmlBlock.replace(/{Name}/g, this.Name).replace(/{Url}/g, this.Url));

                        if (this.IsAndMoreLink) {
                            t2Groups = t2Groups.replace(/{MoreClass}/g, "internal-link view-more");
                        }
                        else
                            t2Groups = t2Groups.replace(/{MoreClass}/g, "internal-link");
                    });
                    t1Groups = t1Groups.replace(/{Groups}/g, t2Groups);
                });
                if (t1Groups != "") {
                    columnsMarkup += context.parameter.columnWrapperHtmlBlock.replace(/{ColumnId}/g, columnsCount).replace(/{T1GroupsData}/g, t1Groups);
                }
                listContent = listContent.replace(/{Columns}/g, columnsMarkup);
                listContent = listContent.replace(/{ColumnsCount}/g, columnsCount > 3 ? 3 : columnsCount);
            }
            content += listContent;
            // Add view all link
            content += context.parameter.viewAllHtmlBlock.replace(/{Url}/g, objs.ViewAll.Url).replace(/{Text}/g, objs.ViewAll.Text);
            content = context.parameter.browseGroupsContentWrapperHtmlBlock.replace(/{BrowseGroupsContent}/g, content);

            var popupPanel = eval(context.parameter.popupName);
            var linkName = eval(context.parameter.linkName);

            popupPanel.SetPanelContent(content);

            context.parameter.popupPopulated = true;

            var wrapper = $('#' + context.parameter.popupWrapperID);
            $('.browse-groups-search-textbox', wrapper).attr("autocomplete", "off");
            $('.browse-groups-search-textbox', wrapper).bind('keyup.autocomplete', function() { Core_BrowseGroups_KeyUp(context) });
            $('.browse-groups-search-textbox', wrapper).focus();

            $('.internal-link.clear-search', wrapper).bind('click', function() { $('.browse-groups-search-textbox', wrapper).val(''); Core_BrowseGroups_KeyUp(context); return false; });
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            var popupPanel = eval(context.parameter.popupName);
            popupPanel.SetPanelContent(context.parameter.errorHtml);
        }
    });
}

function Core_BrowseGroups_MouseOverPopup(context)
{
    context.parameter.mouseInPopup = true;
}

function Core_BrowseGroups_MouseOutPopup(context)
{
    context.parameter.mouseInPopup = false;
}

function Core_BrowseGroups_ShowPopup(context)
{
    var wrapper = $('#' + context.parameter.popupWrapperID);
    $('#' + context.parameter.buttonID).addClass('active');
    if (!context.parameter.popupPopulated)
        Core_BrowseGroups_PopulatePopup(context);
    else
        $('.browse-groups-search-textbox', wrapper).focus();

    // this needs to be set at a delay to avoid the first document click
    setTimeout(function() { Core_BrowseGroups_CurrentBrowseGroup = context; }, 19);
}

function Core_BrowseGroups_HidePopup(context)
{
    $('#' + context.parameter.buttonID).removeClass('active');
    Core_BrowseGroups_CurrentBrowseGroup = null;
}

 function Core_BrowseGroups_DocumentClick()
 {
     if (Core_BrowseGroups_CurrentBrowseGroup && !Core_BrowseGroups_CurrentBrowseGroup.parameter.mouseInPopup)
         eval(Core_BrowseGroups_CurrentBrowseGroup.parameter.popupName).Hide();
 }

 $(function()
 {
     $(document).bind('click', Core_BrowseGroups_DocumentClick);
 });