// DEFINE NAMESPACE OLY
OLY = {};

/**
  * OLY.inside 
  * 
  * @description: Displaying inside news +  JS pagination
  *
  * @copyright       Neue Digitale / Razorfish 
  * @author          thorsten.diegel@neue-digitale.de
  * @version         1.0
 **/
OLY.inside = {
    
    __version: 1.0, // class version 
    __class: 'OLY.inside', // class name
     
     /* define default elements */
    _oDefaults: {
        elContainerInsideNews: '.container-inside-news',
        elInsideNewsTemplate: '.container-inside-news .template',
        elInsideNewsClones: '.container-inside-news .clone',
        elPaginationContainer: '.paging-modul  .page-links',
        elPaginationTemplate: '.paging-modul .pages .template',
        elPaginationClones: '.paging-modul .pages .clone',
        elPaginationLinks: '.paging-modul .page-links li.clone a',
        elNextButton: '.paging-modul .next-page span',
        elPreviousButton: '.paging-modul .prev-page span'
    },
    
    
    /* define propertys */
    _maxPages: 0,
    _actualPage: 1,
    _fetchSize: 3,
    
    /**
     * Setup
     * @param {String} [sTitle], title
     * @return {Void}
     */
    _setUp: function (oOptions) {
        var _scope = OLY.inside;
        // merge options and defaults
        _scope._oOpt = $.extend({},_scope._oDefaults, oOptions);
        _scope._oDefaults = null;
        
        
        /* initialize */
        _scope._maxPages = Math.ceil((insideNews.items.length-1)/_scope._fetchSize);
        _scope._renderNewsTeaser();
        _scope._renderPagination();
        _scope._updateNextPreviousButton();
        
    },
    
    
    _renderNewsTeaser: function () {
        
        var _scope = OLY.inside;
        
        /* clear exisiting teasers */
        jQuery(_scope._oOpt.elInsideNewsClones).remove();
        
        var endItem = _scope._actualPage * _scope._fetchSize;
        var startItem = (endItem - _scope._fetchSize);
        for(i=startItem; (i < endItem) && (i < insideNews.items.length-1); i++) {
            
            var item = insideNews.items[i];
            
            var _htmlCloneItem = jQuery(_scope._oOpt.elInsideNewsTemplate).clone();
            jQuery(_htmlCloneItem).removeClass('template').addClass('clone');
                
            // Fill image attributes
            jQuery(_htmlCloneItem).find('.teaser-img img').attr({ 'src' : item.image, 'title' : item.title,    'alt' : item.title });
            // Fill title
            jQuery(_htmlCloneItem).find('.title').text(item.title);  
            // Fill date
            jQuery(_htmlCloneItem).find('.date').text(item.date);
            // Fill description
            jQuery(_htmlCloneItem).find('.description').text(item.description);
            /* Fill link target */
            jQuery(_htmlCloneItem).find('.link a').attr('href', item.url);
            
            jQuery(_scope._oOpt.elContainerInsideNews).append(_htmlCloneItem);
            
        }
    },
    
    
    _renderPagination: function () {
        var _scope = OLY.inside;
        
        for(var i=1; i <= this._maxPages; i++) {
            
            //if (i < _scope._actualPage + 3 || i > _scope._maxPages - 3) {
                var _htmlCloneItem = jQuery(_scope._oOpt.elPaginationTemplate).clone();
                
                jQuery(_htmlCloneItem).removeClass('template').addClass('clone').find('a').text(i).bind('click.setActualPage', {}, _scope._setActualPage);
                
                /* special css definitions for first page */
                if (i == 1) { jQuery(_htmlCloneItem).addClass('first') }
                
                /* special css definitions for actual page */
                if (i == _scope._actualPage) { jQuery(_htmlCloneItem).find('a').addClass('active') }
                
                jQuery(_scope._oOpt.elPaginationContainer).append(_htmlCloneItem);
            //}
        } 
    },
    
    
    _setActualPage: function(event) {
        var _scope = OLY.inside;
        
        if(event.data._activePage != null) { _scope._actualPage = event.data._activePage; }
        else { _scope._actualPage = this.innerHTML; }
        
        _scope._updatePagination();
        _scope._updateNextPreviousButton();
        _scope._renderNewsTeaser();
        
        return false;        
    },
    
    
    _updatePagination: function () {
        
        var _scope = OLY.inside;
        
        
        jQuery(_scope._oOpt.elPaginationLinks).each(function (i) {
            /* activate Pagination Link */
            if(_scope._actualPage == i+1) {    jQuery(this).addClass('active'); }
            /* remove old active classes */
            else { jQuery(this).removeClass('active'); }
        });
        
    },
    
    
    _updateNextPreviousButton: function() {
        var _scope = OLY.inside;
        
        if(_scope._actualPage != 1 && _scope._maxPages >= 1) {
            jQuery(_scope._oOpt.elPreviousButton).addClass('active')
            .bind('click.setActualPage', { _activePage: (parseInt(_scope._actualPage-1))  }, _scope._setActualPage );
        }
        else {
            jQuery(_scope._oOpt.elPreviousButton).removeClass('active')
            .unbind('click.setActualPage');
        }
        
        if(_scope._actualPage < _scope._maxPages) {
            jQuery(_scope._oOpt.elNextButton).addClass('active')
            .bind('click.setActualPage', { _activePage: (parseInt(_scope._actualPage)+1)  }, _scope._setActualPage );
        }
        else {
            jQuery(_scope._oOpt.elNextButton).removeClass('active')
            .unbind('click.setActualPage');
        }
    },
    
     /**
     * Constructor
     * @param {Object} [oOptions]
     * @constructor
     */
    initialize: function (oOptions) {
        // fake singleton
        if (this._oOpt) {
            return this;
        }
        // setup 
        this._setUp(oOptions);
        // fake singleton
        return this;
    }
};
// initialize onDOMReady
$(function() {
    OLY.inside.initialize();
});
