﻿// init slideshow
function initSlideShow() {
    jQuery('.intro').slideShow({
        autoSlideShow: true,
        numElementLink: 'ul.add-nav a',
        slideEl: 'div.image-box > div.slide',        
        switchTime: 5000,
        duration: 750
    });
}
// slideshow plugin
jQuery.fn.slideShow = function(_options) {
    var _options = jQuery.extend({

        linkNext: 'a.next',
        linkPrev: 'a.prev',
        linkPause: 'a.pause',
        numElementLink: 'div.add-nav li a',
        duration: 500,
        pauseOnHover: true,
        autoSlideShow: true,
        autoHeight: false,
        switchTime: 3000,
        event: 'click',
        currentEl: '#footer span.cur',
        allEl: '#footer span.all'
    }, _options);

    return this.each(function() {
        var _THIS = jQuery(this);
        var _slideEl = jQuery(_options.slideEl, _THIS);
        var _elTagName = _options.slideEl;
        var _linkNext = jQuery(_options.linkNext, _THIS).length ? jQuery(_options.linkNext, _THIS) : false;
        var _linkPrev = jQuery(_options.linkPrev, _THIS).length ? jQuery(_options.linkPrev, _THIS) : false;
        var _linkPause = jQuery(_options.linkPause, _THIS).length ? jQuery(_options.linkPause, _THIS) : false;
        var _numElementLink = jQuery(_options.numElementLink, _THIS).length ? jQuery(_options.numElementLink, _THIS) : false;
        var _numElement = jQuery(_options.numElementLink, _THIS).length ? _numElementLink.parent() : false;
        var _duration = _options.duration;
        var _switchTime = _options.switchTime;
        var _numElActive, _n, _timer = false, _hover = false;


        if (!_slideEl.filter('.active').length)
            _slideEl.eq(0).addClass('active');
        jQuery(_slideEl).not(".active").css('display', 'none');
        jQuery(_slideEl).not(".active").css('display', 'none');

        if (jQuery(_numElement).length) { activeNumEl() }

        if (_options.autoSlideShow) {
            _timer = setTimeout(function() { nextEl() }, _switchTime);
            contentHover();
        }
        if (_linkNext) {
            jQuery(_linkNext).click(function() {
                if (_timer) {
                    clearTimeout(_timer);
                    _timer = setTimeout(function() { nextEl() }, _switchTime);
                }
                if (jQuery(_slideEl).filter(".active").next().is(_elTagName)) {
                    jQuery(_slideEl).filter(".active").next().addClass("next");
                } else {
                    jQuery(_slideEl).eq(0).addClass("next");
                }
                fadeElement();
                activeNumEl();
                return false;
            });
        }
        if (_linkPrev) {
            jQuery(_linkPrev).click(function() {
                if (_timer) {
                    clearTimeout(_timer);
                    _timer = setTimeout(function() { nextEl() }, _switchTime);
                }
                if (jQuery(_slideEl).filter(".active").prev().is(_elTagName)) {
                    jQuery(_slideEl).filter(".active").prev().addClass("next");
                } else {
                    jQuery(_slideEl).filter(":last-child").addClass("next");
                }
                fadeElement();
                activeNumEl();
                return false;
            });
        }
        if (_linkPause) {
            if (!_options.autoSlideShow) {
                _linkPause.addClass('play');
                _options.autoSlideShow = true;
                if (!_hover) contentHover();
            }
            jQuery(_linkPause).click(function() {
                if (!_linkPause.is('.play')) {
                    clearTimeout(_timer);
                    _linkPause.addClass('play');
                } else {
                    _linkPause.removeClass('play');
                    _timer = setTimeout(function() { nextEl() }, _switchTime);
                }
                return false;
            });
        }
        if (_numElementLink) {
            jQuery(_numElementLink).bind(_options.event, function() {
                if (_timer) {
                    clearTimeout(_timer);
                    _timer = setTimeout(function() { nextEl() }, _switchTime);
                }
                _n = _numElement.index(jQuery(this).parent());
                if (!jQuery(_slideEl).eq(_n).hasClass("active")) {
                    jQuery(_slideEl).eq(_n).addClass("next");
                    fadeElement();
                    activeNumEl();
                }
                return false;
            });
        }
        if (_options.currentEl || _options.allEl) {
            _THIS.all = _slideEl.length;
            jQuery(_options.allEl, _THIS).html(_THIS.all);
            function currentNum() {
                var _index = _slideEl.index(_slideEl.filter('.active')) + 1;
                jQuery(_options.currentEl, _THIS).html(_index);
            }
            currentNum();
        }
        function contentHover() {
            if (!_options.pauseOnHover) return;
            _hover = true;
            _slideEl.hover(function() {
                if (_timer) clearTimeout(_timer);
            }, function() {
                if (_linkPause && !_linkPause.is('.play'))
                    _timer = setTimeout(function() { nextEl() }, _switchTime);
                else if (!_linkPause)
                    _timer = setTimeout(function() { nextEl() }, _switchTime);
            });
        }
        function nextEl() {
            if (jQuery(_slideEl).filter(".active").next().is(_elTagName)) {
                jQuery(_slideEl).filter(".active").next().addClass("next");
            } else {
                jQuery(_slideEl).eq(0).addClass("next");
            }
            fadeElement();
            activeNumEl();
            _timer = setTimeout(function() { nextEl() }, _switchTime);
        };
        function activeNumEl() {
            jQuery(_numElement).removeClass("active");
            _numElActive = jQuery(_slideEl).index(jQuery(_slideEl).filter(".active")[0]);
            jQuery(_numElement).eq(_numElActive).addClass("active");
        };
        function fadeElement() {
            jQuery(_slideEl).filter(".active").fadeOut(_duration).removeClass("active");
            jQuery(_slideEl).filter(".next").fadeIn(_duration).addClass("active").removeClass("next");
            if (_options.autoHeight) jQuery(_slideEl).filter(".active").eq(0).parent().animate({ height: jQuery(_slideEl).filter(".active").eq(0).height() }, { duration: _duration });
            if (_options.currentEl || _options.allEl) currentNum();
        };
    });
}
