(function($) {

    $.fn.s3Slider = function() {

        var element = this;
        var timeOut = 5000;
        var current = null;
        var timeOutFn = null;
        var faderStat = true;
        var mOver = false;
        var items = $("#" + element[0].id + "Content ." + element[0].id + "Image");
        var itemsSpan = $("#" + element[0].id + "Content ." + element[0].id + "Image span");
        var itemsImage = $("#" + element[0].id + "Content ." + element[0].id + "Image img");

        var fadeElement = function(isMouseOut) {
            var thisTimeOut = (timeOut / 3);
            thisTimeOut = (faderStat) ? 10 : thisTimeOut;
            if (items.length > 0) {
                timeOutFn = setTimeout(makeSlider, thisTimeOut);
            }
        };

        var makeSlider = function() {
            current = (current != null) ? current : items[(items.length - 1)];
            var currNo = jQuery.inArray(current, items) + 1;
            currNo = (currNo == items.length) ? 0 : (currNo - 1);
            if (faderStat) {
                if (!mOver) {
                    var content = $("#" + element[0].id + "Content");
                    var image = $(itemsImage[currNo]);
                    if ($(itemsSpan[currNo]).hasClass("bottom")) {
                        content.css("top", 0);
                        content.css("left", 0);
                    }
                    else {
                        content.css("top", 300 - image.height());
                        content.css("left", 898 - image.width());
                    }
                    $(items[currNo]).fadeIn((timeOut / 6), function() {
                        if ($(itemsSpan[currNo]).hasClass("bottom")) {
                            var height = 300 - image.height();
                            var width = 898 - image.width();
                            content.animate({top: height, left: width}, timeOut, "linear", function() {
                                $(itemsSpan[currNo]).show((timeOut / 6), function() {
                                    faderStat = false;
                                    current = items[currNo];
                                    if (!mOver) {
                                        fadeElement(false);
                                    }
                                });
                            });
                        }
                        else {
                            content.animate({top: 0, left: 0}, timeOut, "linear", function() {
                                $(itemsSpan[currNo]).show((timeOut / 6), function() {
                                    faderStat = false;
                                    current = items[currNo];
                                    if (!mOver) {
                                        fadeElement(false);
                                    }
                                });
                            });
                        }
                    });
                }
            }
            else {
                if (!mOver) {
                    if ($(itemsSpan[currNo]).css('bottom') == 0) {
                        $(itemsSpan[currNo]).hide((timeOut / 6), function() {
                            $(items[currNo]).fadeOut((timeOut / 6), function() {
                                faderStat = true;
                                current = items[(currNo + 1)];
                                if (!mOver) {
                                    fadeElement(false);
                                }
                            });
                        });
                    }
                    else {
                        $(itemsSpan[currNo]).hide((timeOut / 6), function() {
                            $(items[currNo]).fadeOut((timeOut / 6), function() {
                                faderStat = true;
                                current = items[(currNo + 1)];
                                if (!mOver) {
                                    fadeElement(false);
                                }
                            });
                        });
                    }
                }
            }
        };

        makeSlider();

    };

})(jQuery);
