(function ($) {
    var loopDuration;
    var firstButton;
    var lastButton;
    var activeButton;
    var nextButton;
    var buttonPanel;
    var bannerInterval;
    var contentList = new Array();
    var bannerObj;
    /*
    var bannerObject = { header: '', body: '', duration: 5,
    image: '', posX: 0, posY: 0, url: '#',
    target: '_self'
    };
    */
    var settings = { width: "700px", height: "200px", bannerID: '453' };

    $.fn.RotatingBanner = function (options) {
        function setGlobalSettings(args) {
            settings.width = $(args).attr("width");
            settings.height = $(args).attr("height");
        }

        function LoadSettings() {
            $.ajax({ type: "GET",
                url: "/banner.aspx?id=" + settings.bannerID,
                cache: false,
                async: false,
                dataType: "xml",
                success: function (xml) {
                    $(xml).find("gallery > item").each(function () {
                        var _bobj = { header: $(this).find("name").text(),
                            body: $(this).find("description").text(),
                            duration: $(this).find("durationTime").text(),
                            image: $(this).find("image").text(),
                            posX: $(this).find("positionX").text(),
                            posY: $(this).find("positionY").text(),
                            url: $(this).find("url").text(),
                            target: $(this).find("target").text()
                        };

                        contentList.push(_bobj);
                    });

                    setGlobalSettings($(xml).find("gallery > globals"));
                }
            });
        }

        function CreateBannerItem(index) {
            var itemContainer = $("<div class='banner-item item_index_" + index + "'></div>");
            var contentContainer = $("<div class='text-panel'></div>");
            var headerText = $("<div class='header'></div>").html(contentList[index].header);
            var bodyText = $("<div class='body'></div>").html(contentList[index].body);
            var link = $("<a></a>").attr("href", contentList[index].url).attr("target", contentList[index].target);
            var img = $("<img/>").css("z-index", (100 + contentList.length) - index).attr("src", contentList[index].image);

            $(contentContainer).append(headerText);
            $(contentContainer).append(bodyText);
            $(contentContainer).toggle(index == 0);
            $(contentContainer).css("left", contentList[index].posX + "px").css("top", contentList[index].posY + "px");

            $(link).append(img);
            $(itemContainer).append(link);

            $(itemContainer).append(contentContainer);
            $(itemContainer).toggle(index == 0);

            return itemContainer;
        }

        function CreateButton(text, index) {
            var itemID = "item_index_" + index;
            var button = $("<div class='button-ctl' id='" + itemID + "'>" + text + "</div>")
            $(buttonPanel).append(button);

            if (index == 0)
                $(button).addClass("active");

            $(button).bind('click.RotatingBanner', { buttonID: itemID }, buttonClick);
        }

        function CreateButtons() {
            for (i = 0; i < contentList.length; i++) {
                CreateButton(i, i);
            }
        }

        function UpdateTextPanel(bannerID) {
            var bannerItem;

            if (bannerID == undefined)
                bannerItem = $(bannerObj).find(".banner-item").first();
            else
                bannerItem = $(bannerObj).find("#" + bannerID);

            var height = $(bannerItem).find(".text-panel .content-panel").height();
            var width = $(bannerItem).find(".text-panel .content-panel").width();

            $(bannerItem).find(".text-panel .bg").height(height);
            $(bannerItem).find(".text-panel .bg").width(width);
        }

        function SetActiveButton(bannerID) {
            $(buttonPanel).children().each(function () {
                if ($(this).attr("id") == bannerID)
                    $(this).addClass("active");
                else
                    $(this).removeClass("active");
            });
        }

        function RotateBanner(newObj) {
            var oldObj = $(bannerObj).find(".banner-item:visible");
            $(oldObj).fadeOut(1000);
            $(oldObj).find(".text-panel").hide();

            $(newObj).fadeIn(1000, function () {
                $(this).find(".text-panel").fadeIn(500);
            });
        }

        function buttonClick(event) {
            clearInterval(bannerInterval);

            SetActiveButton(event.data.buttonID);

            newObj = $(bannerObj).find("." + event.data.buttonID);

            RotateBanner(newObj);

            bannerInterval = setInterval(intervalCallback, loopDuration);
        }

        function intervalCallback() {
            var nextButton = $(buttonPanel).find(".active").next();

            if (nextButton.length == 0)
                nextButton = firstButton;

            var newObj = $(bannerObj).find("." + $(nextButton).attr("id"));

            SetActiveButton($(nextButton).attr("id"));
            RotateBanner(newObj);
        }

        return this.each(function () {
            var obj = $(this);

            if (options)
                $.extend(settings, options);

            LoadSettings();
            bannerObj = $("<div class='banner'></div>");
            //bannerObj.css("width", settings.width).css("height", settings.height)
            buttonPanel = $("<div class='button-panel'></div>");
            $(bannerObj).append(buttonPanel);

            for (i = 0; i < contentList.length; i++) {
                CreateButton(i + 1, i);

                $(bannerObj).append(CreateBannerItem(i));
            }

            firstButton = $(bannerObj).find(".button-panel .button-ctl:first");
            lastButton = $(bannerObj).find(".button-panel .button-ctl:last");

            loopDuration = (contentList[0].duration * 1000);
            bannerInterval = setInterval(intervalCallback, loopDuration);

            $(this).append(bannerObj);
            $(this).css("width", settings.width).css("height", settings.height);
        });
    };
})(jQuery);
