var lightboxWindow = {

    visible: true,

    toggle: function() {
        var lightboxVisible = $('#lightbox .lightbox-images-wrapper').is(':visible');
        var basketVisible = $('#lightbox .basket-images-wrapper').is(':visible');
        var ishopbasketVisible = $('#lightbox .ishop-basket-images-wrapper').is(':visible');



        if (lightboxVisible || basketVisible || ishopbasketVisible) {
            UserSettings.setBasketVisible(false);
            UserSettings.setLightboxVisible(false);
            UserSettings.setIshopBasketVisible(false);
            $('#lightbox .basket-images-wrapper').hide();
            $('#lightbox .lightbox-images-wrapper').hide();
            $('#lightbox .ishop-basket-images-wrapper').hide();
            $('#tab_lightbox_img').attr("src", context+"/img/tab_lightbox.gif");
            $('#tab_online_img').attr("src", context+"/img/tab_basket.gif");
            $('#tab_basket_img').attr("src", context+"/img/tab_subscription.gif");



            this.setVisible(false);


        }
        else {
            this.switchToLightbox();
        }

        //lightboxWindow.setVisible(!this.visible);
    },

    setVisible: function(visible) {
        this.visible = visible;
        if ($('#lightbox').hasClass('right')) {
            if (this.visible) {
                $('#lightbox').animate({width: 180}, 'fast', null, function() {
                    $('#lightbox .images').show();
                    $('#lightbox .lightbox-images-cell').css({width: 155});
                });
                $('#body').animate({'marginRight': 200}, 'fast');
            }
            else {
                $('#lightbox').animate({width: 20}, 'fast', null, function() {
                    $('#lightbox .images').hide();
                    $('#lightbox .lightbox-images-cell').css({width: 0});
                });
                $('#body').animate({'marginRight': 40}, 'fast');
            }
        }
        else if ($('#lightbox').hasClass('bottom')) {
            if (this.visible) {
                $('#lightbox').animate({height: 175}, 'fast', null, function() {
                    $('#lightbox .images').show();
                    $('#lightbox .lightbox-images-cell').css({height: 155});
                });
            }
            else {
                $('#lightbox').animate({height: 20}, 'fast', null, function() {
                    $('#lightbox .images').hide();
                    $('#lightbox .lightbox-images-cell').css({height: 0});
                });
            }
        }
        var expander = $('#panelExpander');
        if (visible) {
            expander.html(visible?'Скрыть панель' : 'Развернуть панель');
            expander.removeClass('minMaxLinkMinimized').addClass('minMaxLinkExpanded');
        }
        else {
            expander.html(visible?'Скрыть панель' : 'Развернуть панель');
            expander.removeClass('minMaxLinkExpanded').addClass('minMaxLinkMinimized');
        }


    },

    isVisible: function() {
        return this.visible;
    },


    switchToBasket: function() {
        UserSettings.setLightboxVisible(false);
        UserSettings.setIshopBasketVisible(false);
        $('#lightbox .lightbox-images-wrapper').hide();
        $('#lightbox .ishop-basket-images-wrapper').hide();

        var lightboxVisible = $('#lightbox .lightbox-images-wrapper').is(':visible');
        var basketVisible = $('#lightbox .basket-images-wrapper').is(':visible');
        var ishopbasketVisible = $('#lightbox .ishop-basket-images-wrapper').is(':visible');

        if (!lightboxVisible && !basketVisible && !ishopbasketVisible) {
            lightboxWindow.setVisible(true);
        }

        UserSettings.setBasketVisible(!basketVisible);
        if (basketVisible) {
            $('#lightbox .basket-images-wrapper').hide();
            $('#tab_basket_img').attr("src", context+"/img/tab_subscription.gif");
        } else {
            $('#lightbox .basket-images-wrapper').show();
            $('#tab_basket_img').attr("src", context+"/img/tab_subscription_active.gif");
        }
        $('#tab_online_img').attr("src", context+"/img/tab_basket.gif");
        $('#tab_lightbox_img').attr("src", context+"/img/tab_lightbox.gif");
        basketVisible = $('#lightbox .basket-images-wrapper').is(':visible');

        if (!lightboxVisible && !basketVisible && !ishopbasketVisible) {
            lightboxWindow.setVisible(false);
        }
    },

    switchToLightbox: function() {
        UserSettings.setBasketVisible(false);
        UserSettings.setIshopBasketVisible(false);
        $('#lightbox .basket-images-wrapper').hide();
        $('#lightbox .ishop-basket-images-wrapper').hide();

        var lightboxVisible = $('#lightbox .lightbox-images-wrapper').is(':visible');
        var basketVisible = $('#lightbox .basket-images-wrapper').is(':visible');
        var ishopbasketVisible = $('#lightbox .ishop-basket-images-wrapper').is(':visible');

        if (!lightboxVisible && !basketVisible && !ishopbasketVisible) {
            lightboxWindow.setVisible(true);
        }

        UserSettings.setLightboxVisible(!lightboxVisible);
        if (lightboxVisible) {
            $('#lightbox .lightbox-images-wrapper').hide();
            $('#tab_lightbox_img').attr("src", context+"/img/tab_lightbox.gif");
        } else {
            $('#lightbox .lightbox-images-wrapper').show();
            $('#tab_lightbox_img').attr("src", context+"/img/tab_lightbox_active.gif");
        }
        $('#tab_online_img').attr("src", context+"/img/tab_basket.gif");
        $('#tab_basket_img').attr("src", context+"/img/tab_subscription.gif");
        lightboxVisible = $('#lightbox .lightbox-images-wrapper').is(':visible');

        if (!lightboxVisible && !basketVisible && !ishopbasketVisible) {
            lightboxWindow.setVisible(false);
        }

    },

    switchToIshopBasket: function() {
        UserSettings.setBasketVisible(false);
        UserSettings.setLightboxVisible(false);
        $('#lightbox .basket-images-wrapper').hide();
        $('#lightbox .lightbox-images-wrapper').hide();

        var lightboxVisible = $('#lightbox .lightbox-images-wrapper').is(':visible');
        var basketVisible = $('#lightbox .basket-images-wrapper').is(':visible');
        var ishopbasketVisible = $('#lightbox .ishop-basket-images-wrapper').is(':visible');

        if (!lightboxVisible && !basketVisible && !ishopbasketVisible) {
            lightboxWindow.setVisible(true);
        }

        UserSettings.setIshopBasketVisible(!ishopbasketVisible);
        if (ishopbasketVisible) {
            $('#lightbox .ishop-basket-images-wrapper').hide();
            $('#tab_online_img').attr("src", context+"/img/tab_basket.gif");
        } else {
            $('#lightbox .ishop-basket-images-wrapper').show();
            $('#tab_online_img').attr("src", context+"/img/tab_basket_active.gif");
        }
        ishopbasketVisible = $('#lightbox .ishop-basket-images-wrapper').is(':visible');
        $('#tab_lightbox_img').attr("src", context+"/img/tab_lightbox.gif");
        $('#tab_basket_img').attr("src", context+"/img/tab_subscription.gif");

        if (!lightboxVisible && !basketVisible && !ishopbasketVisible) {
            lightboxWindow.setVisible(false);
        }

    },






    setActiveLightbox : function(lightboxId) {
        UserSettings.setActiveLightbox(lightboxId, function() {
            lightboxWindow.refreshWindow();
        });
    },

    refreshLightboxImages: function() {
        var w = window;
        if (window.opener) {
            w = window.opener;
        }
        $("#lightbox .lightbox-images-wrapper .images", w.document).load(context + "/private/lightboximagesajax.jsp?random=" + Math.random()*99999, function() {
            lightboxWindow.updateImageOperations();
        });
    },

    refreshBasketImages: function() {
        var w = window;
        if (window.opener) {
            w = window.opener;
        }
        $("#lightbox .basket-images-wrapper .images", w.document).load(context + "/private/basketimagesajax.jsp"+'?random=' + Math.random()*99999, function() {
            lightboxWindow.updateImageOperations();
        });
    },

    refreshIshopBasketImages: function() {
        var w = window;
        if (window.opener) {
            w = window.opener;
        }
        $("#lightbox .ishop-basket-images-wrapper .images", w.document).load(context + "/private/ishopbasketimagesajax.jsp"+'?random=' + Math.random()*99999, function() {
            lightboxWindow.updateImageOperations();
        });
    },


    /**
     * Активирует или деактивирует кнопки "Добавить в лайтбокс", "Добавить в корзину" и тд
     * для всех изображений на странице в зависимости от
     * того, есть ли изображение в лайтбоксе (корзине) или нет.
     * Для ссылки (тега a) должен быть проставлен атрибут rel со значением
     * <ul>
     * <li>addlightbox:IMAGECODE для ссылки "добавить в лайтбокс"</li>
     * <li>addishopbasket:IMAGECODE для ссылки "добавить в корзину"</li>
     * </ul>
     * где IMAGECODE - код изображения, например,
     * <pre>
     * &lt;a href="#" onclick="..." rel="addlightbox:A000-000">...&lt;/a>
     * </pre>
     */
    updateImageOperations: function() {

        var context = window;
        lightboxWindow.updateImageOperationsInWindow(window);
        if (window.opener) {
            lightboxWindow.updateImageOperationsInWindow(window.opener);
        }

    },

    /**
     * Активирует или деактивирует кнопки "Добавить в лайтбокс", "Добавить в корзину" и тд
     * для всех изображений на странице в зависимости от
     * того, есть ли изображение в лайтбоксе (корзине) или нет.
     * Для ссылки (тега a) должен быть проставлен атрибут rel со значением
     * <ul>
     * <li>addlightbox:IMAGECODE для ссылки "добавить в лайтбокс"</li>
     * <li>addishopbasket:IMAGECODE для ссылки "добавить в корзину"</li>
     * </ul>
     * где IMAGECODE - код изображения, например,
     * <pre>
     * &lt;a href="#" onclick="..." rel="addlightbox:A000-000">...&lt;/a>
     * </pre>
     * @param window - окно, в котором следует искать ссылки.
     */
    updateImageOperationsInWindow: function(window) {

        //восстанавливаем значения
        $("a[rel^='addlightbox:']", window.document).each(function() {
            var imagecode = this.rel.split(":")[1];
            var element = $(this);
            this.onclick = function() {return false;};
            element.unbind("click");
            element.bind("click", function() {lightboxWindow.addImageToLightbox(imagecode);return false;});
            this.title="Добавить в лайтбокс";
            element.removeClass("sp-btn-addedlightbox").addClass("sp-btn-lightbox");
        });

        $("a[rel^='addishopbasket:']", window.document).each(function() {
            var element = $(this);
            var imagecode = this.rel.split(":")[1];
            this.href="#";
            this.title="Добавить в корзину";
            this.onclick = function() {return false;};
            element.unbind("click");
            element.bind("click", function() {lightboxWindow.addImageToIshopBasket(imagecode);return false;});
            $(this).removeClass("sp-btn-addedcart").addClass("sp-btn-cart");
        });

        //убираем ссылки у тех, что уже в лайтбоксе
        $("#lightbox .lightbox-images-wrapper .images .lbimagecode a", window.document).each(function() {
            var imagecode = this.text;
            //ссылки в блоке операций под изображением
            $("a[rel='addlightbox:"+imagecode+"']", window.document).each(function() {
                var element = $(this);
                this.onclick = function() {return false;};
                element.unbind("click");
                element.bind("click", false);
                this.href="#";
                this.title="Уже в лайтбоксе";
//                this.onclick=function() {return false;};
                $(this).removeClass("sp-btn-lightbox").addClass("sp-btn-addedlightbox");
            })
        });

        //убираем ссылки у тех, что уже в корзине
        $("#lightbox .ishop-basket-images-wrapper .images .lbimagecode a", window.document).each(function() {
            var imagecode = this.text;
            //ссылки в блоке операций под изображением
            $("a[rel='addishopbasket:"+imagecode+"']", window.document).each(function() {
                var element = $(this);
                this.href="#";
                this.title="Уже в корзине";
                this.onclick=function() {return false;};
                element.unbind("click");
                element.bind("click", false);
                $(this).removeClass("sp-btn-cart").addClass("sp-btn-addedcart");
            })
        });
    },


    refreshWindow: function() {
        var w = window;
        if (window.opener) {
            w = window.opener;
        }
        $("#lightboxWrapper").load(context + "/private/lightboxajax-bottom.jsp?random=" + Math.random()*99999, function() {
            lightboxWindow.updateImageOperations();
        });
    },

    addImageToLightbox: function(imageCode) {
        UserSettings.addImageToLightbox(imageCode, function() {
            lightboxWindow.refreshLightboxImages();
        });
    },

    removeImageFromLightbox: function(imageCode) {
        $.prompt('Удалить изображение?',
        {
            buttons: { "Да": true, "Нет": false },
            overlayspeed: "fast",
            promptspeed: "fast",
            callback: function(v, m, f) {
                if (v) {
                    UserSettings.removeImageFromLightbox(imageCode, function() {
                        lightboxWindow.refreshWindow();
                    });
                }
            }
        }
                );
    },

    addImageToBasket: function(imageCode) {
        UserSettings.addImageToBasket(imageCode, function() {
            lightboxWindow.refreshBasketImages();
        });
    },

    removeImageFromBasket: function(imageCode) {
        $.prompt('Удалить изображение?',
        {
            buttons: { "Да": true, "Нет": false },
            overlayspeed: "fast",
            promptspeed: "fast",
            callback: function(v, m, f) {
                if (v) {
                    UserSettings.removeImageFromBasket(imageCode, function() {
                        lightboxWindow.refreshBasketImages();
                    });
                }
            }
        }
                );
    },

    addImageToIshopBasket: function(imageCode) {
        UserSettings.addImageToIshopBasket(imageCode, function() {
            lightboxWindow.refreshIshopBasketImages();
            lightboxWindow.notifyImageAddedToIshopBasket(imageCode);
        });
    },

    removeImageFromIshopBasket: function(imageCode) {
        $.prompt('Удалить изображение?',
        {
            buttons: { "Да": true, "Нет": false },
            overlayspeed: "fast",
            promptspeed: "fast",
            callback: function(v, m, f) {
                if (v) {
                    UserSettings.removeImageFromIshopBasket(imageCode, function() {
                        lightboxWindow.refreshIshopBasketImages();
                        
                    });
                }
            }
        }
                );
    },


    /**
     * Отображает попап  с текстом "Добавлено" рядом с кнопкой "Добавить изображение в корзину"
     * @param imageCode код добавленного изображения
     */
    notifyImageAddedToIshopBasket: function(imageCode) {
        var basketUrl = context + '/private/account/ishopbasket.html';
        $('.image-result-'+imageCode+" .sp-cartadded").html('Добавлено в <a href="'+basketUrl+'">корзину</a>');

        //обновляем текст в попапе описания изображения
        $('.actionModulePad .sp-cartadded').html('Добавлено в <a ' +
                'onclick="window.opener.location.href=\''+basketUrl+'\';return false;"' +
                ' href="'+basketUrl+'">корзину</a>');
//        $('.image-result-'+imageCode+" .sp-cartadded").html('<span class="notify-popup"></span>');
    },



    removeLightbox: function() {
        $.prompt('Удалить лайтбокс?',
        {
            buttons: { "Да": true, "Нет": false },
            overlayspeed: "fast",
            promptspeed: "fast",
            callback: function(v, m, f) {
                if (v) {
                    UserSettings.removeLightbox(function() {
                        lightboxWindow.refreshWindow();
                    });
                }
            }
        }
                );
    },

    renameLightbox: function() {
        var oldName = $('#lightbox-switch :selected').text();
        var txt = 'Введите название лайтбокса:<br /> ' +
                  '<input type = "text" id = "alertName" name = "myname" value = "' +oldName + '" /> ';

        function mysubmitfunc(v, m, f) {
            if (v) {
                var an = m.children('#alertName');
                if (an.val() == undefined || an.val() == "") {
                    an.css("border", "solid #ff0000 1px");
                    return false;
                }
                UserSettings.renameLightbox(an.val(), function() {
                    lightboxWindow.refreshWindow();
                });

                return true;
            }
            return true;
        }

        $.prompt(txt, {
            submit: mysubmitfunc,
            overlayspeed: "fast",
            promptspeed: "fast",
            buttons: { "Ок":true, "Отмена": false }
        });
    },

    createLightbox: function() {
        var txt = 'Введите название лайтбокса:<br /> ' +
                  '<input type = "text" id = "alertName" name = "myname" value = "Новый лайтбокс" /> ';

        function mysubmitfunc(v, m, f) {
            if (v) {
                var an = m.children('#alertName');
                if (an.val() == undefined || an.val() == "") {
                    an.css("border", "solid #ff0000 1px");
                    return false;
                }
                UserSettings.createLightbox(an.val(), function() {
                    lightboxWindow.refreshWindow();
                });
                return true;

            }
            return true;
        }

        $.prompt(txt, {
            submit: mysubmitfunc,
            overlayspeed: "fast",
            promptspeed: "fast",
            buttons: { "Ок":true, "Отмена": false }
        });
    }

};


