﻿(function($){
	
    $.headlineFader = function(el, navitems, options){
        // To avoid scope issues, use 'base' instead of 'this'
        // to reference this class from internal events and functions.
        var base = this;
        
        // Access to jQuery and DOM versions of element
        base.$el = $(el);
        base.el = el; 
        
        // Add a reverse reference to the DOM object
        base.$el.data("headlineFader", base);
        
        base.init = function(){
            
            base.navitems = navitems;

            base.options = $.extend({},$.headlineFader.defaultOptions, options);
			
			base.$el.children().css('z-index', '10').hide();
			base.headlineTimer = null;
            base.navitems.filter(':first').addClass('active');
            base.$el.children(':first').addClass('active').show();
            base.navitems.children('a').click(base.navClick);
            base.headlineTimer = setTimeout(function()
            {
                base.autoHighlight(base);
            }, base.options.speed);
            
        }
        
        base.autoHighlight = function(base)
        {   
            var idx = base.$el.children('.active').prevAll('li').length+1;
            if (idx > 3) idx = 0;
	        base.navitems.filter('.active').removeClass('active');
	        base.navitems.filter(':eq(' + idx + ')').addClass('active');
            base.showHeadline(idx);
	        base.headlineTimer = setTimeout(function()
            {
                base.autoHighlight(base);
            }, base.options.speed);
        }
        
        base.showHeadline = function(idx)
        {
            var $oldHeadline = base.$el.children('li.active').css('z-index', '10');
			$(base.$el.children()[idx]).hide().css('z-index', '20').addClass('active').fadeIn(base.options.fade, function()
			{
			    $oldHeadline.removeClass('active').hide();
			});
        
            /*
            base.$el.fadeOut(base.options.fade, function()
            {
                base.$el.children('li.active').hide().removeClass('active');
                $(base.$el.children()[idx]).show().addClass('active');
            });
            base.$el.fadeIn(base.options.fade);
            */
            
        }
        
        base.navClick = function(ev)
        {
            clearTimeout(base.headlineTimer);
	        ev.preventDefault();
	        base.navitems.filter('.active').removeClass('active');
	        var idx = $(this).parent().addClass('active').prevAll().length;
            base.showHeadline(idx);
        }
        
        base.init();
    }

    $.headlineFader.defaultOptions = {
        speed: 7000,
        fade: 'normal'
    }
    
    $.fn.headlineFader = function(navitems, options){
        return this.each(function(){
            (new $.headlineFader(this, navitems, options));
        });
    }

})(jQuery);
