(function ($) {
    $.fn.extend({
        MyPagination: function (options) {
            var defaults = {
                height: 400,
                fadeSpeed: 400
            };
            var options = $.extend(defaults, options);

            //Creating a reference to the object
            var objContent = $(this);

            // other inner variables
            var fullPages = new Array();
            var subPages = new Array();
            var height = 0;
            var lastPage = 1;
            var paginatePages;

            clearBeforeInit = function () {

                fullPages = new Array();
                subPages = new Array();

                objContent.find(".page").each(function (i) {
                    $(this).children().each(function () {
                        subPages.push(this);
                    });

                    fullPages.push(subPages);
                    subPages = new Array();


                });
                objContent.find(".page").children().unwrap();

            }


            // initialization function
            init = function () {

                //fullPages.unwrap();
                clearBeforeInit();
                var offsetTop = -100;
                fullPages = new Array();
                subPages = new Array();

                /*objContent.children().each(function (i) {
                $(this).css("display", "block");
                });*/

                function get_anchor_name() {
                    var url = document.location;
                    var strippedUrl = url.toString().split("#");
                    if (strippedUrl.length > 1) {
                        return strippedUrl[1];
                    }
                    else {
                        return "##none##";
                    }
                }

                objContent.children().each(function (i) {
                    var top = $(this).offset().top;
                    if (get_anchor_name() == "Trailers") {
                        if (document.all && !document.querySelector) {
                            $(this).css({ 'position': 'absolute', 'visibility': 'hidden', 'display': 'inline', "zoom" : "1" });
                        }
                        else {
                            $(this).css({ 'position': 'absolute', 'visibility': 'hidden', 'display': 'inline-block' });
                        }
                    }
                    else {
                        $(this).css({ 'position': 'absolute', 'visibility': 'hidden', 'display': 'block' });
                    }
                    var elementHeight = $(this).height();
                    $(this).css({ 'position': 'static', 'visibility': 'visible' });
                    if (height + elementHeight > options.height && offsetTop != top) {
                        fullPages.push(subPages);
                        subPages = new Array();
                        height = 0;
                    }

                    if (offsetTop != top) {
                        height += elementHeight;
                        offsetTop = top;
                    }

                    subPages.push(this);
                });

                if (height > 0) {
                    fullPages.push(subPages);
                }

                // wrapping each full page
                $(fullPages).wrap("<div class='page'></div>");

                // hiding all wrapped pages
                objContent.children().hide();

                // making collection of pages for pagination
                paginatePages = objContent.children();

                // show first page
                showPage(lastPage);

                // draw controls
                showPagination($(paginatePages).length);
            };

            // update counter function
            updateCounter = function (i) {
                //$('#page_number').html(i);
                $('.pagination ul li.pages').each(function () {
                    var a = $(this).find("a");
                    if (a.text() == i) {
                        a.parent().siblings().each(function () {
                            $(this).find('a').removeClass('current');
                        });
                        a.addClass('current');
                    }
                });
            };

            // show page function
            showPage = function (page) {
                i = page - 1;
                if (paginatePages[i]) {

                    // hiding old page, display new one
                    $(paginatePages[lastPage]).fadeOut(options.fadeSpeed);
                    lastPage = i;
                    $(paginatePages[lastPage]).fadeIn(options.fadeSpeed);

                    // and updating counter
                    updateCounter(page);
                }
            };

            // show pagination function (draw switching numbers)
            showPagination = function (numPages) {
                $('.pagination ul li.pages').remove();
                var pagins = '';
                if (numPages < 2)
                    $('.pagination ul').css("display", "none");
                for (var i = 1; i <= numPages; i++) {
                    var chosenClass = "";
                    if (i == 1)
                        chosenClass = "current";

                    pagins += '<li class="pages"><a class="' + chosenClass + '" href="javascript:void()" onclick="$(this).parent().siblings().each(function() { $(this).find(\'a\').removeClass(\'current\'); });$(this).addClass(\'current\');showPage(' + i + '); return false;">' + i + '</a></li>';
                }
                $('.pagination li:first-child').after(pagins);
            };

            // perform initialization
            init();

            $('.pagination #next').unbind("click");
            $('.pagination #prev').unbind("click");

            // and binding 2 events - on clicking to Prev
            $('.pagination #prev').click(function () {
                showPage(lastPage);
            });
            // and Next

            $('.pagination #next').click(function () {
                showPage(lastPage + 2);
            });

        }
    });
})(jQuery);
