/* (c) Marc Bradshaw <marc@marcbradshaw.co.uk> */

jQuery.fn.paginate = function(perPage,linksSelector) {
    function addPageLink(num)
    {
        var name = num;
        var setName = jQuery(container).data('pageName' + num);
        if (typeof(setName) != 'undefined')
        {
            name = setName;
        }
        var devidor = jQuery(container).data('pageLinkDevidor');
        if (typeof(devidor) != 'undefined') { 
            var node = document.createElement('span');
            var nodelink = document.createElement('a');
            nodelink.href='#page' + num;
            nodelink.appendChild(document.createTextNode(name));
            node.appendChild(nodelink);
            node.appendChild(document.createTextNode(devidor));
        }
        else {
            var node = document.createElement('a');
            node.href='#page' + num;
            node.appendChild(document.createTextNode(name));
        }
        var link = jQuery(node).appendTo(linksSelector).click(
            function(){
                var pageLink = jQuery(this);
                var pageNumber = jQuery(this).data('number');
                var activePage = container.data('activePage');
                var activePageNum = activePage.data('number');
                if (activePageNum!= pageNumber) {
                    activePage.addClass('inactive').removeClass('active');
                    pageLink.addClass('active').removeClass('inactive');
                    jQuery(selector + ' .page' + activePageNum).fadeOut('slow',
                        function(){
                            jQuery(selector + ' .page' + pageNumber).fadeIn('slow',
                                function(){
                                    container.data('activePage',pageLink);
                                }
                            );
                        }
                    );
                }
                return false;
            }
        ).addClass("inactive").data("number",num);
        if (typeof(jQuery(container).data('pageAddNextButton')) != 'undefined')
        {
            if (num > 1)
            {
                var node = document.createElement('div');
                node.setAttribute('class','entryGroup');
                node.appendChild(document.createElement('br'));
                var nodeinput = document.createElement('input');
                nodeinput.setAttribute('class','styledButton');
                nodeinput.setAttribute('type','submit');
                nodeinput.setAttribute('value','Continue to ' + name);
                jQuery(nodeinput).click(
                    function(){
                        link.trigger('click');
                        return false;
                    }
                );
                node.appendChild(nodeinput);
                jQuery(node).appendTo(selector + ' .page' + (num - 1) + ':last');
            }
        }
        return link;
    }
    var count = 1;
    var page  = 1;
    var container = jQuery(this);
    var selector = jQuery(this).selector;
    jQuery(this).css("overflow","hidden").children().map(function(){ 
       jQuery(this).addClass('paginate page' + page);
        if (page > 1)
        {
            jQuery(this).hide();
        }
        if (count == 1) {
            if (page > 1)
            {
                if (page == 2)
                {
                    pageLink = addPageLink(1);
                    jQuery(container).data('activePage',pageLink);
                    pageLink.addClass('active');
                }
                addPageLink(page);
            }
        }
        count++;
        if (count > perPage)
        {
            page++;
            count=1;
        }
    });
    return container;
};
