/**
* PaginatorJs
*
*
*
*/

PaginatorJs = new Class ({

    Implements: [Options],

    options:
    {
        clasaContainerNrPagini: 'div.cntPagini', // clasa containerului in care se afla banda cu numarul paginilor
        clasaDisplayPrevPages: 'a.btDisplayPrevPages', //clasa butonului care face scroll la banda cu pagini spre STANGA
        clasaDisplayNextPages: 'a.btDisplayNextPages', //clasa butonului care face scroll la banda cu pagini spre DREAPTA
        clasaNumarPagina: 'a.numarPagina',
        idContainerUpdateContinut: 'updateContainer',
        paginaCurenta: 1, //pagina curenta, selectata de user
        timpEfectTranzitie: 1000, //timpul de tranzitie a efectului de scroll al benzii cu nr pagini
        scrollOffsetX: 330, //cu cat se misca banda cu nr pag in timpul scrollului pe axa X
        scrollOffsetY: 0, //cu cat se misca banda cu nr pag in timpul scrollului pe axa Y
        tipTranzitieNext: Fx.Transitions.Quad.easeOut, //Efectul de tranzitie cu care se misca banda la DREAPTA
        tipTranzitiePrev: Fx.Transitions.Quad.easeOut, //Efectul de tranzitie cu care se misca banda la STANGA
        limitaPaginaStartScroll: 12, //de la ce pagina curenta sa faca autoscroll la incarcarea paginii
        scrollUnit: 0, //cu cat sa scrolleze autoscroll-ul; daca e 0, atunci se scroleaza automat la element (pagina curenta)
        enablePageScroller: 1,
        totalPagini: 0
    },

    initialize: function( options )
    {
        this.setOptions( options );

        var thatPaginator = this;

        $( document.body ).getElements( this.options.clasaNumarPagina ).each(
            function( el, index )
            {
                $( el ).addEvent( 'click',
                    function ( ev )
                    {
                        new Event(ev).stop();
                        thatPaginator.afiseazaPagina( $( el ).getProperty( 'href' ) );
                    }
                );
            }
        );

        if ( parseInt( jBookmarker.get( 'pagina' ) ) && ( jBookmarker.get( 'pagina' ) > 0 ) && ( jBookmarker.get( 'pagina' ) <= this.options.totalPagini ) && ( jBookmarker.get( 'pagina' ) != this.options.paginaCurenta ) )
        {
            this.afiseazaPagina( this.getPageLink( $( document.body ).getElement( this.options.clasaNumarPagina ).getProperty( 'href' ) ) + jBookmarker.get( 'pagina' ) );
        }

        if ( this.options.enablePageScroller )
        {
            this.scrollCnt = $$( this.options.clasaContainerNrPagini );
            this.scrollPrevPages = $$( this.options.clasaDisplayPrevPages );
            this.scrollNextPages = $$( this.options.clasaDisplayNextPages );
            this.scrollToPrevPages = new Array();
            this.scrollToNextPages = new Array();
            this.paginate();
        }
    },

    paginate: function()
    {
        var thatPntr = this;
        this.scrollCnt.each(
            function ( el, index )
            {
                thatPntr.scrollToPrevPages[index] = new Fx.Scroll( el, {wait: false, duration: thatPntr.options.timpEfectTranzitie, offset: {'x': -thatPntr.options.scrollOffsetX, 'y': thatPntr.options.scrollOffsetY}, transition: thatPntr.options.tipTranzitiePrev});
                thatPntr.scrollPrevPages[index].addEvent( 'click',
                    function (ev)
                    {
                        ev = new Event(ev).stop();
                        thatPntr.scrollToPrevPages[index].scrollTo();
                    }
                );

                thatPntr.scrollToNextPages[index] = new Fx.Scroll( el, {wait: false, duration: thatPntr.options.timpEfectTranzitie, offset: {'x': +thatPntr.options.scrollOffsetX, 'y': thatPntr.options.scrollOffsetY}, transition: thatPntr.options.tipTranzitieNext});
                thatPntr.scrollNextPages[index].addEvent( 'click',
                    function (ev)
                    {
                        ev = new Event(ev).stop();
                        thatPntr.scrollToNextPages[index].scrollTo();
                    }
                );
                thatPntr.adjustPage( el, index );
                $E( 'div', el ).setStyle( 'width', ( $ES( 'div a', el ).length * ( parseInt( $E( 'div a', el ).getStyle( 'width' ) ) + 2 ) ) );
            }
        );
    },

    adjustPage: function( element, index )
    {
        if ( this.options.paginaCurenta > this.options.limitaPaginaStartScroll )
        {
            if ( this.options.scrollUnit )
            {
                this.scrollToNextPages[index].scrollTo( this.options.paginaCurenta * this.options.scrollUnit, 0 );
            }
            else
            {
                this.scrollToNextPages[index].toElement( $$( 'a', element  )[this.options.paginaCurenta-1] );
            }
        }
    },

    adjustBandaPagini: function( element )
    {
        var eroareLungimeCifra = 2;
        $E( 'div', element ).setStyle( 'width', ( $ES( 'div a', element ).length * ( parseInt( $E( 'div a', element ).getStyle( 'width' ) ) + eroareLungimeCifra ) ) );
    },

    afiseazaPagina: function( urlPagina )
    {
        var thatPaginator = this;

        var nrPagina = this.getPageNumber( urlPagina );

        jBookmarker.set( 'pagina', this.getPageNumber( urlPagina ) );

        new Request.HTML(
                         {
                            url: urlPagina,
                            method: 'POST',
                            update: $( this.options.idContainerUpdateContinut ),
                            evalResponse: true,
                            evalScripts: true,
                            onRequest:
                                function()
                                {
                                    $( thatPaginator.options.idContainerUpdateContinut ).setOpacity( 0.1 );
                                },
                            onComplete:
                                function()
                                {
                                    $( thatPaginator.options.idContainerUpdateContinut ).setOpacity( 1 );
                                }
                         }
                        ).send();
    },

    getPageNumber: function( urlPagina )
    {
        return urlPagina.substring( urlPagina.lastIndexOf( '/' ) + 1 );
    },

    getPageLink: function( urlPagina )
    {
        return urlPagina.substring( 0, urlPagina.lastIndexOf( '/' ) + 1 );
    }
});