var Const = Object();
Const.books = [];




    var bindBooksLoadEvents = function()
    {
        
        
        BindList('.books-lib-save-links', booklibslist);

        
        BindList('.review-save-links', bookreviewslist);

        
        BindList('.tags-save-links', booktagslist);

        
        BindList('.seluser-save-links', seluserslist);

        
        BindList('.seluser-dismiss-links', selusersdismisslist);

        
        BindList('.status-save-links', bookstatuseslist);
        
        
        BindList('.myreview-links', addbookreviewslist);

        
        BindList('.review-cancel-links', cancelbookreviewslist);

        
        
        
        
        
        
        BindList('.review-kick', reviewkicklist);
        BindList('.quote-kick', quotekicklist);
        BindList('.selection-kick', selectionkicklist);

        
        if ($('my-book-list-form'))
        {
            $('my-book-list-select').removeEvent('change', mybooklist.send);
            $('my-book-list-select').addEvent('change', mybooklist.send);
        }

        
        if ($('my-selection-book-list-form'))
        {
            $('my-selection-book-list-select').removeEvent('change', myselectionbooklist.send);
            $('my-selection-book-list-select').addEvent('change', myselectionbooklist.send);
        }

        
        if ($('date-save-a'))
        {
            $('date-save-a').removeEvent('click', userbookdate.send);
            $('date-save-a').addEvent('click', userbookdate.send);
        }
        
        
        if ($('rating-save-a'))
        {
            $('rating-save-a').removeEvent('click', userbookrating.send);
            $('rating-save-a').addEvent('click', userbookrating.send);
        }
        
        if ($('a_ebook_download'))
        {
            $('a_ebook_download').addEvent('click', get_ebook_links);
        }
        
        if ($('a_wish_ebook_download'))
        {
            $('a_wish_ebook_download').addEvent('click', get_wish_ebook_links);
        }

    }
    BooksJSLoaded = true;
    
    function get_ebook_links()
    {
        url     = '/book/getelinks';
        pars    = { book_id: $('a_ebook_download').name, source: 'book_index'};
                
        myAjax  = new Json.Remote(url, {method: 'post', onComplete: bind_ebook_links, onRequest: initAd, onSuccess: closeAd, onFailure: failure}
        ).send(pars);

        return false;
    }
    
    function get_wish_ebook_links()
    {
        url     = '/book/getelinks';
        pars    = { ebook_id: $('a_wish_ebook_download').name, source: 'book_wish_list'};
        
        myAjax  = new Json.Remote(url, {method: 'post', onComplete: bind_ebook_links, onRequest: initAd, onSuccess: closeAd, onFailure: failure}
        ).send(pars);

        return false;
    }

    function bind_ebook_links(originalRequest)
    {

        
        data = originalRequest;
        
        if (data.html)
        {
            $('ebook-links').innerHTML = data.html;
            if ($('a_ebook_download')) xhide('a_ebook_download');
            if ($('a_wish_ebook_download')) xhide('a_wish_ebook_download');
        }
               
        location.href = "#e_books";
        return;
    }

    
    
    
    
    var MyBookListClass = new Class({
        initialize:function()
        {
        },

        processUpdate: function(originalRequest)
        {
            
            
            data = originalRequest;
            if (data.message)
            {
                messageobj.display(data.message);
                if ($('top-anchor')) location.href = '#top-anchor';
                return;
            }
            
            if (true || data.action == 'delete') 
            {
                
                
                deleted_ids = data.deleted_ids.split(',');
                
                for (i = 0; i < deleted_ids.length; i++)
                {
                    if (deleted_ids[i] > 0)
                    {
                        
                        if ( $('my-book-list-tr-' + deleted_ids[i]) )
                        {
                            
                            $('my-book-list-tr-' + deleted_ids[i]).remove();
                        }
                        if ( $('my-book-list-review-tr-' + deleted_ids[i]) )
                        {
                            
                            $('my-book-list-review-tr-' + deleted_ids[i]).remove();
                        }
                    }
                }
                
                
                
            }
        },

        send: function()
        {
            var dropdown = $('my-book-list-select');
            var action_id = dropdown.options[dropdown.selectedIndex].value;
            var action_text = dropdown.options[dropdown.selectedIndex].text;
            
            if (!action_id || action_id == '0') return false;
            
            ids = '';
            $$('.my-book-list-checkbox').each(function(item) {
                book_id = item.id.substr(item.id.lastIndexOf('-') + 1);
                if (item.checked)
                {
                    ids += book_id + ',';
                }
            });
            
            if (ids == '')
            {
                alert('Выберите одну или несколько книг');
                
                $('my-book-list-form').reset();
                return;
            }

            if (action_id == 'delete')
            {
                url = '/book/del';
                if (confirm('Вы уверены, что хотите удалить выбранные книги?'))
                {
                    pars = {act: 'delete', book_ids: strToQueryString(ids)};
                    myAjax = new Json.Remote(
                        url,
                        {method: 'post', onComplete: mybooklist.processUpdate, onRequest: initAd, onSuccess: closeAd, onFailure: failure}
                    ).send(pars);
                }
            }
            else
            {
                url = '/selection/addmybooks';
                if (confirm('Вы уверены, что хотите добавить выбранные книги в подборку?'))
                {
                    pars = {act: 'delete', book_ids: strToQueryString(ids), selection_id: action_id};
                    myAjax = new Json.Remote(
                        url,
                        {method: 'post', onComplete: mybooklist.processUpdate, onRequest: initAd, onSuccess: closeAd, onFailure: failure}
                    ).send(pars);
                }
            }
            
            $('my-book-list-form').reset();
        }
    });
    mybooklist = new MyBookListClass();

    
    
    
    var BookLib = new Class({
        initialize:function(book_id)
        {
            this.book_id = book_id
        },

        processUpdate: function(originalRequest)
        {
            xhide('book-lib-loading-' + this.book_id);
            xshow('books-lib-save-' + this.book_id);
            xhide('book-lib-' + this.book_id + '-edit');
            xshow('book-lib-' + this.book_id + '-show');
            
            
            data = originalRequest;

            if (data.message)
            {
                messageobj.display(data.message);
                return;
            }
            $(data.elem_id).setHTML(data.html);
            
        },

        send: function()
        {
            xhide('books-lib-save-' + this.book_id);
            xshow('book-lib-loading-' + this.book_id);
            
            
            pars = { 
                'lib-edit': 'edit', 
                book: {id: this.book_id}, 
                lib: {
                    paper: $('lib-paper-' + this.book_id).checked, 
                    ebook: $('lib-ebook-' + this.book_id).checked, 
                    audio: $('lib-audio-' + this.book_id).checked
                }
            };
            url = '/book/edit/' + this.book_id;
            
            myAjax = new Json.Remote(
                url,
                {method: 'post', onComplete: this.processUpdate.bind(this), onRequest: initAd, onSuccess: closeAd, onFailure: failure}
            ).send(pars);
            
            return false;
        }
    });

    
    
    
    booklibslist = new LiveLibListClass('click', BookLib);

    
    
    
    var BookReview = new Class({
        initialize:function(book_id)
        {
            this.book_id = book_id;
        },

        processUpdate: function(originalRequest)
        {
            
            
            xshow('review-save-' + this.book_id);
            xhide('review-loading-' + this.book_id);
            xshow('review-show-' + this.book_id);
            xhide('review-edit-' + this.book_id);

            
            data = originalRequest;
            if (data.message)
            {
                messageobj.display(data.message);
                return;
            }

            if (data.html == '')
            {
                xhide( 'my-book-list-review-tr-' + this.book_id );
                if ($('myreview-link-' + this.book_id))
                {
                    xshow( 'myreview-link-' + this.book_id );
                }
                $('review-text-old-' + this.book_id).value = '';
                $('review-text-' + this.book_id).value = '';
            }
            else
            {
                
                $(data.elem_id).setHTML(data.html);
                
                $('review-text-old-' + this.book_id).value = data.html; 
                $('review-text-' + this.book_id).value = data.html;
            }
            
            
            
            
            if (data.other != 0)
            {
                $('review-id-' + this.book_id).value = data.other;
                
                if ($('debateslink-' + this.book_id))
                    $('debateslink-' + this.book_id).setProperty('href', '/debates/' + data.other);

                
                
                

                if ($('debatesreviewanswer-' + this.book_id))
                    $('debatesreviewanswer-' + this.book_id).setProperty('href', '/review/answer/' + data.other);

                
                
                    
                    
                    

                    
                    

                    
                    
                    
                    
                    
                    

                    
                    
                    
                    
                    
                
            }

            

            
        },

        send: function()
        {
            xhide('review-save-' + this.book_id);
            xshow('review-loading-' + this.book_id);
            
            
            
            
            pars = {
                'review-edit': 'edit', 
                book: {
                    
                    review_id: $('review-id-' + this.book_id).value,
                    element_id: this.book_id,
                    review: strToQueryString($('review-text-' + this.book_id).value),
                    review_url: strToQueryString($('review-url-' + this.book_id).value)
                }
            };
            
            url = $('review-form-' + this.book_id).action;
            
            
            
            myAjax = new Json.Remote(
                url,
                {method: 'post', onComplete: this.processUpdate.bind(this), onRequest: initAd, onSuccess: closeAd, onFailure: failure}
            ).send(pars);
            return false;
        }
    });

    
    
    
    bookreviewslist = new LiveLibListClass('click', BookReview);

    
    
    
    var AddBookReview = new Class({
        initialize:function(book_id)
        {
            this.book_id = book_id
        },

        send: function()
        {
            
            
            xshow('my-book-list-review-tr-' + this.book_id);
            xshow('review-save-' + this.book_id);
            xshow('review-edit-' + this.book_id);
            xhide('myreview-link-' + this.book_id);
            xhide('review-show-' + this.book_id);
            
        }

    });

    
    
    
    addbookreviewslist = new LiveLibListClass('click', AddBookReview);

    
    
    
    var CancelBookReview = new Class({
        initialize:function(book_id)
        {
            this.book_id = book_id
        },

        send: function()
        {
            
            
            xshow('review-show-' + this.book_id); 
            xhide('review-edit-' + this.book_id);
            
            $('review-text-' + this.book_id).value = $('review-text-old-' + this.book_id).value;
            if ( $('review-text-' + this.book_id).value == '' )
            {
                xhide('my-book-list-review-tr-' + this.book_id);
                xhide('review-save-' + this.book_id);
                xhide('review-edit-' + this.book_id);
                xshow('myreview-link-' + this.book_id);
                xshow('review-show-' + this.book_id);

            }
        }

    });

    
    
    
    cancelbookreviewslist = new LiveLibListClass('click', CancelBookReview);

    

    

    

    

    
    

    var ReviewKick = new Class({
        initialize: function(review_id)
        {
            this.review_id = review_id;
        },

        processUpdate: function(originalRequest)
        {
            data = originalRequest;
            

            
            
            
            

            if (data.message)
            {
                messageobj.display(data.message);
                return;
            }

            xhide($('span-review-kick-' + data.review_id));
            
        },

        send: function()
        {
            if (!confirm("Изменить статус рецензии?")) return;

            url = '/review/kick/' + this.review_id;
            myAjax = new Json.Remote(
                url,
                {method: 'post', onComplete: this.processUpdate.bind(this), onRequest: initAd, onSuccess: closeAd, onFailure: failure}
            ).send();
            return false;
        }

    });
    reviewkicklist = new LiveLibListClass('click', ReviewKick);

    var QuoteKick = new Class({
        initialize: function(quote_id)
        {
            this.quote_id = quote_id;
        },

        processUpdate: function(originalRequest)
        {
            data = originalRequest;
            

            
            
            
            

            if (data.message)
            {
                messageobj.display(data.message);
                return;
            }

            xhide($('span-quote-kick-' + data.quote_id));
        },

        send: function()
        {
            if (!confirm("Изменить статус цитаты?")) return;

            url = '/quote/kick/' + this.quote_id;
            myAjax = new Json.Remote(
                url,
                {method: 'post', onComplete: this.processUpdate.bind(this), onRequest: initAd, onSuccess: closeAd, onFailure: failure}
            ).send();
            return false;
        }

    });
    quotekicklist = new LiveLibListClass('click', QuoteKick);


    var SelectionKick = new Class({
        initialize: function(selection_id)
        {
            this.selection_id = selection_id;
        },

        processUpdate: function(originalRequest)
        {
            data = originalRequest;
            

            
            
            
            

            if (data.message)
            {
                messageobj.display(data.message);
                return;
            }

            xhide($('span-selection-kick-' + data.selection_id));
        },

        send: function()
        {
            if (!confirm("Изменить статус подборки?")) return;

            url = '/selection/kick/' + this.selection_id;
            myAjax = new Json.Remote(
                url,
                {method: 'post', onComplete: this.processUpdate.bind(this), onRequest: initAd, onSuccess: closeAd, onFailure: failure}
            ).send();
            return false;
        }

    });
    selectionkicklist = new LiveLibListClass('click', SelectionKick);

    
    
    
    var BookTags = new Class({
        initialize:function(book_id)
        {
            this.book_id = book_id
        },

        processUpdate: function(originalRequest)
        {
            
            
            xshow('tags-save-' + this.book_id);
            xhide('tags-loading-' + this.book_id);
            xshow('tags-show-' + this.book_id);
            xhide('tags-edit-' + this.book_id);

            
            data = originalRequest;

            if (data.message)
            {
                messageobj.display(data.message);
                return;
            }
            $(data.elem_id).setHTML(data.html);
            $('tags-form-text-' + this.book_id).value = data.other;

            

            
        },

        send: function()
        {
            xhide('tags-save-' + this.book_id);
            xshow('tags-loading-' + this.book_id);
            
            pars = {
                'tags-edit': 'edit', 
                book: {
                    id: this.book_id,
                    tags: strToQueryString($('tags-form-text-' + this.book_id).value)
                }
            };
            url = '/book/edit/' + this.book_id;
            
            myAjax = new Json.Remote(
                url,
                {method: 'post', onComplete: this.processUpdate.bind(this), onRequest: initAd, onSuccess: closeAd, onFailure: failure}
            ).send(pars);
            return false;
        }
    });
    booktagslist = new LiveLibListClass('click', BookTags);

    var SelUsers = new Class({
        initialize:function(selection_id)
        {
            this.selection_id = selection_id
        },

        processUpdate: function(originalRequest)
        {
            
            
            xshow('seluser-link-' + this.selection_id);
            xhide('seluser-edit-' + this.selection_id);
            xhide('seluser-loading-' + this.selection_id);

            
            data = originalRequest;

            if (data.message)
            {
                messageobj.display(data.message);
                return;
            }
        },

        send: function()
        {
            xhide('seluser-edit-' + this.selection_id);
            xshow('seluser-loading-' + this.selection_id);
            pars = {
                selection: {
                    id: this.selection_id,
                    login: strToQueryString($('seluser-form-text-' + this.selection_id).value)
                }
            };
            url = '/selection/invite/' + this.selection_id;
            
            myAjax = new Json.Remote(
                url,
                {method: 'post', onComplete: this.processUpdate.bind(this), onRequest: initAd, onSuccess: closeAd, onFailure: failure}
            ).send(pars);
            
            $('seluser-form-' + this.selection_id).reset();
            
            return false;
        }
    });
    seluserslist = new LiveLibListClass('click', SelUsers);

    var SelUsersDismiss = new Class({
        initialize:function(seluser_id)
        {
            this.seluser_id = seluser_id
        },

        processUpdate: function(originalRequest)
        {
            xhide('seluser-' + this.seluser_id);
            xhide('seluser-dismiss-loading-' + this.seluser_id);

            
            data = originalRequest;

            if (data.message)
            {
                messageobj.display(data.message);
                return;
            }
        },

        send: function()
        {
            if (!confirm('Вы уверены, что хотите отменить приглашение?')) return;
            
            xhide('seluser-dismiss-link-' + this.seluser_id);
            xshow('seluser-dismiss-loading-' + this.seluser_id);
            
            pars = {
                selection: {
                    id: this.seluser_id,
                }
            };
            url = '/selection/dismiss/' + this.seluser_id;
            
            myAjax = new Json.Remote(
                url,
                {method: 'post', onComplete: this.processUpdate.bind(this), onRequest: initAd, onSuccess: closeAd, onFailure: failure}
            ).send(pars);
            return false;
        }
    });
    selusersdismisslist = new LiveLibListClass('click', SelUsersDismiss);

    
    
    
    var BookStatus = new Class({
        initialize:function(book_id)
        {
            this.book_id = book_id
        },

        processUpdate: function(originalRequest)
        {
            
            
            xshow('status-save-' + this.book_id);
            xhide('status-loading-' + this.book_id);
            xshow('status-show-' + this.book_id);
            xhide('status-edit-' + this.book_id);

            
            data = originalRequest;
            if (data.message)
            {
                messageobj.display(data.message);
                return;
            }
            $(data.elem_id).setHTML(data.html);

            

            
        },

        send: function()
        {

            if ($('status-form-hasread-'+this.book_id).checked)
            {
                
                location.href="/book/add/" + $('status-form-bookid-'+this.book_id).value + "/1";
                return;
            }
            xhide('status-save-' + this.book_id);
            xshow('status-loading-' + this.book_id);
            
            newstatus = -1;
            if ($('status-form-reading-'+this.book_id).checked)
            {
                newstatus = $('status-form-reading-'+this.book_id).value;
                
            }
            if ($('status-form-wishtoread-'+this.book_id).checked)
            {
                newstatus = $('status-form-wishtoread-'+this.book_id).value;
                
            }
            

            pars = {
                'status-edit': 'edit', 
                book: {
                    id: this.book_id,
                    book_id: $('status-form-bookid-'+this.book_id).value,
                    book_read: newstatus
                }
            };
            url = '/book/edit/' + this.book_id;
            
            myAjax = new Json.Remote(
                url,
                {method: 'post', onComplete: this.processUpdate.bind(this), onRequest: initAd, onSuccess: closeAd, onFailure: failure}
            ).send(pars);
            return false;
        }
    });

    
    
    
    bookstatuseslist = new LiveLibListClass('click', BookStatus);

    
    
    
    var UserBookDateClass = new Class({
        initialize:function()
        {
            
        },

        processUpdate: function(originalRequest)
        {
            
            
            xhide('date-loading');

            xshow('date-show'); 
            xshow('date-edit-link');  
            xhide('date-edit'); 
            xhide('date-save-link');

            
            data = originalRequest;
            if (data.message)
            {
                messageobj.display(data.message);
                return;
            }
            $(data.elem_id).setHTML(data.html);
            

            
        },

        send: function()
        {
            xshow('date-loading'); 
            xhide('date-edit'); 
            xhide('date-save-link');

            
            qstring = $('date-form').toQueryString();
            
            
            var reg = new RegExp('book\\[date\\]\\[day\\]=([^&]+)', 'i');
            res = qstring.match(reg);
            day = res[1];
            var reg = new RegExp('book\\[date\\]\\[month\\]=([^&]+)', 'i');
            res = qstring.match(reg);
            month = res[1];
            var reg = new RegExp('book\\[date\\]\\[year\\]=([^&]+)', 'i');
            res = qstring.match(reg);
            year = res[1];

            pars = {
                'date-edit': 'edit', 
                book: {
                    id: $('date-user-book-id').value,
                    date: {
                        day: day,
                        month: month,
                        year: year
                    }
                }
            };
            url = '/book/edit/' + $('date-user-book-id').value;
            
            myAjax = new Json.Remote(
                url,
                {method: 'post', onComplete: userbookdate.processUpdate, onRequest: initAd, onSuccess: closeAd, onFailure: failure}
            ).send(pars);
            return false;
        }
    });
    userbookdate = new UserBookDateClass();

    
    
    
    var UserBookRatingClass = new Class({
        initialize:function()
        {
            
        },

        processUpdate: function(originalRequest)
        {
            
            
            xhide('rating-loading');

            xshow('rating-show'); 
            xshow('rating-edit-link');  
            xhide('rating-edit'); 
            xhide('rating-save-link');

            
            data = originalRequest;
            if (data.message)
            {
                messageobj.display(data.message);
                return;
            }
            $(data.elem_id).setHTML(data.html);
            

            
        },

        send: function()
        {
            xshow('rating-loading'); 
            xhide('rating-edit'); 
            xhide('rating-save-link');

            
            qstring = $('rating-form').toQueryString();
            
            
            var reg = new RegExp('book\\[rating\\]=([^&]+)', 'i');
            res = qstring.match(reg);
            rating = res[1];

            pars = {
                'rating-edit': 'edit', 
                book: {
                    id: $('date-user-book-id').value,
                    rating: rating
                }
            };

            url = '/book/edit/' + $('rating-user-book-id').value;
            
            
            
            
            myAjax = new Json.Remote(
                url,
                {method: 'post', onComplete: userbookrating.processUpdate, onRequest: initAd, onSuccess: closeAd, onFailure: failure}
            ).send(pars);
            return false;
        }
    });
    userbookrating = new UserBookRatingClass();

    
    
    
    
    var MySelectionBookListClass = new Class({
        initialize:function()
        {
        },

        processUpdate: function(originalRequest)
        {
            
            data = originalRequest;
            if (data.message)
            {
                messageobj.display(data.message);
                return;
            }
            deleted_ids = data.deleted_ids.split(',');
            for (i=0; i<deleted_ids.length; i++)
            {
                if (deleted_ids[i]>0)
                {
                    
                    if ( $('my-selection-book-list-tr-' + deleted_ids[i]) )
                    {
                        
                        $('my-selection-book-list-tr-' + deleted_ids[i]).remove();
                    }
                    
                }
            }
            
            
            

        },

        send: function()
        {
            url = '/selection/delbook';
            ids='';
            $$('.my-selection-book-list-checkbox').each(function(item) {
                book_id = item.id.substr(item.id.lastIndexOf('-') + 1);
                if (item.checked)
                {
                    ids += book_id + ',';
                }
            });
            
            if (ids=='')
            {
                alert("Выберите одну или несколько книг");
                $('my-selection-book-list-form').reset();
            }
            else
            {
                if( confirm("Удалить выбранные книги из списка. Вы уверены?") )
                {
                    pars = { act: 'delete', book_ids: strToQueryString(ids)};
                    myAjax = new Json.Remote(
                        url,
                        {method: 'post', onComplete: myselectionbooklist.processUpdate, onRequest: initAd, onSuccess: closeAd, onFailure: failure}
                    ).send(pars);
                }
                $('my-selection-book-list-form').reset();
            }
        }
    });
    myselectionbooklist = new MySelectionBookListClass();

    
    
    
    

    
    
    
    