/**
 * $Rev: 142 $
 */

if ('undefined' === typeof SWA) var SWA = {};

SWA.ArchiveSlider = {
        
    LEFT : -1,
    RIGHT: 1,
    
    BUTTON_OLDER: '#archives-nav .older',
    BUTTON_NEWER: '#archives-nav .newer',
    
    DURATION: 400,
    WIDTH:    150,
    HEIGHT:   250,
    EASING:   "easeOutBack",
    
    _archives: null,
    _currentIndex:  null,
        
    initialize: function() {
    
        var as = SWA.ArchiveSlider;
        
        as._archives = $('#arch-list ul');
        as._currentIndex  = 0;
        as.updateButtons();
        
        $('#archives-nav a').click(function(e) {
            
            e.preventDefault();
            e.stopPropagation();
            var $btn = $(this);
            
            if ($btn.hasClass('disabled')) return;
            
            if ($btn.hasClass('newer')) {
                as.showNewer();
            } else {
                as.showOlder();
            }
        });
    },
    
    showOlder: function() {
        
        var as = SWA.ArchiveSlider;
        
        if (!as.hasOlder()) {
            return;
        }
        
        as.slideOutCurrent(as.LEFT);
        as.slideInOlder();
    },
    
    showNewer: function() {
        
        var as = SWA.ArchiveSlider;
        
        if (!as.hasNewer()) {
            return;
        }
        
        as.slideOutCurrent(as.RIGHT);
        as.slideInNewer();
    },
    
    /**
     * @param int direction
     */
    slideOutCurrent: function(direction) {

        var as = SWA.ArchiveSlider;
        var $current = as._archives.eq(as._currentIndex);
        var targetPosition = (direction * as.WIDTH) + 'px';
        
        $current.animate({left: targetPosition}, {duration: as.DURATION});
    },
    
    slideInOlder: function() {

        var as = SWA.ArchiveSlider;
        var olderIndex = as._currentIndex + 1;
        
        var inPosition = {
            top: (olderIndex * as.HEIGHT * -1) + 'px',
            left: (as.WIDTH * as.RIGHT)
        };
        
        var $older = as._archives.eq(olderIndex);
        
        var olderYear = $older.attr('id').substr(0, 4);
        
        if (!as.yearsMatch(olderYear)) {
            as.slideYear(olderYear, as.LEFT);
        }
        
        $older.css({top: inPosition.top, left: inPosition.left});
        
//        debugger;
        
        $older.animate({left: 0}, {duration: as.DURATION, easing: as.EASING, complete: function() {
            as._currentIndex = olderIndex;
            as.updateYear();
            as.updateButtons();
        }});
    },
    
    slideInNewer: function() {

        var as = SWA.ArchiveSlider;
        var newerIndex = as._currentIndex - 1;
        
        var inPosition = {
            top: (newerIndex * as.HEIGHT * -1) + 'px',
            left: (as.WIDTH * as.LEFT)
        };
        
        var $newer = as._archives.eq(newerIndex);
        
        var newerYear = $newer.attr('id').substr(0, 4);
        
        if (!as.yearsMatch(newerYear)) {
            as.slideYear(newerYear, as.RIGHT);
        }
        
        $newer.css({top: inPosition.top, left: inPosition.left});
        
//        debugger;
        
        $newer.animate({left: 0}, {duration: as.DURATION, easing: as.EASING, complete: function() {
                    as._currentIndex = newerIndex;
                    as.updateYear();
                    as.updateButtons();
                }
        });
    },
    
    updateButtons: function() {

        var as = SWA.ArchiveSlider;
        
        $('#archives-nav a').removeClass('disabled');
        
        if (!as.hasNewer()) {
            $(as.BUTTON_NEWER).addClass('disabled');
        }
        
        if (!as.hasOlder()) {
            $(as.BUTTON_OLDER).addClass('disabled');
        }
    },
    
    updateYear: function() {
        
        var as = SWA.ArchiveSlider;
        
//        var oldYear = $('#archives .year').text();
        var currentYear = as._archives.eq(as._currentIndex).attr('id').substring(0, 4);
        
        $('#archives .year').text(currentYear);
    },
    
    /**
     * @return boolean
     */
    hasOlder: function() {

        var as = SWA.ArchiveSlider;
        var archivesLen = as._archives.length;
        
        return (as._currentIndex + 1) < archivesLen;
    },
    
    /**
     * @return boolean
     */
    hasNewer: function() {        
        return (SWA.ArchiveSlider._currentIndex) > 0;
    },
    
    /**
     * @return boolean
     */
    yearsMatch: function(newYear) {
        var oldYear = $('#archives .year').text();
        return oldYear === newYear;
    },
    
    slideYear: function(newYear, direction) {

        var as = SWA.ArchiveSlider;
        
        console.log('sliding Year to ' + ((direction > 0) ? "right" : "left"));
        
        return;
        
        if (direction > 0) {
            $('#archives .year').after('<span class="year">' + newYear + '</span>');
        } else {
            $('#archives .year').before('<span class="year">' + newYear + '</span>');
        }
    }
};

$(document).ready(SWA.ArchiveSlider.initialize);