/* 
* jQuery slideShow v1.1.0 
* Copyright (c) 2008 Taranets Aleksey 
* www: markup-javascript.com 
* Licensed under the MIT License: 
* http://www.opensource.org/licenses/mit-license.php 
*/

jQuery.fn.slideShow = function(_options) {
    // defaults options	    
    var _options = jQuery.extend({
        slideEl: 'div.img-hold img',
        linkNext: 'a.next',
        linkPrev: 'a.prev',
        linkPause: 'a.pause',
        numElementLink: 'div.nav li a',
        duration: 500,
        autoSlideShow: false,
        switchTime: 3000,
        event: 'click',
        currentEl: '#footer span.cur',
        allEl: '#footer span.all'
    }, _options);
    return this.each(function() {
        var _THIS = jQuery(this);
        var _linkNext = false, _linkPrev = false, _linkPause = false, _numElementLink = false, _numElement = false;
        var _slideEl = $(_options.slideEl, _THIS);
        var _elTagName = _options.slideEl;
        if (_options.linkNext)
            var _linkNext = $(_options.linkNext, _THIS).length ? $(_options.linkNext, _THIS) : false;
        if (_options.linkPrev)
            var _linkPrev = $(_options.linkPrev, _THIS).length ? $(_options.linkPrev, _THIS) : false;
        if (_options.linkPause)
            var _linkPause = $(_options.linkPause, _THIS).length ? $(_options.linkPause, _THIS) : false;
        if (_options.numElementLink) {
            var _numElementLink = $(_options.numElementLink, _THIS).length ? $(_options.numElementLink, _THIS) : false;
            var _numElement = $(_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');

        $(_slideEl).not(".active").css('display', 'none');

        if ($(_numElement).length) { activeNumEl() }

        if (_options.autoSlideShow) {
            _timer = setTimeout(function() { nextEl() }, _switchTime);
            contentHover();
        }
        if (_linkNext) {
            $(_linkNext).click(function() {
                if (_timer) {
                    clearTimeout(_timer);
                    _timer = setTimeout(function() { nextEl() }, _switchTime);
                }
                if ($(_slideEl).filter(".active").next().is(_elTagName)) {
                    $(_slideEl).filter(".active").next().addClass("next");
                } else {
                    $(_slideEl).eq(0).addClass("next");
                }
                fadeElement();
                activeNumEl();
                return false;
            });
        }
        if (_linkPrev) {
            $(_linkPrev).click(function() {
                if (_timer) {
                    clearTimeout(_timer);
                    _timer = setTimeout(function() { nextEl() }, _switchTime);
                }
                if ($(_slideEl).filter(".active").prev().is(_elTagName)) {
                    $(_slideEl).filter(".active").prev().addClass("next");
                } else {
                    $(_slideEl).filter(":last-child").addClass("next");
                }
                fadeElement();
                activeNumEl();
                return false;
            });
        }
        if (_linkPause) {
            if (!_options.autoSlideShow) {
                _linkPause.addClass('play');
                _options.autoSlideShow = true;
                if (!_hover) contentHover();
            }
            $(_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) {
            $(_numElementLink).bind(_options.event, function() {
                if (_timer) {
                    clearTimeout(_timer);
                    _timer = setTimeout(function() { nextEl() }, _switchTime);
                }
                _n = _numElement.index($(this).parent());
                if (!$(_slideEl).eq(_n).hasClass("active")) {
                    $(_slideEl).eq(_n).addClass("next");
                    fadeElement();
                    activeNumEl();
                }
                return false;
            });
        }
        if (_options.currentEl || _options.allEl) {
            _THIS.all = _slideEl.length;
            $(_options.allEl, _THIS).html(_THIS.all);
            function currentNum() {
                var _index = _slideEl.index(_slideEl.filter('.active')) + 1;
                $(_options.currentEl, _THIS).html(_index);
            }
            currentNum();
        }
        function contentHover() {
            _hover = true;
            var template = document.getElementById("template");
            _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 ($(_slideEl).filter(".active").next().is(_elTagName)) {
                $(_slideEl).filter(".active").next().addClass("next");
            } else {
                $(_slideEl).eq(0).addClass("next");
            }
            fadeElement();
            activeNumEl();
            _timer = setTimeout(function() { nextEl() }, _switchTime);
        };
        function activeNumEl() {
            var ref = document.getElementById("ref");
            if(ref != null)
            ref.href = $(_slideEl).filter(".active").attr("href");
            
            $(_numElement).removeClass("active");
            _numElActive = $(_slideEl).index($(_slideEl).filter(".active")[0]);
            $(_numElement).eq(_numElActive).addClass("active");
        };
        function fadeElement() {
            $(_slideEl).filter(".active").fadeOut(_duration).removeClass("active");
            $(_slideEl).filter(".next").fadeIn(_duration).addClass("active").removeClass("next");
            if (_options.currentEl || _options.allEl) currentNum();
        };
    });
}


