var ImageFader = {
    init: function() {
        var images = ImageFader.getElementsByClass("fadein", "img");
        for (var i = 0; images[i]; i++) {
            var img = images[i];
            img.currentOpacity = 20;
            img.fadeIn = null;
            img.fadeOut = null;
            img.onmouseover = ImageFader.imageOver;
            img.onmouseout = ImageFader.imageOut;
        }
    },
    imageOver: function() {
        if (this.fadeOut) {
            clearTimeout(this.fadeOut);
        }
        ImageFader.fadeIn(this);
    },
    imageOut: function() {
        if (this.fadeIn) {
            clearTimeout(this.fadeIn);
        }
        ImageFader.fadeOut(this);
    },
    fadeIn: function(img) {
        img.currentOpacity += 10;
        ImageFader.setOpacity(img);
        if (img.currentOpacity < 100) {
            var f = function() { ImageFader.fadeIn(img); };
            img.fadeIn = setTimeout(f, 50);
        }
    },
    fadeOut: function(img) {
        img.currentOpacity -= 10;
        ImageFader.setOpacity(img);
        if (img.currentOpacity > 20) {
            var f = function() { ImageFader.fadeOut(img); };
            img.fadeOut = setTimeout(f, 90);
        }
    },
    getElementsByClass: function(classValue, tagName, parentElement) {
        var elementArray = [];

        if (tagName) {
            if (parentElement) {
                elementArray = parentElement.getElementsByTagName(tagName);
            } else {
                elementArray = document.getElementsByTagName(tagName);
            }
        } else {
            if (!parentElement) {
                if (document.all) {
                    elementArray = document.all;
                } else {
                    elementArray = document.getElementsByTagName("*");
                }
            } else {
                elementArray = parentElement.getElementsByTagName("*");
            }
        }
        var matchedArray = [];
        if (classValue.length > 0) {
            var pattern = new RegExp("(^| )" + classValue + "( |$)");

            for (var i = 0; i < elementArray.length; i++) {
                if (pattern.test(elementArray[i].className)) {
                    matchedArray[matchedArray.length] = elementArray[i];
                }
            }
        } else {
            matchedArray = elementArray;
        }

        return matchedArray;
    },
    setOpacity: function(img) {
        var opacity = (img.currentOpacity == 100) ? 99.999 : img.currentOpacity;
        img.style.filter = "alpha(opacity:" + opacity + ")";
        img.style.opacity = opacity / 100;
    },
    addLoadEvent: function(func) {
        var oldonload = window.onload;
        if (typeof window.onload != 'function') {
            window.onload = func;
        } else {
            window.onload = function() {
                oldonload();
                func();
            }
        }
    }
}
ImageFader.addLoadEvent(ImageFader.init);
