﻿(function($, window)
{
    var imageRotatorInfoClass = '.bannerImageRotatorInfo',

        imageRotatorWrapperClass = '.bannerImageRotator',

        imageRotatorControlClass = '.bannerImageRotatorControl',

        imageRotatorControlPrevBtnClass = '.bannerImageRotatorPrevBtn',

        imageRotatorControlNextBtnClass = '.bannerImageRotatorNextBtn',

        imageWrapperClass = '.bannerImageWrapper',

        imageRotatorControlTextClass = '.banerImageRotatorControlText',

        imageRotatorImages = [],

        currentImage = 0,

        height = 0,

        imageRotatorInterval = null;

    $(document).ready(function()
    {
        var imageRotatorWrapper = $(imageRotatorWrapperClass),

            hiddenPanel = $(imageRotatorInfoClass),

            showControl = hiddenPanel.find('input:hidden[id$=hiddenShowControl]').val(),

            autoScroll = hiddenPanel.find('input:hidden[id$=hiddenAutoScroll]').val();

        imageRotatorImages = GetImages(hiddenPanel);

        if (imageRotatorImages.length)
        {
            if (imageRotatorImages.length > 1)
            {
                InitializeControl(imageRotatorWrapper, showControl, autoScroll);

                BeginRotate(imageRotatorWrapper, autoScroll);
            }
            else if (imageRotatorImages.length == 1)
            {
                imageRotatorWrapper.append($(imageRotatorImages[0]).show());
            }
        }

    });

    function GetImages(container)
    {
        var images = [];

        container.find('img[id$=rotatorImage]').each(function()
        {
            var $this = $(this);

            if ($this.height() > height)
                height = $this.height();

            var anchor = $this.parent('a');

            if (anchor.length)
            {
                $this.css('cursor', 'pointer');

                if (anchor.attr('rel') == "video")
                {
                    var vidWidth = (anchor.attr('vidwidth')) ? anchor.attr('vidwidth') : '560';

                    var vidHeight = (anchor.attr('vidheight')) ? anchor.attr('vidheight') : '340';

                    $this.click(function()
                    {
                        $('#videoLinkModal').eq(0).modalVideo(
                        {
                            src: anchor.attr('href'),
                            width: vidWidth,
                            height: vidHeight,
                            swf: '/_layouts/CTP.FlowPlayer/controls/flowplayer-3.1.5.swf'
                        });
                    });
                }
                else
                {
                    $this.click(function()
                    {
                        window.location = anchor.attr('href');
                    });
                }
            }
        });

        return container.find('img[id$=rotatorImage]').hide();
    }

    function InitializeControl(container, show, autoScroll)
    {
        var control = container.find(imageRotatorControlClass),

            containerPosition = container.position(),

            controlLeft = ((containerPosition.left + container.width()) - (control.width() + 5)),

            controlTop = ((containerPosition.top + 225) - (control.height() + 20));

        control.css({ top: controlTop + 'px', left: controlLeft + 'px' });

        if (show == "true")
        {
            control.show();

            bindControl(control, autoScroll, container);
        }
        else
        {
            bindControl(control, autoScroll, container);
        }
    }

    function BeginRotate(container, autoScroll)
    {
        var imageWrapper = container.find(imageWrapperClass);

        for (var i = 0; i < imageRotatorImages.length; i++)
        {
            imageWrapper.append(imageRotatorImages[i]);
        }

        imageWrapper.find('img').eq(currentImage).fadeIn("slow");

        setImageRotatorInterval(autoScroll, container);

        updateControlText(container);
    }

    function setImageRotatorInterval(autoScroll, container)
    {
        if (autoScroll == "true" || autoScroll == true)
        {
            imageRotatorInterval = window.setInterval(function()
            {
                rotate(container);

            }, 8000);
        }
    }

    function rotate(container, dir, normal)
    {
        var imageWrapper = container.find(imageWrapperClass);

        dir = dir || "next";

        normal = (normal == undefined) ? true : normal;

        var nextImage = dir == "prev" ? currentImage - 1 : currentImage + 1;

        if (nextImage >= imageRotatorImages.length)
            nextImage = 0;
        else if (nextImage < 0)
            nextImage = imageRotatorImages.length - 1;

        var curImage = imageWrapper.find('img').eq(currentImage);

        var nextImageObj = imageWrapper.find('img').eq(nextImage);

        if (normal)
        {
            curImage.fadeOut(2000, function()
            {
                updateControlText(container);

                nextImageObj.fadeIn(2000);
            });
        }
        else
        {
            curImage.fadeOut(500, function()
            {
                updateControlText(container);

                nextImageObj.fadeIn(500);
            });
        }

        currentImage = nextImage;
    }

    function stopRotate()
    {
        window.clearInterval(imageRotatorInterval);
    }

    function updateControlText(container)
    {
        var showControl = (container.find(imageRotatorControlClass).css('display') != "none");

        if (showControl == true)
        {
            var defaultText = "Feature "

            defaultText += (currentImage + 1) + " of " + imageRotatorImages.length;

            container.find(imageRotatorControlTextClass).text(defaultText);
        }
    }

    function bindControl(control, autoScroll, container)
    {
        control.find(imageRotatorControlPrevBtnClass).bind('click', { container: container, autoScroll: autoScroll }, prevClick);

        control.find(imageRotatorControlNextBtnClass).bind('click', { container: container, autoScroll: autoScroll }, nextClick);
    }

    function prevClick(e)
    {
        var container = e.data.container;

        var autoScroll = e.data.autoScroll;

        if (autoScroll == "true" || autoScroll == true)
        {
            stopRotate();
        }

        rotate(container, "prev", false);

        if (autoScroll == "true" || autoScroll == true)
        {
            setImageRotatorInterval(autoScroll, container);
        }
    }

    function nextClick(e)
    {
        var container = e.data.container;

        var autoScroll = e.data.autoScroll;

        if (autoScroll == "true" || autoScroll == true)
        {
            stopRotate();
        }

        rotate(container, "next", false);

        if (autoScroll == "true" || autoScroll == true)
        {
            setImageRotatorInterval(autoScroll, container);
        }
    }

})(jQuery, window);