var lightboxPage = {

    /**
     * Перегружает текущую страницу
     */
    refreshWindow: function() {
        window.location.replace(window.location.href);
        //window.location.href='/private/account/lightbox.html';
    },


    /**
     * Загружает страницу со списоком лайтбоксов.
     */
    showLightboxesPage: function() {
        window.location.replace(context+'/private/account/lightboxes.html');
    },

    /**
     * Устанавливает активный лайтбокс. В случае удачного завершения операции перегружает страницу "лайтбокс".
     * @param lightboxId
     */
    setActiveLightbox : function(lightboxId) {
        UserSettings.setActiveLightbox(lightboxId, function() {
            lightboxPage.refreshWindow();
        });
    },


    /**
     * Удаляет изображение из лайтбокса на странице "лайтбокс". Перед удалением
     * запрашивает подтверждения операции. В случае успешного удаления перегружает страницу.
     * @param imageCode код изображения, подлежащего удалению
     */
    removeImageFromLightbox: function(imageCode) {
        $.prompt('Удалить изображение?',
        {
            buttons: { "Да": true, "Нет": false },
            overlayspeed: "fast",
            promptspeed: "fast",
            callback: function(v, m, f) {
                if (v) {
                    UserSettings.removeImageFromLightbox(imageCode, function() {
                        lightboxPage.refreshWindow();
                    });
                }
            }
        }
        );
    },


    /**
     * Добавляет изображение в онлайн-корзину. В случае успешного выполнения операции перегружает страницу "Лайтбокс".
     * @param imageCode код изображения, подлежащего добавлению
     */
    addImageToIshopBasket: function(imageCode) {
        UserSettings.addImageToIshopBasket(imageCode, function() {
            lightboxPage.refreshWindow();
        });
    },

    /**
     * Добавляет изображение в корзину. В случае успешного выполнения операции перегружает страницу "Лайтбокс".
     * @param imageCode код изображения, подлежащего добавлению
     */
    addImageToBasket: function(imageCode) {
        UserSettings.addImageToBasket(imageCode, function() {
            lightboxPage.refreshWindow();
        });
    },

    /**
     * Удаляет лайтбокс. После удаления отображает страницу со списком лайтбоксов.
     * @param lightboxId идентификатор лайтбокса
     */
    removeLightbox: function(lightboxId) {
        $.prompt('Удалить лайтбокс?',
        {
            buttons: { "Да": true, "Нет": false },
            overlayspeed: "fast",
            promptspeed: "fast",
            callback: function(v, m, f) {
                if (v) {
                    UserSettings.removeLightbox(lightboxId, function() {
                        lightboxPage.showLightboxesPage();
                    });
                }
            }
        });
    },

    /**
     * Переименовывает лайтбокс. Отображает диалоговое окно для ввода нового имени лайтбокса. По умолчанию
     * будет введено старое название лайтбокса (из параметра oldName). После переименования страница будет
     * перезагружена. 
     * @param lightboxId идентификатор лайтбокса
     * @param oldName старое название лайтбокса
     */
    renameLightbox: function(lightboxId, oldName) {
        var txt = 'Введите название лайтбокса:<br /> ' +
                  '<input type = "text" id = "alertName" name = "myname" value = "' +oldName + '" /> ';

        function mysubmitfunc(v, m, f) {
            if (v) {
                var an = m.children('#alertName');
                if (an.val() == undefined || an.val() == "") {
                    an.css("border", "solid #ff0000 1px");
                    return false;
                }
                UserSettings.renameLightbox(lightboxId, an.val(), function() {
                    lightboxPage.refreshWindow();
                });

                return true;
            }
            return true;
        }

        $.prompt(txt, {
            submit: mysubmitfunc,
            overlayspeed: "fast",
            promptspeed: "fast",
            buttons: { "Ок":true, "Отмена": false }
        });
    },

    createLightbox: function() {
        var txt = 'Введите название лайтбокса:<br /> ' +
                  '<input type = "text" id = "alertName" name = "myname" value = "Новый лайтбокс" /> ';

        function mysubmitfunc(v, m, f) {
            if (v) {
                var an = m.children('#alertName');
                if (an.val() == undefined || an.val() == "") {
                    an.css("border", "solid #ff0000 1px");
                    return false;
                }
                UserSettings.createLightbox(an.val(), function() {
                    lightboxPage.refreshWindow();
                });
                return true;

            }
            return true;
        }

        $.prompt(txt, {
            submit: mysubmitfunc,
            overlayspeed: "fast",
            promptspeed: "fast",
            buttons: { "Ок":true, "Отмена": false }
        });
    },


    printLightbox: function(lightboxId) {
         window.open(context+"/private/account/lightbox.html?id="+lightboxId+"&print=true", "lightboxPrint"+lightboxId,
                 'width=800,height=600,scrollbars=yes');
    }

};

