﻿wesreid = wesreid || {};
wesreid.util = wesreid.util || {};
wesreid.util.ui = wesreid.util.ui = {

    modalWindow: {

        screen: null,

        showScreen: function () {
            if (!this.screen) {
                this.screen = $("<div id=\"OverlayScreen\" class=\"overlayScreen\"></div>");
                $(this.screen).css("opacity", "0.75");
                $(this.screen).appendTo("body");
            }
            $(this.screen).css({ height: $(document).height() });
            $(this.screen).show();
        },

        hideScreen: function () {
            if (this.screen)
                $(this.screen).hide();
        },
        onLoad: { callback: null, callbackData: null },
        onClose: null,

        modalContentContainer: null,
        modalViewStack: [],
        modalView: {
            container: null,
            onLoad: { callback: null, callbackData: null },
            onClose: null,
            view: null,
            css: null
        },

        showModalContent: function (view, css) {

            this.modalView.onClose = this.onClose;
            this.modalView.onLoad = this.onLoad;
            this.modalView.view = view;
            this.modalView.css = css;
            this.modalViewStack.push($.extend({}, this.modalView));

            this.modalViewStack[this.modalViewStack.length - 1].container = $('<div id="' + ('modal' + (new Date()).getTime().toString()) + '" class="overlayScreenContentContainer"></div>');
            this.modalViewStack[this.modalViewStack.length - 1].container.appendTo("body");
            wesreid.util.ui.modalWindow.modalContentContainer = this.modalViewStack[this.modalViewStack.length - 1].container;
            if (this.modalViewStack.length > 1)
                this.modalViewStack[this.modalViewStack.length - 2].container.hide();

            var renderViewFn = function (data) {
                if (wesreid.util.ui.modalWindow.modalViewStack.length == 1)
                    wesreid.util.ui.modalWindow.showScreen();
                data = "<a href=\"#\" class=\"closeModal\"></a>" + data;
                $(wesreid.util.ui.modalWindow.modalContentContainer).html(data);
                if (css)
                    $(wesreid.util.ui.modalWindow.modalContentContainer).css(css);
                $(wesreid.util.ui.modalWindow.modalContentContainer).show();
                if (typeof wesreid.util.ui.modalWindow.onLoad.callback === "function") {
                    wesreid.util.ui.modalWindow.onLoad.callback(wesreid.util.ui.modalWindow.onLoad.callbackData);
                    wesreid.util.ui.modalWindow.onLoad.callback = null;
                    wesreid.util.ui.modalWindow.onLoad.callbackData = null;
                }
                $(".closeModal").click(wesreid.util.ui.modalWindow.closeModalWindow);
                wesreid.util.ui.modalWindow.onLoad = { callback: null, callbackData: null };
                wesreid.util.ui.modalWindow.onClose = null;
            };
            if (view.src) {
                $.get(view.src, renderViewFn);
            }
            else if (view.html) {
                renderViewFn(view.html);
            }
        },

        reviveContainer: function () {
            $(wesreid.util.ui.modalWindow.modalViewStack[wesreid.util.ui.modalWindow.modalViewStack.length - 1].container).fadeIn(500);
        },

        closeModalWindow: function () {
            if (wesreid.util.ui.modalWindow.modalViewStack.length > 0) {
                wesreid.util.ui.modalWindow.modalView = wesreid.util.ui.modalWindow.modalViewStack.pop();
                wesreid.util.ui.modalWindow.onClose = wesreid.util.ui.modalWindow.modalView.onClose;
                wesreid.util.ui.modalWindow.onLoad = wesreid.util.ui.modalWindow.modalView.onLoad;
                wesreid.util.ui.modalWindow.modalContentContainer = wesreid.util.ui.modalWindow.modalView.container;

                if (typeof wesreid.util.ui.modalWindow.onClose === "function") {
                    wesreid.util.ui.modalWindow.onClose();
                    wesreid.util.ui.modalWindow.onClose = null;
                }
                if (wesreid.util.ui.modalWindow.modalContentContainer) {
                    $(wesreid.util.ui.modalWindow.modalContentContainer).fadeOut(500);
                    $(wesreid.util.ui.modalWindow.modalContentContainer).remove();
                }
                if (wesreid.util.ui.modalWindow.screen && wesreid.util.ui.modalWindow.modalViewStack.length == 0)
                    $(wesreid.util.ui.modalWindow.screen).fadeOut(500);
                else
                    wesreid.util.ui.modalWindow.reviveContainer();
            }
        }

    },

    messageWindow: {
        messageContainer: null,
        show: function (msg, css) {
            if (!this.messageContainer) {
                this.messageContainer = $("<div class=\"messageContainer\"></div>");
                $(this.messageContainer).appendTo("body");
            }
            if (css)
                $(this.messageContainer).css(css);
            $(this.messageContainer).html(msg);
            $(this.messageContainer).fadeIn(1000);
            setTimeout("BB.messageWindow.fadeOut()", 4000);
        },
        fadeOut: function () {
            $(this.messageContainer).fadeOut(1000);
        }
    },

    dataLayer: {
        defaultPageSize: 20,
        setLookupData: function () {
            BBAPI.getMoods({ pg: 1, pgSz: 200 }, function (data) { BB.dataLayer.lookupData.moods = data.Items; });
            BBAPI.getGenres({ pg: 1, pgSz: 200 }, function (data) { BB.dataLayer.lookupData.genres = data.Items; });
        },

        setDataLayerResultset: function (data, pagingHandler, sortBy, isDescendingSort) {
            this.currentPageResultSet = data.Items;
            this.resultSetTotal = data.RecordCount;
            this.sortBy = sortBy || this.sortBy;
            this.isDescendingSort = isDescendingSort || this.isDescendingSort;
            this.pageSize = (data.PageSize > 0) ? data.PageSize : 10;
            this.setResultsPager(data.CurrentPage, pagingHandler);
        },

        getNotificationObjectById: function (id) {
            for (var i = 0; i < testData.notifications.length; i++) {
                if (testData.notifications[i].id == id)
                    return testData.notifications[i];
            }
            return null;
        },

        resultSetTotal: 0,
        pageSize: 10,
        sortBy: '',
        isDescendingSort: false,
        currentTotalPages: 0,
        currentPage: 1,
        currentPageResultSet: [],
        lookupData: {
            moods: null,
            genres: null
        },

        setResultsPager: function (currentPage, pagingHandler) {
            this.currentPage = currentPage;
            var pageCount = Math.ceil(this.resultSetTotal / this.pageSize);
            this.currentTotalPages = pageCount;
            if (pageCount == 1)
                $(".resultSetPager").hide();
            else {
                $(".resultSetPager").empty();
                $("<li class=\"header\">" + this.resultSetTotal + " results found.</li>").appendTo(".resultSetPager");
                if (this.resultSetTotal > 0) {
                    $("<li class=\"prev\">&lt;&lt;</li>").appendTo(".resultSetPager");
                    for (var i = 1; i <= pageCount; i++) {
                        var pageItem = $("<li>" + i + "</li>");
                        if (currentPage == i)
                            $(pageItem).addClass("current");
                        $(pageItem).appendTo(".resultSetPager");
                    }
                    $("<li class=\"next\">&gt;&gt;</li>").appendTo(".resultSetPager");
                    $(".resultSetPager li").click(pagingHandler);
                    $(".resultSetPager").show();
                }
            }
        }
    }
};
