(function ($) {
    "use strict";

    var popBox = {
        wrap: function () {
            return $('.popbox-wrapper')
        },
        innerHtml: function (html) {
            if (html) $('.popbox-wrapper .popbox-inner').html(html);
            return $('.popbox-wrapper .popbox-inner').html()
        },
        overlay: function () {
            return $('.popbox-overlay')
        },
        open: function (options) {

            options = options || {};

            $('input, a, button').blur();

            var innerHTML,
                wrap = $('<div class="popbox-wrapper ' + (options.cssClass ? options.cssClass : '') + '"></div>'),
                overlay = $('<div class="popbox-overlay"></div>'),
                closeBtn = $('<i class="popbox-close vcm-ic-close"></i>'),
                popHeight = (options.height ? options.height : "640px" ),
                popWidth = (options.width ? options.width:"640px" ),
                body = $('body');

            $(wrap).css("height", parseInt(popHeight) > window.innerHeight ? "100%" : popHeight);
            $(wrap).css("width", parseInt(popWidth) > window.innerWidth ? "100%" : popWidth);

            if (options.html) innerHTML = options.html;

            if (options.header) {
                var header = $('<div/>')
                    .addClass('popbox-header')
                    .html(options.header);
                if (!options.closeBtn) header.append(closeBtn);
                wrap.append(header);
            } else {
                wrap.addClass("no-header");
                if (!options.hideClose) wrap.append(closeBtn.addClass("floating-close"));
            }

            if (options.iframe) {

                var ifrm = $('<iframe id="popBoxIframe" onload="popBox.onFrameLoaded()"></iframe>');

                ifrm.attr({
                    src: options.iframe
                });

                wrap.append($('<div/>')
                    .addClass('iframe-waiting')
                    .html('<div class="popbox-preloader"><i class="vcm-ic-spin2"></i></div>').attr("style", "height: 100%;text-align: center;"));
                innerHTML = $("<div/>").append(ifrm).html();

            }

            if (options.onCloase) {
                wrap.attr('data-onclose', options.onCloase);
            }

            wrap.append($('<div/>').addClass('popbox-inner').html(innerHTML));

            $(closeBtn).on('click', function () {
                wrap.removeClass('zoomIn').addClass('bounceOut');
                setTimeout(function () {
                    //TODO: checkThIS
                    //$($('.' + $(element).attr("class").split(' ').join('.'))[0]).trigger("onPopBox:close", element);
                }, 10);
                popBox.close();
            });

            $(document).keyup(function (e) {
                if (e.keyCode === 27) {
                    wrap.removeClass('zoomIn').addClass('bounceOut');
                    setTimeout(function () {
                        //$($('.' + $(element).attr("class").split(' ').join('.'))[0]).trigger("onPopBox:close", element);
                    }, 10);
                    popBox.close();
                }
            });

            $.Deferred(
                function () {
                    body.append(overlay);
                    body.append(wrap);
                    body.css("overflow", "hidden");
                    //if (isAppleOs) {
                    //    $("html").css("overflow-y", "hidden");
                    //    body.css("position", "fixed");
                    //    body.css("width", "100%");
                    //}
                }
            );

            $.when().then(function () {
            //    $($('.' + $(element).attr("class").split(' ').join('.'))[0]).trigger("onPopBox:open", element);

                if (options.onOpen) {
                    options.onOpen();
                }

            });

            if (!options.overlayExit) {
                $(overlay).fadeIn(500, function () {
                    $(wrap).fadeIn(350);
                });
            }

            if (options.closeOnOverlay) {
                $('.popbox-overlay').on('click', function () {
                    setTimeout(function () {
                        //$($('.' + $(element).attr("class").split(' ').join('.'))[0]).trigger("onPopBox:close", element);
                    }, 10);
                    popBox.close();
                });
            }

        },
        close: function () {
            $(popBox.wrap()).fadeOut(300, function () {
            //nxFunctions.removeURLParameter('action');
                $(popBox.overlay()).fadeOut(200, function () {
                    $('html, body').css("overflow", "");
                    $('body').css("position", "");
                    $('body').css("width", "");

                    if (popBox.wrap().data("onclose")) {
                        eval(popBox.wrap().data("onclose"));
                    }

                    popBox.overlay().remove();
                    popBox.wrap().remove();
                });
            });
        },
        addAlert: function (msg) {
            this.addNotification('alert', msg);
        },
        closeNotification: function () {
            $("ul.popbox-alert-list").remove();
            popBox.wrap().removeClass("show-alert");
        },
        addNotification: function (type, msg) {
            if (!popBox.wrap().hasClass("show-alert")) {
                popBox.wrap().addClass("show-alert");
                $("<ul/>").addClass("popbox-alert-list").appendTo($(popBox.wrap()).find('.popbox-inner'));
            }

            $("ul.popbox-alert-list").append($("<li/>").html(""
                + "<p>" + msg + "</p>").addClass(type));

            $("ul.popbox-alert-list .close_alert").on('click', function () {
                popBox.addNotification.close($(this));
            });

            $("ul.popbox-alert-list .close_alert").each(function () {
                var lineAlert = $(this);
                setTimeout(function () {
                    popBox.addNotification.close(lineAlert);
                }, 2000);
            });

        

            popBox.addNotification.close = function (lineAlert) {
                $(lineAlert).parent().fadeOut(200, function () {
                    $(lineAlert).remove();
                    if ($("ul.popbox-alert-list").children().length == 0) {
                        $("ul.popbox-alert-list").remove();
                        popBox.wrap().removeClass("show-alert");
                    }
                });
            }

            setTimeout(function () {
                vcApp.popBox.closeNotification();
            }, 2000);
        },
        showPreloader: function (msg) {

            if (!popBox.wrap().hasClass("show-preloader")) {
                popBox.wrap().addClass("show-preloader");
                $(popBox.wrap()).find('.popbox-inner').append($("<div/>").addClass("popbox-preloader"));
            }

            $(".popbox-preloader").append(
                $("<div/>").addClass("preloader-bg")
            );
            $(".preloader-bg").append(
                $("<i/>").attr("class", "vcm-ic-spin2")
            );

            this.showPreloader.close = function () {
                $(".popbox-preloader").fadeOut(200, function () {
                    popBox.wrap().removeClass("show-preloader");
                    $(".popbox-preloader").remove();
                });
            }

            this.showPreloader.isOpen = function () {
                if ($('body').find(".popbox-preloader").length === 0) return false;
                else return true
            }

            return true;

        },
        hidePreloader: function () {
            $(".popbox-preloader").fadeOut(200, function () {
                popBox.wrap().removeClass("show-preloader");
                $(".popbox-preloader").remove();
            });
        },
        addSuccess: function (msg) {
            this.addNotification('success', msg);
        },
        addNotificationOverlay: function () {

            if (!popBox.wrap().hasClass("show-overlay")) {
                popBox.wrap().addClass("show-overlay");
                $(popBox.wrap()).find('.popbox-inner').append($("<div/>").addClass("popbox-overlay"));
            }

        },
        isOpen: function () {
            if ($('body').find(".popbox-wrapper").length === 0) return false;
            else return true;
        },
        onFrameLoaded: function () {
            $('.iframe-waiting').remove();
        }
    }

    if (!window.vcApp) {
        window.vcApp = {};
    }
    
    vcApp.popBox = popBox;

})(jQuery);