var ishopBasketPage = {
    /**
     * Обновляет страницу "онлайн-корзина"
     */
    refreshWindow: function() {
        window.location.href='/private/account/ishopbasket.html';
    },


    /**
     * Добавляет изображение в лайтбокс. В случае успешного выполнения операции перегружает страницу "корзина".
     * @param imageCode код изображения, подлежащего добавлению
     */
    addImageToLightbox: function(imageCode) {
        UserSettings.addImageToLightbox(imageCode, function() {
            ishopBasketPage.refreshWindow();
        });
    },

    /**
     * Удаляет изображение из онлайн-корзины на странице "онлайн-корзина". Перед удалением
     * запрашивает подтверждения операции. В случае успешного удаления перегружает страницу.
     * @param imageCode код изображения, подлежащего удалению
     */
    removeImageFromIshopBasket: function(imageCode) {
        $.prompt('Удалить изображение?',
        {
            buttons: { "Да": true, "Нет": false },
            overlayspeed: "fast",
            promptspeed: "fast",
            callback: function(v, m, f) {
                if (v) {
                    UserSettings.removeImageFromIshopBasket(imageCode, function() {
                        ishopBasketPage.refreshWindow();
                    });
                }
            }
        }
        );
    }
};

var basketPage = {
    /**
     * Обновляет страницу "корзина"
     */
    refreshWindow: function() {
        window.location.href='/private/account/basket.html';
    },

    /**
     * Добавляет изображение в лайтбокс. В случае успешного выполнения операции перегружает страницу "подписка".
     * @param imageCode код изображения, подлежащего добавлению
     */
    addImageToLightbox: function(imageCode) {
        UserSettings.addImageToLightbox(imageCode, function() {
            basketPage.refreshWindow();
        });
    },


    /**
     * Удаляет изображение из корзины на странице "подписка". Перед удалением
     * запрашивает подтверждения операции. В случае успешного удаления перегружает страницу.
     * @param imageCode код изображения, подлежащего удалению
     */
    removeImageFromBasket: function(imageCode) {
        $.prompt('Удалить изображение?',
        {
            buttons: { "Да": true, "Нет": false },
            overlayspeed: "fast",
            promptspeed: "fast",
            callback: function(v, m, f) {
                if (v) {
                    UserSettings.removeImageFromBasket(imageCode, function() {
                        basketPage.refreshWindow();
                    });
                }
            }
        }
        );
    }
}

