(function() {
    var Y = NB.Lib;
    
    NB.MarsPress.PublicationList = function(config) {
        NB.MarsPress.PublicationList.superclass.constructor.apply(this, arguments);
        
        this.pageNavigator = new NB.MarsPress.PageNavigator({
            pageNo : PublicationListStatic.pageNo,
            totalPages : PublicationListStatic.totalPages,
            categories : PublicationListStatic.categories,
            element : Y.get('.page-nav'),
            url : "/?ext=mars_publications&ajax=1&mtd=GetPublicationsList"          
        });
        this.pageNavigator.on("pageChange", this.onPageChange, this);

        var publicationList = Y.get(".page-nav");
        publicationList.on("click", this.onClick, this);

        this.collapseAnim = null;
        this.expandAnim = null;
        this.animatedPublicationId = null;
    };
    
    NB.MarsPress.PublicationList.NAME = "publicationList";
    NB.MarsPress.PublicationList.ATTRS = {
        
    }; 
    
    Y.extend(NB.MarsPress.PublicationList, Y.Base, {
        onClick : function(e) {
            if(e.target.hasClass("publication-hd-link"))
            {
                this.togglePublication(e.target.get("parentNode").get("parentNode"));
            }

        },
        onPageChange : function(e, pageNavigator) {

        },
        togglePublication : function(publicationNode) {
            var isExpanded = publicationNode.hasClass("publication-expanded");
            
            if(this.animatedPublicationId == publicationNode.get("id"))
            {           
                if(this.expandAnim && this.expandAnim.get("running"))
                {
                    this.expandAnim.stop(false);
                }
                else if(this.collapseAnim && this.collapseAnim.get("running"))
                {
                    this.collapseAnim.stop(false);
                }
            }
            
            this.animatedPublicationId = publicationNode.get("id");
            
            var publicationBd = publicationNode.one(".publication-bd");
            var height = publicationBd.get("firstChild").get("offsetHeight");
            
            
            
            if(isExpanded)
            {
                publicationNode.removeClass("publication-expanded");
                publicationBd.setStyle("height", height + "px");
                publicationBd.setStyle("visibility", "visible");
                
                this.collapseAnim = new Y.Anim({
                    node : publicationBd,
                    to : {
                        height: 0
                    },
                    duration : .5,
                    easing : Y.Easing.easeInStrong
                });
                this.collapseAnim.run();                
            }           
            else
            {
                var curVis = publicationBd.getComputedStyle("visibility");
                if(curVis == "hidden")
                {
                    publicationBd.setStyle("visibility", "visible");
                    publicationBd.setStyle("height", 0);
                }
                
                publicationNode.addClass("publication-expanded");
                
                this.expandAnim = new Y.Anim({
                    node : publicationBd,
                    to : {
                        height: height
                    },
                    duration : .5,
                    easing : Y.Easing.easeOutStrong
                });
                
                this.expandAnim.run();  
            }
        }
    });    
    
    var controller = new NB.MarsPress.PublicationList();

})();
