function Core_FavoritePlaces_PopulatePopup(context) 
{
    var popupPanel = eval(context.parameter.popupName);
    var content = context.parameter.wrapperHtml.replace(/{Content}/g, context.parameter.preLoadingHtml);
    popupPanel.SetPanelContent(content);
    content = context.parameter.wrapperHtml.replace(/{Content}/g, context.parameter.loadingHtml);
    context.parameter.timeout = setTimeout(function() { popupPanel.SetPanelContent(content); }, 200);

    $.ajax({
        type: "POST",
        url: Core_FavoritePlaces_AjaxEndpoint + "/PopulateFavoritePlaces",
        contentType: "application/json; charset=utf-8",
        data: "{}",
        dataType: "json",
        success: function(msg) {
            var objs = msg.d;
            var content = "";
            var columnsContent = "";
            var columnsCount = 0;
            var columnFavorites = 0;

            if (context.parameter.timeout) clearTimeout(context.parameter.timeout);

            if (objs.FavoriteTypes.length > 0) {
                var listContent = context.parameter.columnListHtml;

                var columnContent = "";
                columnsCount = 1;

                $.each(objs.FavoriteTypes, function() {
                    if (columnsCount > 3) { return; }
                    if (this.Favorites.length + 2 + columnFavorites > 22) {
                        columnsContent += context.parameter.columnItemHtml.replace(/{ColumnId}/g, columnsCount).replace(/{ColumnContent}/g, columnContent);
                        columnContent = "";
                        columnsCount++;
                        columnFavorites = 0;
                        if (columnsCount > 3) { return; }
                    }
                    columnFavorites += this.Favorites.length + 2;
                    columnContent += context.parameter.favoriteTypeHtml.replace(/{Name}/g, this.Name);
                    var favorites = "";

                    $.each(this.Favorites, function() {
                        favorites += context.parameter.favoriteHtml.replace(/{Name}/g, this.Name).replace(/{Url}/g, this.Url);
                    });
                    columnContent = columnContent.replace(/{Favorites}/g, favorites);
                });

                if (columnContent != "") {
                    columnsContent += context.parameter.columnItemHtml.replace(/{ColumnId}/g, columnsCount).replace(/{ColumnContent}/g, columnContent);
                }

                listContent = listContent.replace(/{Columns}/g, columnsContent);
                listContent = listContent.replace(/{ColumnsCount}/g, columnsCount > 3 ? 3 : columnsCount);

                content += listContent;
                content += context.parameter.viewAllHtml.replace(/{Url}/g, objs.ViewAll.Url).replace(/{Name}/g, objs.ViewAll.Name);
            }
            else
                content = context.parameter.noneHtml;

            content = context.parameter.wrapperHtml.replace(/{Content}/g, content);

            popupPanel.SetPanelContent(content);
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            popupPanel.SetPanelContent(context.parameter.wrapperHtml.replace(/{Content}/g, context.parameter.errorHtml));
        }
    });
}

function Core_FavoritePlaces_ShowPopup(context)
{
    $('#' + context.parameter.buttonID).addClass('active');

    Core_FavoritePlaces_PopulatePopup(context);
}

function Core_FavoritePlaces_HidePopup(context)
{
    $('#' + context.parameter.buttonID).removeClass('active');
}
