window.addEvent('domready', function(){

    var selectedAll = false;

    /* ========= Подсказки на полях формы входа ====================*/
    if (!Modernizr.input.placeholder) {
        $$('form.login input[type=text], form.login input[type=password]').each(function(item){ new OverText(item) });
    }
    /*-------------- Подсказки на полях формы входа ---------------*/

    /* ========= Пагинация ====================*/
    var paginatorNum = $('pagination_MaxPerPage');
    if(paginatorNum) {
        paginatorNum.addEvent('change', function(e){
            $('form-paginator').submit()
        })
    }
    /*----------- Пагинации ------------------*/
    
    /* ========= Окно с фотографией ==============*/
    $$('a.link2photo').each(function(item){
        var dialog;
        var imgZoom = false;
        var listId = item.get('class').match(/listId:(\d+)/i);
        if(listId) {listId = listId[1]} else {listId = 0}
        item.addEvent('click', function(e){
            new Event(e).stop();
            var firstPhoto = true;
            var currentPhotoId = parseInt(item.name);
            var currentPhotoInx = photos[listId].indexOf(currentPhotoId);
            var scroll = document.getScroll().y;
            dialog = new MooDialog.Request(item.href, {'method': 'get'}, {
                'class': 'MooDialog scrolled',
                'closeButton': false,
                'scroll': false,
                onOpen: function(){
                    $('wrapper-container').setStyles({
                        'position': 'fixed',
                        'top': -scroll
                    });
                    this.wrapper.addClass('loading');
                    this.wrapper.addClass('scrolled');
                    this.wrapper.addClass('photo-popup');
                },
                onHide:  function(){
                    var wrapper = $('wrapper-container');
                    wrapper.setStyles({
                        'position': 'relative',
                        'top': 0
                    });
                    window.scrollTo(0,scroll);
                },
                onContentChange: function(){
                    var img = $('big-image');
                    var comments = $('comments');
                    var description = $('description');
                    img.removeEvents();
                    img.addEvent('load', function(e){
                        new Event(e).stop();
                        dialog.wrapper.removeClass('loading');
                        if(photosName) $('big-image-title').set('text', photosName[listId][currentPhotoInx]);
                        var imgSize = img.getSize();
                        var height = dialog.content.getSize().y;
                        //66 it's a summ of 2*div.content{ padding: 24px 32px;} + 2*img border 1px
	                      fx.start({
                            'width': imgSize.x+66,
                            'height': height,
                            'margin-left': -(imgSize.x+66)/2,
                            'margin-top': -Math.min(window.getSize().y/2, height/2)
                        });
                        //img.setStyle('opacity', 1);
                    })
                    
                    // Загрузка комментариев 
                    if(comments && !firstPhoto) {
                        comments.innerHTML = '';
                        new Request.HTML({
                            'url': commentsURL.replace('_id_', currentPhotoId),
                            'noCache': true, 
                            onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript){
                                comments.innerHTML = responseHTML;
                                fx.start({
                                    'height': dialog.content.getSize().y
                                });
                                CommentsRemoveInit();
                            }
                        }).get();
                    }
                    
                    // Загрузка описания
                    if(description && !firstPhoto) {
                        description.innerHTML = '';
                        new Request.HTML({
                            'url': descriptionURL.replace('_id_', currentPhotoId), 
                            onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript){
                                description.innerHTML = responseHTML;
                                fx.start({
                                    'height': dialog.content.getSize().y
                                });
                            }
                        }).get();
                    }
                    
                    
                    firstPhoto = false;
                    
                    // Добавление комментария
                    var formCommentAdd = $('form-comment-add');
                    if(formCommentAdd) {
                        formCommentAdd.addEvent('submit', function(e){
                            new Event(e).stop();
                            var text = $('comment_add_text').   get('value').trim();
                            if(text != '') {
                                this.set('send', {
                                    'url': commentsAddURL.replace('_id_', currentPhotoId),
                                    onSuccess: function(responseText, responseXML) {
                                        $('comment-loader').removeClass('loading');
                                        comments.innerHTML = responseText;
                                        fx.start({
                                            'height': dialog.content.getSize().y
                                        });
                                        CommentsRemoveInit();
                                    },
                                    onRequest: function() {
                                        $('comment_add_text').set('value', '');
                                        $('comment-loader').addClass('loading');
                                    }
                                });
                                this.send();
                            }
                        })
                    }
                    
                    // Инициализация кнопок удаления комментариев
                    var CommentsRemoveInit = function(){
                        $$('#comments a.delete').each(function(item){
                           item.removeEvents();
                           item.addEvent('click', function(e){
                                new Event(e).stop();
                                var link = this;
                                var comment = this.getParent();
                                new Request({
                                    'url': commentsDeleteURL.replace('_id_', this.get('name')),
                                    onRequest: function() {
                                        link.setStyle('display', 'none');
                                    },
                                    onSuccess: function(responseText, responseXML){
                                        new Fx.Morph(comment, {
                                             onComplete: function(){
                                                comment.destroy();
                                                fx.start({
                                                    'height': dialog.content.getSize().y
                                                });                                            
                                             }
                                        }).start({'opacity': 0});
                                    }
                                }).get();
                            })
                        })                        
                    }
                    
                    CommentsRemoveInit();
                    
                    // Кнопка Закрыть
                    var buttonClose = $('button-close');
                    buttonClose.removeEvents();
                    buttonClose.addEvent('click', function(e){
                        new Event(e).stop();
                        dialog.close();
                    });
                    // Кнопка Увеличить/уменьшить изображение
                    var buttonZoom = $('button-zoom');
                    buttonZoom.removeEvents();
                    buttonZoom.addEvent('click', function(e){
                        new Event(e).stop();
                        if(imgZoom) {
	                          img.setProperty('width', '580');
	                          this.set('text', 'Увеличить изображение');
                        } else {
                            img.setProperty('width', '800');
                            this.set('text', 'Уменьшить изображение');
                        }
                        var imgSize = img.getSize();
                        var contentSize = dialog.content.getSize();
		                    //66 it's a summ of 2*div.content{ padding: 25px 32px;} + 2*img border 1px
                        dialog.wrapper.setStyles({
                            'width': imgSize.x+66,
                            'height': contentSize.y,
                            'margin-left': -(imgSize.x+66)/2,
                            'margin-top': -Math.min(window.getSize().y/2, (contentSize.y)/2)
                        });
		                    imgZoom = !imgZoom;
                    });
                    //Кнопка Предыдущая
                    var buttonPrev = $('button-prev');
                    if(currentPhotoInx > 0) {
                        buttonPrev.setStyle('display', 'block');
                        buttonPrev.removeEvents();
                        buttonPrev.addEvent('click', function(e){
                            new Event(e).stop();
                            var prevId = photos[listId][currentPhotoInx-1];
                            img.set('src', img.src.replace(currentPhotoId, prevId));
                            //img.setStyle('opacity', 0);
                            currentPhotoInx = currentPhotoInx-1;
                            currentPhotoId = prevId;
                            dialog.fireEvent('onContentChange');
                        })
                    } else {
                        buttonPrev.setStyle('display', 'none');
                    }
                    //Кнопка Следующая
                    var buttonNext = $('button-next');
                    if(photos[listId].length > currentPhotoInx+1) {
                        buttonNext.setStyle('display', 'block');
                        buttonNext.removeEvents()
                        buttonNext.addEvent('click', function(e){
                            new Event(e).stop();
                            var nextId = photos[listId][currentPhotoInx+1];
                            img.set('src', img.src.replace(currentPhotoId, nextId));
                            //img.setStyle('opacity', 0);
                            currentPhotoInx = currentPhotoInx+1;
                            currentPhotoId = nextId;
                            dialog.fireEvent('onContentChange');
                        })
                    }else {
                        buttonNext.setStyle('display', 'none');
                    }
                    //Переключение фото при клике по превьюшкам (при просмотре товара)
                    $$('.MooDialog a.thumb').each(function(item){
                        item.removeEvents();
                        item.addEvent('click', function(e){
                            e.stop();
                            item.getParent().addClass('current');
                            img.set('src', item.get('href'));
                            currentPhotoId = parseInt(item.get('name'));
                            currentPhotoInx = photos[listId].indexOf(currentPhotoId);
                            dialog.fireEvent('onContentChange');
                        })
                    });
                    // Черно-белые превьюшки
                    $$('.MooDialog .product-thumb img').each(function(item){
                        item.removeEvents();
                        if(item.get('name') != currentPhotoId) {
                            if(item.complete) {item.toGreyscale()}
                            else {item.addEvent('load', function(){item.toGreyscale()})};
                        } else {
                            if(item.complete) {item.toSaturated()}
                            else {item.addEvent('load', function(){item.toSaturated()})};
                        }
                    })
                }
            });
            var fx = new Fx.Morph(dialog, {
                onComplete: function(){
                    var image = $('big-image');
                    if(image) image.setStyle('display', 'block');
                },
                link: 'chain'
            });
        })
    })
    /* -------------- Окно с фотографией -------------------*/
    
    /*================= Удалить фото ====================*/
    $$('a.delete-photo').each(function(item){
        var name = item.getParent().getParent().getElement('.caption a').get('text');
        item.confirmLinkClick("Удалить фотографию "+name+"?", {
            "okText": "Удалить",
            "cancelText": "Отменить",
            "closeButton": false
        });
    })
    /*------------------ Удалить фото -------------------*/
    
    /*================= Удалить альбом ==================*/
    $$('a.delete-album').each(function(item){
        var name = item.getParent().getParent().getElement('.caption a').get('text');
        item.confirmLinkClick("Удалить альбом "+name+"?", {
            "okText": "Удалить",
            "cancelText": "Отменить",
            "closeButton": false
        });
    })
    /*------------------- Удалить альбом ------------------*/
    
    /*============== Удалить сообщение ===================*/
    $$('a.delete-message').each(function(item){
        item.confirmLinkClick("Удалить сообщение?", {
            "okText": "Удалить",
            "cancelText": "Отменить",
            "closeButton": false
        });
    })
    /*--------------- Удалить сообщение --------------------*/
    
    /*================ Удалить друга =======================*/
    $$('a.delete-friend').each(function(item){
        var name = item.getParent().getElement('a.username').get('text');
        var avatar = item.getParent().getElement('a.avatar img').get('src');
        
        item.addEvent("click", function(e){
            e.stop();
            
            var img = new Element('img', {
                'src': avatar,
                'width': 140,
                'height': 140,
                'alt': name
            })
            
            var avatarDiv = new Element('div', {
                'class': 'avatar'
            }).adopt(img);
            
            new MooDialog.Confirm('Удалить '+name+' из списка друзей?',
                function(){
                    location.href = this.get('href');
                }.bind(this),
                function(){
                },{
                "okText": "Удалить",
                "cancelText": "Отменить",
                "closeButton": false,
                onOpen: function(){
                    this.content.getElement('p').adopt(avatarDiv);
                }
            });
        })
    })
    /*--------------------- Удалить друга ----------------------*/

    /*============== Удалить продукт ===================*/
    $$('a.delete-product').each(function(item){
        item.confirmLinkClick("Удалить продукт?", {
            "okText": "Удалить",
            "cancelText": "Отменить",
            "closeButton": false
        });
    })
    /*--------------- Удалить сообщение --------------------*/

    /*================= Выбрать все ====================*/
    var selectAll = $('select-all');
    if(selectAll) {
        selectAll.addEvent('click', function(e){
            new Event(e).stop();
            select = $$('input.select');
            select.each(function(item){
                item.setProperty('checked', !selectedAll);
            })        
            selectedAll = !selectedAll;
        })
    }
    /*----------------- Выбрать все -----------------------*/
    
    /*================= Изменить порядок ==================*/
    var ordering = $('ordering');
    if(ordering) {
        ordering.addEvent('click', function(e){
            new Event(e).stop();
            var form = $('form-group');
            form.setProperty('action', ActionOrdering);
            form.submit();
        })
    }
    /*-------------------- Изменить порядок ------------------*/
    
    /*============== Удалить выбранное ======================*/
    var selectedDelete = $('selected-delete');
    if(selectedDelete) {
        selectedDelete.addEvent('click', function(e){
            new Event(e).stop();
            var form = $('form-group');
            form.setProperty('action', ActionDelete);
            new MooDialog.Confirm('Удалить выбранные объекты?',
                function(){
                    form.submit();
                },
                function(){
                    return false;
                },
                {
                    "okText": "Удалить",
                    "closeButton": false                
                }
            );
        })
    }
    /*---------------- Удалить выбранное ------------------*/
    
    /*======== Модальное окно с результатом запроса  ========*/
    var modalRequest = function(item, requestUrl, requestOptions){
        var scroll = document.getScroll().y;
        if(item.hasClass('big')) {
            var width = 660;
        } else {
            var width = 460;
        }
        var dialog = new MooDialog.Request(requestUrl, requestOptions, {
            'class': 'MooDialog scrolled',
            'closeButton': false,
            'scroll': false,
            'destroyOnClose': false,
            onOpen: function(){
                $('wrapper-container').setStyles({
                    'position': 'fixed',
                    'top': -scroll
                });
                this.wrapper.addClass('loading');
            },
            onHide: function(){
                $('wrapper-container').setStyles({
                    'position': 'relative',
                    'top': 0
                });
                window.scrollTo(0,scroll);
            },
            onContentChange: function(){
                var firstCall = true; // Предотварщает зацикливание событий в IE
                this.wrapper.removeClass('loading');
                var fx = new Fx.Morph(this.wrapper, {
                    onComplete: function() {
                        if(firstCall) {
                        var height = dialog.wrapper.getElement('.content').getSize().y;
                        fx.start({
                            'height': height,
                            'margin-top': -Math.min(window.getSize().y/2, height/2)
                        })
                        firstCall = false;
                        }
                    }
                });
                fx.start({
                    'width': width,
                    'margin-left': -width/2
                })

                // Кнопка Закрыть
                var buttonClose = this.wrapper.getElement('.button-close');
                if(buttonClose) {
                    buttonClose.addEvent('click', function(e){
                        new Event(e).stop();
                        dialog.close();
                    });
                }

                // При отправке формы внутри окна, показывать картинку-загрузчик
                this.wrapper.getElements('form').each(function(form){
                    form.addEvent('submit', function(e){
                        dialog.wrapper.getElement('.content').setStyle('display', 'none');
                        dialog.wrapper.addClass('loading');
                    })
                })

                // Обработка для формы сообщения
                var MessageForm = dialog.wrapper.getElement('.message form');
                if(MessageForm) {
                    var messageSubject = $('message_subject');
                    var messageText = $('message_text');
                    inputHint(messageSubject, 'Тема');
                    inputHint(messageText, 'Текст сообщения');
                }
            }
        });

        // Подсказка для поля ввода
        // Отображается в поле когда оно пустое
        function inputHint(input, text)
        {
            input.set('value', text);
            input.addClass('input-empty');
            input.addEvent('blur', function(e){
                if(this.get('value') == '') {
                    this.set('value', text);
                    this.addClass('input-empty');
                }
            })
            input.addEvent('focus', function(e){
                if(this.get('value') == text) {
                    this.set('value', '');
                    this.removeClass('input-empty');
                }
            })
            // Подсказки не должны отправляться как данные формы
            input.form.addEvent('submit', function(e){
                if(input.get('value') == text) {
                    input.set('value', '');
                    input.removeClass('input-empty');
                    if(input.get('required')) {
                        new Event(e).stop();
                        dialog.wrapper.getElement('.content').setStyle('display', 'block');
                        dialog.wrapper.removeClass('loading');
                    }
                }
            })
        }            
    }
    /*------------- Модальное окно с результатом запроса  ----------*/
    
    /*===== Открывать ссылки c классом popup в модальном окне =====*/
    $$('a.popup').each(function(item){
        item.addEvent('click', function(e){ 
            new Event(e).stop();
            modalRequest(item, item.get('href'), {'method': 'get'})
        }) ;
    })
    /*---- Открывать ссылки c классом popup в модальном окне ----*/

    /*===== Открывать результаты обработки форм с классом popup в модальном окне =====*/
    $$('form.popup').each(function(item){
        item.addEvent('submit', function(e){
            new Event(e).stop();
            modalRequest(item, item.get('action'), {
                'method': 'post',
                'data': item.toQueryString()
            }) 
        }) ;
    })
    /*---- Открывать результаты обработки форм с классом popup в модальном окне ----*/

    /*=== Ссылки с классом iframe открывать в модальном окне MooDialog.IFrame ====*/
    $$('a.iframe').each(function(link){
        link.addEvent('click', function(e){
            new Event(e).stop();
            var scroll = document.getScroll().y;
            dialog = new MooDialog.IFrame(this.href, {
                'closeButton': false,
                'useScrollBar': false,
                onOpen: function() {
                    $('wrapper-container').setStyles({
                        'position': 'fixed',
                        'top': -scroll
                    });
                    this.content.addClass('loading');
                    this.wrapper.addClass('scrolled');

                    var fx = new Fx.Morph(this.wrapper, {
                        onComplete: function() {
                            // Тут были странные ошибки, которые не влияли на работу,
                            // поэтому использовано их "гашение"
                            Function.attempt(function(){
                                var height = iframe.contentDocument.getElement('.content').getSize().y;
                                iframe.setStyle('height', height);
                                fx.start({
                                    'height': height + 52,
                                    'margin-top': -Math.min(window.getSize().y/2, height/2)
                                })
                            })
                        }
                    });

                    var iframe = new IFrame(this.content.getElement('iframe'));
                    iframe.addEvent('load', function(){
                        dialog.content.removeClass('loading');
                        // Изменить размер окна
                        fx.start({
                            'width': 660,
                            'margin-left': -660/2
                        });
                        // Пагинация
                        var paginatorNum = iframe.contentDocument.getElement('#pagination_MaxPerPage');
                        if(paginatorNum) {
                            paginatorNum.addEvent('change', function(e){
                                iframe.contentDocument.getElement('#form-paginator').submit()
                            })
                        }
                        // Кнопка Закрыть
                        var bottomClose = iframe.contentDocument.getElement('.button-close');
                        if(bottomClose) {
                            bottomClose.addEvent('click', function(e){
                                new Event(e).stop();
                                dialog.close();
                            })
                        }
                    })                    
                },
                onHide:  function(){
                    $('wrapper-container').setStyles({
                        'position': 'relative',
                        'top': 0
                    });
                    window.scrollTo(0,scroll);
                }
            });
        })
    });
    /*---- Ссылки с классом iframe открывать в модальном окне MooDialog.IFrame ----*/
    
    /* ==== Развернуть/свернуть портфолио ====*/
    var portfolioFullButton = $('portfolio-full-button');
    if (portfolioFullButton) {
        var portfolioOpen = false;
        var portfolioHeight = $('portfolio-wrapper').getSize().y;
        var portfolioFx = new Fx.Tween('portfolio-full', {'property': 'height'});
        portfolioFullButton.addEvent('click', function(e){
            e.stop();
            if(portfolioOpen) {
                portfolioOpen = false;
                portfolioFullButton.set('class', 'portfolio-open-button');
                portfolioFx.start(portfolioHeight, 0);
            } else {
                portfolioOpen = true;
                portfolioFullButton.set('class', 'portfolio-close-button');
                portfolioFx.start(0, portfolioHeight);
            }
        })
    }
    /* ---- Развернуть/свернуть портфолио ----*/
    
    // Подсказки на картинках-статусах и подарках
    new FloatingTips('img.status');

})

