﻿///<reference path="~/scripts/jquery-1.3.2-vsdoc.js" />
///<reference path="~/scripts/jquery.timers.js" />

jQuery.fn.banner = function(options) {

    return this.each(function() {
        settings = jQuery.extend({
            height: 50,
            width: 50,
            interval: 1500,
            pauseInterval: 4000,
            pauseRotationOnMouseOver: false
        }, options);

        var plugin = this;
        var bannerItemCount = $(plugin).find("ul.bannerItems li").length;
        var bannerItemIndex = 0;
        var playerOverride = false;

        //If there are no bannerItems quit without showing the control
        if (bannerItemCount == 0) {
            return;
        }

        //show the control
        $(plugin).css("display", "block");

        //set the dimensions
        $(plugin).css("height", settings.height);
        $(plugin).css("width", settings.width);

        //wire up the events
        $(plugin).mouseenter(function() {
            $(plugin).stopTime();
            if (!settings.pauseRotationOnMouseOver) {
                enableAutoScroller(settings.pauseInterval);
            }
        });

        $(plugin).mouseout(function() {
            if (!playerOverride) {
                $(plugin).stopTime();
                enableAutoScroller(settings.interval);
            }
        });

        //Scoll to the first bannerItem
        scrollBannerItem(0);

        //Set the timer for the banner
        enableAutoScroller(settings.interval);

        //Configure the player
        var players = $(plugin).find("div.player");
        if (players.length > 0) {
            var player = players[0];
            $(player).find("li").click(function() { playerClick(this); });
            $(player).find("li").text('');
        }

        //Setup the Counters
        var counterItems = $(plugin).find("div.counterItem");


        function enableAutoScroller(interval) {
            $(plugin).everyTime(interval, function() { scrollBannerItem(bannerItemIndex++); });
        }

        function scrollBannerItem(index) {

            $(plugin).find("ul.bannerItems li").hide();
            if (index >= bannerItemCount) {
                index = 0;
            }
            if (index < 0) {
                index = bannerItemCount - 1;
            }
            var bannerItem = $(plugin).find("ul.bannerItems li")[index];

            //TODO: Do different transitions here
            $(bannerItem).show();

            if (bannerItemIndex >= bannerItemCount) {
                bannerItemIndex = 0;
            }

            //update counterItem
            if (counterItems != null && counterItems.length > 0) {
                counterItems.removeClass("counterItemSelected");
                counterItems.addClass("counterItem");
                var counterItem = counterItems[index];
                $(counterItem).addClass("counterItemSelected");
            }
        }

        function playerClick(btn, p) {
            playerOverride = true;
            switch (btn.className) {
                case 'player_prev':
                    $(plugin).stopTime();
                    bannerItemIndex--;
                    if (bannerItemIndex < 0) {
                        bannerItemIndex = bannerItemCount - 1;
                    }
                    scrollBannerItem(bannerItemIndex);
                    break;

                case 'player_pause':
                    $(plugin).stopTime();
                    break;

                case 'player_play':
                    playerOverride = false;
                    enableAutoScroller(settings.interval);
                    break;

                case 'player_next':
                    $(plugin).stopTime();
                    bannerItemIndex++;
                    scrollBannerItem(bannerItemIndex);
                    break;
            }
        }
    });
};




