﻿(function() {

    Intel.mod.setupCarousel = function(configuration) {
        // Setup defaults
        var default_config = {
            btnNext: '.carousel-next',
            btnPrev: '.carousel-prev',
            visible: (configuration.itemsToShow) ? configuration.itemsToShow : 6,
            scroll: 1,
            circular: true,
            speed: 500
        },
        uniqID = configuration.container,
        uniqIDDom = "#" + uniqID,
        uniqIDName = uniqID,
        domContainer = jQuery(uniqIDDom),
        i;


        //---------------------------------------------------------------------------------------------------------//
        //-------------------------- Start - Stop Media from playing on tab change --------------------------------//
        //---------------------------------------------------------------------------------------------------------//
        // Visitor might change tabs without pausing video first or triggering another event that pause the video
        // So lets stop it here		
        if (jQuery.mediaPlaying == true) {

            umpEmbedded.Pause();
        } else {

            jQuery.mediaPlaying == false;
        }
        //---------------------------------------------------------------------------------------------------------//
        //-------------------------- End - Stop Media from playing on tab change ----------------------------------//
        //---------------------------------------------------------------------------------------------------------//		

        if (!configuration.config) {
            configuration.config = default_config;
        } else {
            configuration.config.btnNext = (configuration.config.btnNext) ? configuration.config.btnNext : default_config.btnNext;
            configuration.config.btnPrev = (configuration.config.btnPrev) ? configuration.config.btnPrev : default_config.btnPrev;
            configuration.config.visible = (configuration.config.visible) ? configuration.config.visible : default_config.visible;
            configuration.config.scroll = (configuration.config.scroll) ? configuration.config.scroll : default_config.scroll;
            configuration.config.circular = (configuration.config.circular) ? configuration.config.circular : default_config.circular;
            configuration.config.speed = (configuration.config.speed) ? configuration.config.speed : default_config.speed;
        }

        // Set default image width and height.
        if (!configuration.contentImageHeight) {
            configuration.contentImageHeight = '67px';
        }
        if (!configuration.contentImageWidth) {
            configuration.contentImageWidth = '99px';
        }

        if (configuration.data[uniqID]) {
            jQuery[uniqID] = configuration.data[uniqID];
        } else {
            jQuery[uniqID] = configuration.data;
        }

        domContainer.find('.carousel').html('<h2>Testsesteae spa</h2>');

        //---------------------------------------------------------------------------------------------------------//
        //-------------------------- Start - Create Carousel Nav Items --------------------------------------------//
        //---------------------------------------------------------------------------------------------------------//
        // Added code to detect if nav link is for media player or regular media asset
        // A LINK IS CONSIDERED A MEDIA PLAYER LINK IF the 'media' value in the json file is set to '' 
        // WHEN 'media' is blank, 'navMetaMedia' under the nav array in the particular array holds the info the media player needs
        jQuery.sliderNavItems = "";


        for (var i in jQuery[uniqID].content) {

            jQuery.sliderNavItems += '<li class="carousel-item mod-itc-carousel-item-collect">';

            // Start checking to see if meta is empty, empty meta means that media to display is an ump asset
            if (jQuery[uniqID].content[i].media != "") {

                jQuery.sliderNavItems += '<a class="car-item" id="' + i + '">';

            } else {
                jQuery.sliderNavItems += '<a ' + jQuery[uniqID].content[i].nav.navMetaMedia + ' id="' + i + '"' + ' >';

            }

            jQuery.sliderNavItems += '<img src="' + jQuery[uniqID].content[i].nav.navImage +
				'" width="' + configuration.contentImageWidth + '"' +
            	' height="' + configuration.contentImageHeight + '" class="mod-itc-carousel-item-img itc-tooltip2-subscriber" tooltip_content_text="' +
            	((jQuery[uniqID].content[i].nav.navTooltip) ? jQuery[uniqID].content[i].nav.navTooltip : jQuery[uniqID].content[i].nav.navText) +
            	'">' +
            	'<p class="mod-itc-carousel-item-text">' + jQuery[uniqID].content[i].nav.navText + '</p>' +
            	'</a>' +
            	'</li>';
        }

        // Add carousel nav to dom
        domContainer.find('.carousel').html(jQuery.sliderNavItems);
        //--------------------------------------------------------------------------------------------------------//
        //-------------------------- End - Create Carousel Nav Items ---------------------------------------------//
        //--------------------------------------------------------------------------------------------------------//



        // Define specific carousel
        var pCarousel = domContainer.find('.mod-itc-carousel-nav-item-collect'),
            carouselConfig = {},
            oCarouselContainer = jQuery(pCarousel).find('.carousel-container'),
            oCarousel = jQuery(oCarouselContainer).find('.carousel').filter(function() {
                return jQuery(this).css('display') !== 'none';
            }),
            pages = jQuery(oCarousel).children('.carousel-item').length, //total number of pages in the carousell
            oControls = jQuery(oCarouselContainer).find('.carousel-pagination'),
            oControlsWrap = jQuery(oCarouselContainer).find('.pagination-wrap').css('visibility', 'visible'),
            oControlsWrapContainer = jQuery(oCarouselContainer).find('.pagination-wrap-container'),
            hasPagination = oControls.length > 0,
            pageLinks,
            curPage = 1,
            renderPagination = function() {
                var controlsStr = "";
                for (var i = 0; i < pages; i++) {
                    controlsStr += '<a href="" title="page ' + (i + 1) + '" class="' + (i + 1) + '"' + '><span>' + (i + 1) + '</span>&nbsp;</a>';
                }
                jQuery(oControls).html(controlsStr);

                pageLinks = jQuery(oControls).find('a');
                pageLinks.bind('click', function() {
                    if (!jQuery(this).parent().hasClass('disabled')) {
                        curPage = parseInt(jQuery(this).text(), 10);
                        setPagination();
                    }
                });
                jQuery(oControls).find('a:last').addClass('last');

                if (jQuery(oControlsWrapContainer).length > 0) {
                    if (jQuery.browser.msie && jQuery.browser.version == "6.0") {
                        var wrapwidth = jQuery(oControlsWrap).width();
                        jQuery(oControlsWrap).css({
                            'width': wrapwidth,
                            'float': 'none',
                            'padding-right': '0'
                        }).find('.carousel-nav').css('right', '4px');
                    } else {
                        var wrapwidth = jQuery(oControlsWrap).width() + 1;
                        jQuery(oControlsWrap).css({
                            'width': wrapwidth,
                            'float': 'none'
                        });
                    }
                }

                //attach listeners on the next and previous buttons so that the appropriate page
                //in the pagination will be highlighted when they are clicked on
                jQuery(default_config.btnPrev).bind('click', function() {
                    if (curPage != 1) {
                        curPage -= 1;

                    } else if (curPage == 1) {
                        curPage = pages;
                    }
                    setPagination();
                });

                jQuery(default_config.btnNext).bind('click', function() {
                    if (curPage <= pages - 1) { //make sure we're not at the end of the cycle
                        curPage += 1;

                    } else if (curPage == pages) {
                        curPage = 1;
                    }
                    setPagination();
                });
            };
        oCarouselContainer.css('visibility', 'visible');

        jQuery.extend(carouselConfig, configuration.config); //merge the configs

        try {
            if (hasPagination) {
                renderPagination();
                setPagination();

                //add pagination capability to jcarousel lite
                var paginationLinks = [];
                for (var i = 1; i < pages + 1; i++) {
                    var a = jQuery(pCarousel).find('.' + i);
                    paginationLinks.push(a);
                }
                carouselConfig.btnGo = paginationLinks;
            }
            jQuery(pCarousel).jCarouselLite(carouselConfig);
            
        } catch (e) {
            // Do something here, or not.
        }

        //---------------------------------------------------------------------------------------------------------//
        //-------------------------- Start - Carousel Hover Events ------------------------------------------------//
        //---------------------------------------------------------------------------------------------------------//
        jQuery("li.carousel-item").hover(function(e) {
            jQuery(this).addClass("mod-itc-carousel-li-hover");
        }, function(e) {
            jQuery(this).removeClass("mod-itc-carousel-li-hover");
        });
        //---------------------------------------------------------------------------------------------------------//
        //-------------------------- End - Carousel Hover Events --------------------------------------------------//
        //---------------------------------------------------------------------------------------------------------//

        //---------------------------------------------------------------------------------------------------------//
        //-------------------------- Start -  Set first media and copy --------------------------------------------//
        //---------------------------------------------------------------------------------------------------------//			
        domContainer.find('.mod-itc-carousel-headline').html(jQuery[uniqID].content[0].title);

        if (jQuery[uniqID].content[0].media != "") {

            // If cover class is not set, set it and pause player
            if (!jQuery('.itc-media-cover-div').hasClass('cover-div-media')) {

                jQuery('.itc-media-cover-div').toggleClass("cover-div-media");

            }
            if (jQuery.browser.msie && jQuery.browser.version === '6.0') {
                jQuery('#ump-wrapper').css('z-index', 0);
            }

            //jQuery('.cover-div').toggleClass("cover-div-media");
            domContainer.find('.itc-media-cover-div').html(jQuery[uniqID].content[0].media);

        } else {
            // If the cover div has covering class set, remove it
            // We are here because event is handled by UMP events
            if (jQuery('.itc-media-cover-div').hasClass('cover-div-media')) {
                jQuery('.itc-media-cover-div').toggleClass("cover-div-media");
            }

            if (jQuery.browser.msie && jQuery.browser.version === '6.0') {
                jQuery('#ump-wrapper').css('z-index', 1);
            }


            // Since we are here, we are assuming that the first item is media
            // So gets its meta data
            var firstMedia = domContainer.find('a.mod-ump-embedded-subscriber:first');
            firstMedia.assetUrl = firstMedia.attr('ump-asset-url');
            firstMedia.pageUrl = firstMedia.attr('ump-page-url');

            // These we're commented out...
            //umpEmbedded.SetMedia('video',firstMedia.assetUrl,firstMedia.pageUrl,'','','');
            //jQuery.mediaPlaying = true;
        }

        // Ensure top of media player is aligned with the top of the row-copy
        if (!jQuery.browser.msie || (jQuery.browser.msie && !(jQuery.browser.version === '6.0'))) {
            if (jQuery('.media-marker').length > 0) {
                jQuery('#ump-wrapper').css('top', jQuery('.media-marker').position().top);
                jQuery('.itc-media-cover-div').css('top', jQuery('.media-marker').position().top);
            }
        }

        var copyMainFirst = '';

        for (var i in jQuery[uniqID].content[0].content) {
            var ph = jQuery[uniqID].content[0].content[i].heading;
            var pp = jQuery[uniqID].content[0].content[i].paragraph;

            copyMainFirst += '<h3>' + ph + '</h3>';
            copyMainFirst += '<p>' + pp + '</p>';
        }

        // Ends - Set first item
        domContainer.find('.mod-itc-slide-main-paragraph').html(copyMainFirst);

        // If Omniture tracking mod setup has been defined we need to call it to setup the carousel items for
        // tracking
        if (Intel.mod && Intel.mod.setupOmnitureTracking) {
            Intel.mod.setupOmnitureTracking('carousel', domContainer);
        }


        //---------------------------------------------------------------------------------------------------------//
        //-------------------------- End -  Set first media and copy ----------------------------------------------//
        //---------------------------------------------------------------------------------------------------------//

        //---------------------------------------------------------------------------------------------------------//
        //-------------------------- Start -  Bind Carousel media player nav click events -------------------------//
        //---------------------------------------------------------------------------------------------------------//		
        domContainer.find('ul a.mod-ump-embedded-subscriber').each(function() {
            umpEmbedded.RegisterElement(this);
        });
        //---------------------------------------------------------------------------------------------------------//
        //-------------------------- End -  Bind Carousel media player nav click events ---------------------------//
        //---------------------------------------------------------------------------------------------------------//


        //---------------------------------------------------------------------------------------------------------//
        //-------------------------- Start -  Bind Carousel nav click events --------------------------------------//
        //---------------------------------------------------------------------------------------------------------//		
        domContainer.find('ul a').bind('click.carousel', function(event) {
            // Starts - cover or uncover media player
            // If item isn't a UMP event subscriber
            if (!jQuery(this).hasClass('mod-ump-embedded-subscriber')) {

                // If cover class is not set, set it and pause player
                if (!jQuery('.itc-media-cover-div').hasClass('cover-div-media')) {

                    jQuery('.itc-media-cover-div').toggleClass("cover-div-media");
                    umpEmbedded.Pause();
                }

                if (jQuery.browser.msie && jQuery.browser.version === '6.0') {
                    jQuery('#ump-wrapper').css('z-index', 0);
                }

                // Get content copy from json
                domContainer.find('.mod-itc-carousel-headline').html(jQuery[uniqID].content[this.id].title);
                domContainer.find('.itc-media-cover-div').html(jQuery[uniqID].content[this.id].media);

            } else {

                //umpEmbedded.RegisterElement(this);

                // If the cover div has covering class set, remove it
                // We are here because event is handled by UMP events
                if (jQuery('.itc-media-cover-div').hasClass('cover-div-media')) {

                    jQuery('.itc-media-cover-div').toggleClass("cover-div-media");

                }

                if (jQuery.browser.msie && jQuery.browser.version === '6.0') {
                    jQuery('#ump-wrapper').css('z-index', 1);
                }

                // Get content copy from json
                domContainer.find('.mod-itc-carousel-headline').html(jQuery[uniqID].content[this.id].title);
                //umpEmbedded.GetElementInfo(this);
                jQuery.mediaPlaying = true;

            } // Ends - cover or uncover media player


            // Set main copy
            var copyMain = '';

            for (var i in jQuery[uniqID].content[this.id].content) {
                var ph = jQuery[uniqID].content[this.id].content[i].heading;
                var pp = jQuery[uniqID].content[this.id].content[i].paragraph;

                copyMain += '<h3>' + ph + '</h3>';
                copyMain += '<p>' + pp + '</p>';
            }

            // Attatch main copy to dom
            domContainer.find('.mod-itc-slide-main-paragraph').html(copyMain);

            // If Omniture tracking mod setup has been defined we need to call it to setup the carousel items for
            // tracking
            if (Intel.mod && Intel.mod.setupOmnitureTracking) {
                Intel.mod.setupOmnitureTracking('carousel', domContainer);
            }
        });
        //---------------------------------------------------------------------------------------------------------//
        //-------------------------- End -  Bind Carousel nav click events ----------------------------------------//
        //---------------------------------------------------------------------------------------------------------//

        if (jQuery['tooltipManager']) {
            jQuery['tooltipManager'].AddToolTip(new ToolTipProperties('itc-tooltip2-subscriber', 'ToolTip2Container', null, 'ToolTip2Content', PlacementTypeY.ABOVE, PlacementTypeX.CENTER, 5, 19));
        }

    };

    Intel.mod.carouselConfig = function(configuration) {

        // Setup tooltips if we have the appropriate classes loaded.
        if (typeof (ToolTipHandler) === 'function' && typeof (ToolTipHandler.prototype) === 'object') {
            if (!jQuery['tooltipManager']) {
                jQuery['tooltipManager'] = new ToolTipHandler();

                if (!jQuery('#ToolTip2Container').get(0)) {
                    jQuery('body').append('<div id="ToolTip2Container" class="itc-tooltip2-container"><div id="ToolTip2Content" class="itc-tooltip2-content"></div><div class="itc-tooltip2-bottom"></div></div>');
                }
            }
        }

        if (configuration && configuration.data) {
            if (typeof (configuration.data) === "string") {
                jQuery.getJSON(configuration.data, function(json) {
                    configuration.data = json;
                    Intel.mod.setupCarousel(configuration);
                });
            } else {
                Intel.mod.setupCarousel(configuration);
            }
        }
    };
})(jQuery);

