﻿var heroManager = {
    Initalize: function(contanerElement, classId, activeClass, interval) {
        this.Index = 0;
        var thisHero = this;
        var elementList = contanerElement.getElementsByTagName("*");
        this.Elements = [];
        for (var i = 0; i < elementList.length; i++) {
            if (this.HasClass(elementList[i], classId)) {
                this.Elements.push(elementList[i]);
                elementList[i].onmouseover = function() { thisHero.MouseOver(this); };
            }
        }
        this.ContanerElement = contanerElement;
        this.ActiveClass = activeClass;
        this.Interval = interval;
        this.MoveIndex(0);
    },

    IncrementIndex: function() {
        this.MoveIndex((this.Index + 1) % this.Elements.length);
    },

    MouseOver: function(element) {
        this.MoveIndex(Array.indexOf(this.Elements, element));
    },

    MoveIndex: function(newIndex) {
        if (this.TimeOutId) {
            window.clearTimeout(this.TimeOutId);
        }

        this.RemoveClass(this.ContanerElement, this.ActiveClass + (this.Index + 1));
        this.RemoveClass(this.Elements[this.Index], this.ActiveClass);

        this.Index = newIndex;
        this.AddClass(this.ContanerElement, this.ActiveClass + (this.Index + 1));
        this.AddClass(this.Elements[this.Index], this.ActiveClass);
        var thisHero = this;
        this.TimeOutId = setTimeout(function() { thisHero.IncrementIndex(); }, this.Interval);
    },

    AddClass: function(element, className) {
        if (element && !this.HasClass(element, className)) {
            element.className = element.className + " " + className;
        }
    },

    RemoveClass: function(element, className) {
        if (element && element.className) {
            var newList = new Array();
            var curList = element.className.split(" ");
            for (var i = 0; i < curList.length; i++) {
                if (curList[i] != className) {
                    newList[newList.length] = curList[i];
                }
            }
            element.className = newList.join(" ");
        }
    },

    HasClass: function(element, className) {
        if (element && element.className) {
            var curList = element.className.split(" ");
            for (var i = 0; i < curList.length; i++) {
                if (curList[i] == className) {
                    return true;
                }
            }
        }
        return false;
    }
}

function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            if (oldonload) {
                oldonload();
            }
            func();
        }
    }
}
