(function ($) {

    $.fn.mediaSlider = function (settings) {

        //configurable options
        var o = $.extend({
            autoRotate: true,
            interval: 8000,
            centeredLinks: false,
            borderClass: "Start",
            tabRotator: 0,
            rotations: 0
        }, settings);

        return $(this).each(function () {
            //reference to tabs container
            var tabs = $(this);


            //if only one item just skip
            if (tabs.find('.content-list:first').find('li').length <= 1) {
                return;
            }
            //set js-class to hook css 
            tabs.addClass('js');

            //make play pause button visible
            $('.media-slider a.playPause').css('display', 'block');

            //set app mode
            if (!$('body').is('[role]')) { $('body').attr('role', 'application'); }
            var tabsNav = tabs.find('.slider-links:first'), //nav is first ol
				tabsBody = tabs.find('.slider-content'),
				tabIDprefix = 'tab-',
				tabIDsuffix = '-enhanced',
 				tabsList = tabsBody.find('ul:first'); //list of items

            //add class to nav, tab body
            tabsNav
				.addClass('tabs-nav')
				.attr('role', 'tablist')


            if (o.centeredLinks == true) {
                tabsNav.css('margin-left', '-' + (tabsNav.width() / 2) + 'px');
            }

            $('.media-controls').width(tabsNav.width() + 20);

            var s = $("li", tabsBody).length,
				w = tabsBody.width(),
				h = $("li", tabsBody).height();

            //find tab panels, add class and aria and find highest hight
            tabsBody.find('li').each(function () {
                var height = $(this).height();
                if (height > h) {
                    h = height;
                }
                $(this)
					.addClass('tabs-panel-selected')
					.attr('role', 'tabpanel')
					.attr('aria-hidden', true)
					.attr('aria-labelledby', tabIDprefix + $(this).attr('id'))
					.attr('id', $(this).attr('id') + tabIDsuffix);
            });

            //set height and css
            tabsBody
				.addClass('tabs-body')
				.height(380)
				.css('overflow', 'hidden');

            tabsList.css('width', s * w);

            var index = 0;
            //set role of each tab
            tabsNav.find('li').each(function () {
                var item = $(this);
                item
				.attr('role', 'tab')
				.attr('id', tabIDprefix + $(this).find('a').attr('href').split('#')[1])
				.data('item', index);

                index = index + 1;
            });

            //switch selected on click
            tabsNav.find('a').attr('tabindex', '-1');

            function alterPanelBorder() {
                $('.media-slider').removeClass(o.borderClass);
                if ($('.tabs-panel-selected').children(0).attr('href')) {
                    o.borderClass = $('.tabs-panel-selected').children(0).attr('class');
                    $('.media-slider').addClass(o.borderClass);
                }
            };

            //generic select tab function
            function selectTab(tab, fromHashChange) {
                //unselect tabs
                tabsNav.find('li.tabs-selected')
					.removeClass('tabs-selected')
					.find('a')
					.attr('tabindex', '-1');
                //set selected tab item	
                tab
					.attr('tabindex', '0')
					.parent()
					.addClass('tabs-selected');
                var leftSlide = (w * (tab.parent().data('item')));
                //tabsList.stop().animate({ left: '-' + leftSlide + '' }, o.interval);


                if (o.rotations > 0) {
                    $('.tabs-panel-selected .slideShowContainer').fadeOut('slow', function () {
                        //$('.slideShowContainerBackground').hide();
                        $('.tabs-panel-selected').fadeOut('fast', function () {
                            //unselect  panels
                            tabsBody.find('li.tabs-panel-selected').attr('aria-hidden', true).removeClass('tabs-panel-selected');
                            //select active panel
                            $(tab.attr('href') + tabIDsuffix).addClass('tabs-panel-selected').attr('aria-hidden', false);
                            alterPanelBorder();
                            $('.tabs-panel-selected').fadeIn('fast', function () {
                                //$('.slideShowContainerBackground').show();
                                $('.tabs-panel-selected .slideShowContainer').fadeIn('slow');
                            });

                        });
                    });

                };
                o.rotations = o.rotations + 1;
            };
            tabs.find('.next-slide')
			.click(function (event) {
			    event.preventDefault();
			    var nextLink = tabsNav.find('li.tabs-selected').next();
			    if (nextLink.length) {
			        selectTab(nextLink.find('a'), false);
			    }
			    else {
			        selectTab(tabsNav.find('a:first'), false);
			    }
			});
            tabs.find('.previous-slide')
			.click(function (event) {
			    event.preventDefault();
			    var prevLink = tabsNav.find('li.tabs-selected').prev();
			    if (prevLink.length) {
			        selectTab(prevLink.find('a'), false);
			    }
			    else {
			        selectTab(tabsNav.find('a:last'), false);
			    }
			});
            tabsNav.find('a')
			.click(function (event) {
			    event.preventDefault();
			    selectTab($(this));
			    $(this).find('a').focus();
			    //alterPanelBorder();
			});

            function pauseRotation() {
                $('.media-slider a.playPause').removeClass('pause');
                $('.media-slider a.playPause').addClass('play');
                clearInterval(o.tabRotator);

            };

            function playRotation() {
                $('.media-slider a.playPause').removeClass('play');
                $('.media-slider a.playPause').addClass('pause');
                o.tabRotator = setInterval(rotateImages, 8000 /*o.autoRotate*/);

            };

            function alterRotation() {
                if ($('.media-slider a.playPause').attr('class') === 'playPause play') {
                    playRotation();

                }
                else {
                    pauseRotation();

                }
            };



            //All the click events for Pause rotation and play rotation
            $('.media-slider .tabs-nav li').bind('click', function () {
                pauseRotation();
            });


            $('.media-slider a.playPause').bind('click', function () {
                alterRotation();
            });


            selectTab(tabsNav.find('a:first'), true);

            //auto rotate tabs
            if (o.autoRotate) {
                o.tabRotator = setInterval(rotateImages, 8000 /*o.autoRotate*/);
            }
            alterPanelBorder();

            function rotateImages() {
                var currentTabLI = tabsNav.find('li.tabs-selected');
                var nextTab = currentTabLI.next();
                if (nextTab.length) {
                    selectTab(nextTab.find('a'), false);
                    alterPanelBorder();
                }
                else {
                    selectTab(tabsNav.find('a:first'), false);
                    alterPanelBorder();
                }
            };





        });
    };




    $.fn.initscripts = function () {
        var container = $(this);


        //Since images doesn't have an initial height we have to wait to load this script
        //Sticky footer must also wait for heights to be correct
        $(window).load(function () {


            $('.media-slider').mediaSlider({ interval: 1000, centeredLinks: true });



        });
    };
    $(document).ready(function () {
        $(this).initscripts();
    });
})(jQuery);
