(function ($) {
    $.fn.jqContentSlider = function (configs) {
        var autoRun, currentSlide, childs, totChilds;
        configs = $.extend({
            animSpeed: 600,
            prev: '',
            next: '',
            autoSlide: false,
            autoSlideInterval: 1000,
            autoSlideElement: '',
            autoSlideDirection: 'next',
            slideNavigation: false,
            slideNavigationElement: '',
            buildNavigation: true,
            setNavigationElementWidth: true,
            stopAutoSlideWhenClick: false,
            startSlide: 1,
            msiedetection: false
        }, configs);
        return this.each(function () {
            var base = $(this);
            childs = $(this).children().hide();
            $(childs[configs.startSlide - 1]).show();
            currentSlide = configs.startSlide;
            var attrToSearch = currentSlide - 1;
            $(configs.slideNavigationElement + ' li a[image="' + attrToSearch + '"]').addClass('active');
            $(configs.slideNavigationElement + ' li a[image="' + attrToSearch + '"]').parents('li[tab]').addClass('active').removeAttr('style');
            OpacityHome();
            totChilds = childs.length;
            if (configs.prev != '') {
                $(configs.prev).click(function () {
                    if (configs.autoSlide) {
                        clearInterval(autoRun);
                    }
                    prevSlide();
                });
            };
            if (configs.next != '') {
                $(configs.next).click(function () {
                    if (configs.autoSlide) {
                        clearInterval(autoRun);
                    }
                    nextSlide();
                });
            };
            if (configs.autoSlide) {
                AutoSlide();
            };
            if (configs.autoSlideElement != '') {
                var i = -1;
                $(configs.autoSlideElement).hover(function () {
                    ++i;
                    if (i == 0) {
                        if (configs.autoSlideDirection == 'prev') {
                            prevSlide();
                        } else if (configs.autoSlideDirection == 'next') {
                            nextSlide();
                        }
                    }
                    AutoSlide();
                }, function () {
                    i = -1;
                    clearInterval(autoRun);
                });
            };
            if (configs.slideNavigation && configs.slideNavigationElement != '') {
                $(configs.slideNavigationElement + ' li').click(function (ev) {
                    ev.stopImmediatePropagation();
                    var that = $(this);
                    clearInterval(autoRun);
                    if (configs.msiedetection && $.browser.msie) {
                        $(childs[currentSlide - 1]).hide();
                    } else {
                        $(childs[currentSlide - 1]).fadeOut('fast', 'linear');
                    }
                    $(configs.slideNavigationElement + ' li.active').removeClass('active');
                    that.addClass('active').removeAttr('style');
                    $('li a', $(this)).removeClass('active');
                    $('a:first', $(this)).addClass('active');
                    currentSlide = parseInt($('a:first', that).attr('image'), 10) + 1;
                    if (configs.msiedetection && $.browser.msie) {
                        $(childs[currentSlide - 1]).show();
                    } else {
                        $(childs[currentSlide - 1]).fadeIn(configs.animSpeed, 'linear');
                    }
                    if (configs.autoSlide && !configs.stopAutoSlideWhenClick) {
                        AutoSlide();
                    }
                    OpacityHome();
                });
                $(configs.slideNavigationElement + ' li a').click(function (ev) {
                    ev.preventDefault();
                    clearInterval(autoRun);
                    var that = $(this);
                    if (configs.msiedetection && $.browser.msie) {
                        $(childs[currentSlide - 1]).hide();
                    } else {
                        $(childs[currentSlide - 1]).css('z-index', '1').fadeOut(configs.animSpeed, 'linear');
                    }
                    $(configs.slideNavigationElement + ' li a.active').removeClass('active');
                    currentSlide = parseInt(that.attr('image'), 10) + 1;
                    if (configs.msiedetection && $.browser.msie) {
                        $(childs[currentSlide - 1]).show();
                    } else {
                        $(childs[currentSlide - 1]).css('z-index', '1000').fadeIn(configs.animSpeed, 'linear');
                    }
                    that.addClass('active');
                    SelectTab();
                    if (configs.autoSlide && !configs.stopAutoSlideWhenClick) {
                        AutoSlide();
                    }
                    return false;
                });
            };

            function prevSlide() {
                if (currentSlide == 1) {
                    currentSlide = totChilds;
                    if (configs.msiedetection && $.browser.msie) {
                        $(childs[0]).css('z-index', '1').hide();
                        $(childs[currentSlide - 1]).css('z-index', '100').show();
                    } else {
                        $(childs[0]).css('z-index', '1').fadeOut(configs.animSpeed, 'linear');
                        $(childs[currentSlide - 1]).css('z-index', '100').fadeIn(configs.animSpeed, 'linear');
                    }
                    if (configs.slideNavigation && configs.slideNavigationElement != '') {
                        SlideNavigationCurrent(currentSlide - 1);
                    }
                } else {
                    if (configs.msiedetection && $.browser.msie) {
                        $(childs[currentSlide - 1]).css('z-index', '1').hide();
                        $(childs[currentSlide - 2]).css('z-index', '100').show();
                    } else {
                        $(childs[currentSlide - 1]).css('z-index', '1').fadeOut(configs.animSpeed, 'linear');
                        $(childs[currentSlide - 2]).css('z-index', '100').fadeIn(configs.animSpeed, 'linear');
                    }
                    if (configs.slideNavigation && configs.slideNavigationElement != '') {
                        SlideNavigationCurrent(currentSlide - 2);
                    }
                    currentSlide--;
                }
            };

            function nextSlide() {
                if (currentSlide == totChilds) {
                    currentSlide = 1;
                    if (configs.msiedetection && $.browser.msie) {
                        $(childs[totChilds - 1]).css('z-index', '1').hide();
                        $(childs[currentSlide - 1]).css('z-index', '100').show();
                    } else {
                        $(childs[totChilds - 1]).css('z-index', '1').fadeOut(configs.animSpeed, 'linear');
                        $(childs[currentSlide - 1]).css('z-index', '100').fadeIn(configs.animSpeed, 'linear');
                    }
                    if (configs.slideNavigation && configs.slideNavigationElement != '') {
                        SlideNavigationCurrent(currentSlide - 1);
                    }
                } else {
                    if (configs.msiedetection && $.browser.msie) {
                        $(childs[currentSlide - 1]).css('z-index', '1').hide();
                        $(childs[currentSlide]).css('z-index', '100').show();
                    } else {
                        $(childs[currentSlide - 1]).css('z-index', '1').fadeOut(configs.animSpeed, 'linear');
                        $(childs[currentSlide]).css('z-index', '100').fadeIn(configs.animSpeed, 'linear');
                    }
                    if (configs.slideNavigation && configs.slideNavigationElement != '') {
                        SlideNavigationCurrent(currentSlide);
                    }
                    currentSlide++;
                }
            };

            function AutoSlide() {
                if (configs.autoSlideDirection == 'prev') {
                    autoRun = setInterval(function () {
                        prevSlide()
                    }, configs.autoSlideInterval);
                } else if (configs.autoSlideDirection == 'next') {
                    autoRun = setInterval(function () {
                        nextSlide()
                    }, configs.autoSlideInterval);
                }
            };

            function SlideNavigationCurrent(toCompare) {
                $(configs.slideNavigationElement + ' li a.active').removeClass('active');
                $(configs.slideNavigationElement + ' li a').filter(function () {
                    return (parseInt($(this).attr('image'), 10) == (toCompare)) ? true : false;
                }).attr('class', 'active');
                SelectTab();
            };

            function SelectTab() {
                $(configs.slideNavigationElement + ' li.active').removeClass('active');
                $(configs.slideNavigationElement + ' li a.active').parents('li[tab]').addClass('active');
                OpacityHome();
            };
        });
    };
})(jQuery);
