﻿/// <reference path="../../../Scripts/jquery-1.3.2-vsdoc.js" />


if (typeof window.Serpentine == "undefined")
    window.Serpentine = {}; 

if (!Serpentine)
    var Serpentine = {};

Serpentine.PostModulePager = function(element, data) {
    this._dispose(); 
    this._constructor(element, data);
}

Serpentine.PostModulePager.prototype =
{
    _dispose: function() {
        var pro;
        for (pro in this) {
            pro = null;
        }
    },

    _constructor: function(element, data) {
        this._id = "#" + element; //+" ";
        this.page = 1;
        this.pages = 1;
        this.pagerItems = 3;
        this.data = data;
        this.addClickEvents();
        this.pagerUpdate(1);
        this.populateDynamicYearDropDown();

        var hoverVideoImage = function() {
            var altsrc = $(this).find(".video-image").attr("altsrc");
            var src = $(this).find(".video-image").attr("src")
            $(this).find(".video-image").attr("altsrc", src);
            $(this).find(".video-image").attr("src", altsrc);
        };

        this.getjQ(".video-image").parents("li").hover(hoverVideoImage, hoverVideoImage);

        this.getjQ("#featuredPostPart .featuredPostsList li").hover(
            function() { $(this).addClass("hovered"); },
            function() { $(this).removeClass("hovered"); }
        );
    },

    getjQ: function(id) {
        return $(this._id).find(id);
    },

    init: function() {
        var instance = this;

        $.ajax({
            type: 'GET',
            cache: false,
            url: this.data.reloadPostsUrl,
            dataType: 'html',
            data: { partId: this.data.partId, partKey: this.data.partKey, parentModelId: this.data.selector, dynamicFund: $(this.data.dynamicFundSelector).val(), dynamicYear: $(this.data.dynamicYearSelector).val() },
            success: function(data) {
                var wrapper = $("#Part_" + instance.data.partId).parent();
                wrapper.empty();
                wrapper.append(data);
                instance.pagerUpdate(1);
                window.Serpentine["Viewer" + instance.data.selector].showMainPosts();
                instance.addClickEvents();
            }
        });
    },

    addClickEvents: function() {
        var instance = this;
        this.getjQ("li:has(a.preview)").click(function(e) {
            if (window.Serpentine["Viewer" + instance.data.selector]) {
                e.preventDefault();
                $("ul.featuredPostsList:visible").find("li.selected").removeClass("selected");
                $(this).addClass("selected");
                var postId = this.id;
                window.Serpentine["Viewer" + instance.data.selector].showPost(postId);
            }
        });
    },

    populateDynamicYearDropDown: function() {

        if (!this.data.dynamicYearSelector || $(this.data.dynamicYearSelector).length == 0)
            return;
        var loadedPosts = [];
        $.each($("[id*=LoadedPosts" + this.data.selector + "]"), function(index, element) {
            var loadedPostsPerPart = eval($(element).val());
            var i;
            for (i in loadedPostsPerPart)
                loadedPosts.push(loadedPostsPerPart[i]);
        });
        var years = jLinq.from(loadedPosts).distinct("year").sort(function sortNumber(a, b) { return b - a; });

        $(this.data.dynamicYearSelector + " option").remove();

        $.populateSelect(this.data.dynamicYearSelector, years, "All");
    },

    getPage: function(href) {
        var index = href.lastIndexOf('?page=');
        var next = href.indexOf('&', index);
        var page = (next > 0) ? href.substring(index + 6, next) : href.substring(index + 6);
        return page;
    },

    setActivePage: function(tbl, newPage) {
        this.getjQ("ul.featuredPostsList").filter(".page-" + this.page).hide();
        tbl.find("a.current").removeClass("current");
        this.page = Number(newPage);
        var p = tbl.find("a.active[href$='page=" + this.page + "']");
        if (p.length > 0) {
            p.addClass("current");
        }
        else {
            this.pagerUpdate(this.page);
        }
        this.getjQ("ul.featuredPostsList").filter(".page-" + this.page).show();

        this.setNavigation(tbl);
    },

    setNavigation: function(tbl) {
        var pp = tbl.find("a.prevPage").removeClass("active");
        var np = tbl.find("a.nextPage").removeClass("active");
        if (this.page > 1) pp.addClass("active");
        if (this.page < this.pages) np.addClass("active");
    },
    pagerUpdate: function(page) {
        var instance = this;
        this.pages = this.getjQ("ul.featuredPostsList").length;
        if (this.pages <= 1) return;

        var genericPartBLink = this.getjQ(".genericContentLink .genericPartBLink");
        if (genericPartBLink.length > 0) {
            var parent = genericPartBLink.parent();
            var tbl, td_right, td_left;
            var is_initialized = parent.is("td.left");
            if (!is_initialized) {
                tbl = $('<table class="pheader" width="100%" cellspacing="0" cellpadding="0" border="0"><tr><td class="left"/><td><table style="float:right;" cellspacing="0" cellpadding="0" border="0"><td> <a class="prevPage" href="#"></a></td><td class="right"/><td><a class="nextPage" href="#"></a></td></table></tr></table>');

                td_left = tbl.find('td.left');
                td_right = tbl.find('td.right');
                td_left.append(genericPartBLink);
                parent.append(tbl);
            } else {
                tbl = parent.parents('table.pheader');
                td_right = tbl.find('td.right');
                td_right.empty();
            }

            var count = Number(this.pagerItems);

            var n1 = parseInt(Number(page) / Number(this.pagerItems));

            if (Number(page) % Number(this.pagerItems) > 0)
                n1++;

            n1 = (n1 - 1) * Number(this.pagerItems) + 1;


            for (var i = n1; i < n1 + count; i++) {

                if (this.pages >= i) {
                    var classValue = "active";
                    if (i == Number(page)) classValue += " current";

                    var s = '<a href="?page=' + i + '" class="' + classValue + '">' + i + '</a>';
                    if (i < n1 + count - 1 && i < this.pages) { s += '<span class="inactive">, </span>'; }
                } else break;

                td_right.append(s);
            }


            this.setNavigation(tbl);
            td_right.find("a.active").click(function(e) { e.preventDefault(); instance.setActivePage(tbl, instance.getPage(this.href)); });
            if (!is_initialized) {
                tbl.find("a.prevPage").click(function(e) { e.preventDefault(); if (instance.page > 1) { var newPage = instance.page - 1; instance.setActivePage(tbl, newPage); } });
                tbl.find("a.nextPage").click(function(e) { e.preventDefault(); if (instance.page < instance.pages) { var newPage = instance.page + 1; instance.setActivePage(tbl, newPage); } });
            }
        }
    }
}
	
   
