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", "/img/tab_lightbox.gif");
            $('#tab_online_img').attr("src", "/img/tab_basket.gif");
            $('#tab_basket_img').attr("src", "/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});
                });
            }
        }
    },

    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", "/img/tab_subscription.gif");
        } else {
            $('#lightbox .basket-images-wrapper').show();
            $('#tab_basket_img').attr("src", "/img/tab_subscription_active.gif");
        }
        $('#tab_online_img').attr("src", "/img/tab_basket.gif");
        $('#tab_lightbox_img').attr("src", "/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", "/img/tab_lightbox.gif");
        } else {
            $('#lightbox .lightbox-images-wrapper').show();
            $('#tab_lightbox_img').attr("src", "/img/tab_lightbox_active.gif");
        }
        $('#tab_online_img').attr("src", "/img/tab_basket.gif");
        $('#tab_basket_img').attr("src", "/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", "/img/tab_basket.gif");
        } else {
            $('#lightbox .ishop-basket-images-wrapper').show();
            $('#tab_online_img').attr("src", "/img/tab_basket_active.gif");
        }
        ishopbasketVisible = $('#lightbox .ishop-basket-images-wrapper').is(':visible');
        $('#tab_lightbox_img').attr("src", "/img/tab_lightbox.gif");
        $('#tab_basket_img').attr("src", "/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() {
        //восстанавливаем значения
        $("a[rel^='addlightbox:']").each(function() {
            var imagecode = this.rel.split(":")[1];
            this.href="#";
            this.onclick=function() {lightboxWindow.addImageToLightbox(imagecode);return false;};
            this.title="Добавить в лайтбокс";
            $("img", this).attr("src", context+"/img/btn_lightbox.gif")
            $("img", this).attr("title", "Добавить в лайтбокс")

        });

        $("a[rel^='addishopbasket:']").each(function() {
            var imagecode = this.rel.split(":")[1];
            this.href="#";
            this.title="Добавить в корзину";
            this.onclick=function() {lightboxWindow.addImageToIshopBasket(imagecode);return false;};
            $("img", this).attr("src", context+"/img/btn_basket.gif")
            $("img", this).attr("title", "Добавить в корзину")
        });

        //убираем ссылки у тех, что уже в лайтбоксе
        $("#lightbox .lightbox-images-wrapper .images .lbimagecode a").each(function() {
            var imagecode = this.text;
            //ссылки в блоке операций под изображением
            $("a[rel='addlightbox:"+imagecode+"']").each(function() {
                this.href="#";
                this.title="Уже в лайтбоксе";
                this.onclick=function() {return false;};
                $("img", this).attr("src", context+"/img/btn_lightbox_disable.gif");
                $("img", this).attr("title", "Уже в лайтбоксе")
            })
        });

        //убираем ссылки у тех, что уже в корзине
        $("#lightbox .ishop-basket-images-wrapper .images .lbimagecode a").each(function() {
            var imagecode = this.text;
            //ссылки в блоке операций под изображением
            $("a[rel='addishopbasket:"+imagecode+"']").each(function() {
                this.href="#";
                this.title="Уже в корзине";
                this.onclick=function() {return false;};
                $("img", this).attr("src", context+"/img/btn_basket_disable.gif");
                $("img", this).attr("title", "Уже в корзине")
            })
        });
    },


    refreshWindow: function() {
        var w = window;
        if (window.opener) {
            w = window.opener;
        }
        $("#lightboxWrapper", w.document).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();
        });
    },

    removeImageFromIshopBasket: function(imageCode) {
        $.prompt('Удалить изображение?',
        {
            buttons: { "Да": true, "Нет": false },
            overlayspeed: "fast",
            promptspeed: "fast",
            callback: function(v, m, f) {
                if (v) {
                    UserSettings.removeImageFromIshopBasket(imageCode, function() {
                        lightboxWindow.refreshIshopBasketImages();
                        
                    });
                }
            }
        }
                );
    },

    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) {
                an = m.children('#alertName');
                if (f.myname == undefined || f.myname == "") {
                    an.css("border", "solid #ff0000 1px");
                    return false;
                }
                UserSettings.renameLightbox(f.myname, 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) {
                an = m.children('#alertName');
                if (f.myname == undefined || f.myname == "") {
                    an.css("border", "solid #ff0000 1px");
                    return false;
                }
                UserSettings.createLightbox(f.myname, function() {
                    lightboxWindow.refreshWindow();
                });
                return true;

            }
            return true;
        }

        $.prompt(txt, {
            submit: mysubmitfunc,
            overlayspeed: "fast",
            promptspeed: "fast",
            buttons: { "Ок":true, "Отмена": false }
        });
    }

};


var lightboxPage = {

    /**
     * Обновляет страицу "лайтбокс".
     */
    refreshWindow: function() {
        window.location.href='/private/lightbox.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();
        });
    },

    removeLightbox: function() {
        $.prompt('Удалить лайтбокс?',
        {
            buttons: { "Да": true, "Нет": false },
            overlayspeed: "fast",
            promptspeed: "fast",
            callback: function(v, m, f) {
                if (v) {
                    UserSettings.removeLightbox(function() {
                        lightboxPage.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) {
                an = m.children('#alertName');
                if (f.myname == undefined || f.myname == "") {
                    an.css("border", "solid #ff0000 1px");
                    return false;
                }
                UserSettings.renameLightbox(f.myname, 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 }
        });
    }

};

var ishopBasketPage = {
    /**
     * Обновляет страницу "онлайн-корзина"
     */
    refreshWindow: function() {
        window.location.href='/private/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/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();
                    });
                }
            }
        }
        );
    }
}
