$(document).ready(function() {
    initGallery();
    initSlideshow();
});
//gallery big init
function initGallery() {
    var gallery1 = $('.slideshow').gallery({
        duration: 600,
        listOfSlides: '.slideshow-holder>ul>li',
        switcher: '.swicher>li',
        effect: 'fade',
        autoRotation: 5000,
        IE: true
    });
    $('.slideshow').each(function() {
        $(this).find('a.play-pause').click(function() {
            if ($(this).hasClass('paused')) {
                gallery1.play();
                $(this).removeClass('paused');
            }
            else {
                gallery1.stop();
                $(this).addClass('paused');
            }
        })
    })
}
function initSlideshow() {
    var _activeClass = 'active';
    var _animSpeed = 600;
    $('.gallery').each(function() {
        var _holder = $(this);

        var _slidesHold = _holder.find('.gallery-holder>ul');
        var _slides = _slidesHold.find('>li');
        var _btnNext = _holder.find('a.link-next');
        var _btnPrev = _holder.find('a.link-prev');
        var _slidesNum = _holder.find('span.slides-num');
        var _curNum = _holder.find('span.number');
        var _active = 0;
        if (_slides.filter('.' + _activeClass).length > 0) _active = _slides.index(_slides.filter('.' + _activeClass));
        _slides.hide().removeClass(_activeClass);
        _slides.eq(_active).show().addClass(_activeClass);
        _slidesNum.text(_slides.length);
        _curNum.text(_active + 1);
        //alert($(_slides.eq(_active)).attr('style'));
        
		function changeSlide(_nowActive){
			if (!$.browser.msie) {
				_slides.eq(_active).fadeOut(_animSpeed).removeClass(_activeClass);
				_slides.eq(_nowActive).fadeIn(_animSpeed).addClass(_activeClass);
			}
			else {
				_slides.eq(_active).hide().removeClass(_activeClass);
				_slides.eq(_nowActive).show().addClass(_activeClass);
			}
			_slidesHold.animate({
				'height': _slides.eq(_nowActive).height()
			})
			_curNum.text(_nowActive + 1);
		}
		
        _btnNext.click(function() {
            if (_active < _slides.length - 1) {
                changeSlide(_active + 1);
                _active++
            }
            else {
                changeSlide(0);
                _active = 0;
            }
            return false;
        })
        _btnPrev.click(function() {
            if (_active > 0) {
                changeSlide(_active - 1);
                _active--
            }
            else {
                changeSlide(_slides.length - 1);
                _active = _slides.length - 1;
            }
            return false;
        })
    });
}
(function($) {
    /* Gallery */
    function Gallery(el, options) {
        this._hold = $(el);
        this.initOptions(options);
        this._timer = options.autoRotation;
        this._t;
        this.initialize();
        //alert($(el).attr('class'));
    }
    $.fn.gallery = function(options) {
        return new Gallery(this.get(0), options);
    };
    Gallery.prototype = {
        initOptions: function(_obj) {
            this.options = {
                randomSlide: false,
                changeHeight: false,
                duration: 700,
                slideElement: 1,
                event: 'click',
                autoRotation: false,
                effect: false,
                listOfSlides: 'ul > li',
                switcher: false,
                disableBtn: false,
                nextBtn: 'a.next-link, a.btn-next, a.next, a.link-next',
                prevBtn: 'a.prev-link, a.btn-prev, a.prev, a.link-prev',
                circle: true,
                direction: false,
                IE: false,
                swicherBuilder: false,
                titleReplace: true
            };
            for (key in _obj) this.options[key] = _obj[key];
        },
        initialize: function() {

            var _this = this;
            var _hold = _this._hold;
            var _speed = _this.options.duration;
            var _timer = _this.options.autoRotation;
            var _el = _hold.find(_this.options.listOfSlides);
            if (_el.length) {
                _el.css('display', 'block');
                if (_this.options.effect) {
                    _el.css('position', 'absolute');
                    var _list = _el;
                }
                else var _list = _el.parent();
                var _switcher = _hold.find(_this.options.switcher);
                var _next = _hold.find(_this.options.nextBtn);
                var _prev = _hold.find(_this.options.prevBtn);
                var _count = _el.index(_el.filter(':last'));
                var _w = _el.outerWidth(true);
                var _h = _el.outerHeight(true);
                if (_this.options.switcher) var _active = _switcher.index(_switcher.filter('.active:eq(0)'));
                else var _active = _el.index(_el.filter('.active:eq(0)'));
                if (_active < 0) _active = 0;
                var _last = _active;
                if (_this.options.swicherBuilder) {
                    this._hold.append('<ul class="' + _this.options.swicherBuilder + '" />');
                    var _newSwitcher = $('.' + _this.options.swicherBuilder, this._hold);
                    for (var i = 0; i < _el.length; i++) {
                        _newSwitcher.append('<li><a href="#">' + (i + 1) + '</a></li>');
                        if (i == _active) {
                            _newSwitcher.find('li').eq(_active).addClass('active');
                        }
                    };
                    _switcher = _newSwitcher.find('li');
                }
                if (_this.options.titleReplace) {

                    var titleReplace = _hold.find(_this.options.titleReplace);
                    //alert(titleReplace.length);
                    if (titleReplace.length) {
                        _el.each(function(i) {
                            var this_el = $(this);
                            var this_title = this_el.attr('title');
                            if (this_title.length) {
                                _el.eq(i).data("title", this_title);
                            } else {
                                _el.eq(i).data("title", 'No title');
                            }
                            this_el.removeAttr('title');
                        });
                        titleReplace.html(_el.eq(_active).data("title"));
                    }
                }
                // Installation directions
                if (!_this.options.direction) {
                    var _wrapHolderW = Math.ceil(_list.parent().width() / _w);
                    if (((_wrapHolderW - 1) * _w + _w / 2) > _list.parent().width()) _wrapHolderW--;
                }
                else {
                    var _wrapHolderW = Math.ceil(_list.parent().height() / _h);
                    if (((_wrapHolderW - 1) * _h + _h / 2) > _list.parent().height()) _wrapHolderW--;
                }
                // Setting "fade" or "slide" effect
                if (!_this.options.effect) var rew = _count - _wrapHolderW + 1;
                else var rew = _count;
                if (!_this.options.effect) {
                    if (!_this.options.direction) _list.css({ marginLeft: -(_w * _active) })
                    else _list.css({ marginTop: -(_h * _active) })
                }
                else {
                    _list.css({
                        opacity: 0
                    }).removeClass('active').eq(_active).addClass('active').css({
                        opacity: 1
                    }).css('opacity', 'auto');
                    _switcher.removeClass('active').eq(_active).addClass('active');
                    if ($.browser.msie && _this.options.IE) {
                        _list.css({
                            display: 'none'
                        });
                        _list.eq(_active).css({
                            display: 'block'
                        });
                    }
                }
                // Disable or enable buttons "prev next"
                if (_this.options.disableBtn) {
                    if (_count < _wrapHolderW) _next.addClass(_this.options.disableBtn);
                    _prev.addClass(_this.options.disableBtn);
                }
                // Function to "fade"
                if (_this.options.changeHeight) {
                    if (_this.options.effect) {
                        _el.parent().css({ height: _list.eq(_active).outerHeight(true), overflow: 'hidden' });
                    } else {
                        if (_this.options.slideElement > 1) {
                            var active_H = _list.children().eq(_active).outerHeight(true);
                            for (var i = 1; i < _this.options.slideElement; i++) {
                                if (active_H < _list.children().eq(_active + i).outerHeight(true)) {
                                    active_H = _list.children().eq(_active + i).outerHeight(true)
                                }
                            };
                            _el.parent().css({ height: active_H, overflow: 'hidden' });
                        } else _el.parent().css({ height: _list.children().eq(_active).outerHeight(true), overflow: 'hidden' });
                    }
                }
                function fadeElement() {
                    if ($.browser.msie && _this.options.IE) {
                        _list.eq(_last).css({
                            opacity: 0,
                            display: 'none'
                        });
                        _list.removeClass('active').eq(_active).addClass('active').css({
                            opacity: 'auto',
                            display: 'block'
                        });
                    }
                    else {
                        _list.eq(_last).animate({ opacity: 0 }, { queue: false, duration: _speed });
                        _list.removeClass('active').eq(_active).addClass('active').animate({
                            opacity: 1
                        }, { queue: false, duration: _speed, complete: function() {
                            $(this).css('opacity', 'auto');
                        }
                        });
                    }
                    if (_this.options.changeHeight) {
                        _el.parent().animate({
                            height: _list.eq(_active).outerHeight(true)
                        }, { queue: false, duration: _speed });
                    }
                    if (_this.options.switcher) _switcher.removeClass('active').eq(_active).addClass('active');
                    _last = _active;
                    if (titleReplace) {
                        titleReplace.html(_el.eq(_active).data("title"));
                    }
                }
                // Function for "slide"
                function scrollEl() {
                    if (!_this.options.direction) _list.animate({ marginLeft: -(_w * _active) }, { queue: false, duration: _speed })
                    else _list.animate({ marginTop: -(_h * _active) }, { queue: false, duration: _speed })
                    if (_this.options.switcher && _this.options.slideElement) _switcher.removeClass('active').eq(_active / _this.options.slideElement).addClass('active');
                    else {
                        if (_this.options.switcher) _switcher.removeClass('active').eq(_active).addClass('active');
                    }
                    if (_this.options.changeHeight) {
                        if (_this.options.slideElement > 1) {
                            var active_H = _list.children().eq(_active).outerHeight(true);
                            for (var i = 1; i < _this.options.slideElement; i++) {
                                if (active_H < _list.children().eq(_active + i).outerHeight(true)) {
                                    active_H = _list.children().eq(_active + i).outerHeight(true)
                                }
                            };
                            _el.parent().animate({
                                height: active_H
                            }, { queue: false, duration: _speed });
                        } else {
                            _el.parent().animate({
                                height: _list.children().eq(_active).outerHeight(true)
                            }, { queue: false, duration: _speed });
                        }
                    }
                    if (titleReplace) {
                        titleReplace.html(_el.eq(_active).data("title"));
                    }

                }
                function toPrepare() {
                    if ((_active == rew) && _this.options.circle) _active = -_this.options.slideElement;
                    for (var i = 0; i < _this.options.slideElement; i++) {
                        if (_this.options.randomSlide) {
                            var pre_active = _active;
                            if (_this.options.listOfSlides.length) {
                                while (pre_active == _active) {
                                    _active = parseInt(Math.random() * (_count + 1));
                                }
                            }
                        } else {
                            _active++;
                        }
                        if (_active > rew) {
                            _active--;
                            if (_this.options.disableBtn && (_count > _wrapHolderW)) _next.addClass(_this.options.disableBtn);
                        }
                    }
                    if (_active == rew) if (_this.options.disableBtn && (_count > _wrapHolderW)) _next.addClass(_this.options.disableBtn);
                    if (!_this.options.effect) scrollEl();
                    else fadeElement();
                }
                if (_this._timer) {
                    _this._hold.bind('runTimer', function() {
                        if (_this._t) clearTimeout(_this._t);
                        _this._t = setInterval(function() {
                            toPrepare();
                        }, _this._timer);
                    });
                }
                _next.click(function() {
                    if (_this._t) clearTimeout(_this._t);
                    if (_this.options.disableBtn && (_count > _wrapHolderW)) _prev.removeClass(_this.options.disableBtn);
                    toPrepare();
                    if (_this._timer) _this._hold.trigger('runTimer');
                    return false;
                });
                _prev.click(function() {
                    if (_this._t) clearTimeout(_this._t);
                    if (_this.options.disableBtn && (_count > _wrapHolderW)) _next.removeClass(_this.options.disableBtn);
                    if ((_active == 0) && _this.options.circle) _active = rew + _this.options.slideElement;
                    for (var i = 0; i < _this.options.slideElement; i++) {
                        _active--;
                        if (_active < 0) {
                            _active++;
                            if (_this.options.disableBtn && (_count > _wrapHolderW)) _prev.addClass(_this.options.disableBtn);
                        }
                    };
                    if (_active == 0) if (_this.options.disableBtn && (_count > _wrapHolderW)) _prev.addClass(_this.options.disableBtn);
                    if (!_this.options.effect) scrollEl();
                    else fadeElement();
                    if (_this._timer) _this._hold.trigger('runTimer');
                    return false;
                });
                if (_this.options.switcher) _switcher.click(function() {
                    if (_this.options.event == 'click') {
                        if (_this.options.slideElement) {
                            _active = _switcher.index($(this)) * _this.options.slideElement;
                        } else {
                            _active = _switcher.index($(this));
                        }
                        if (_this._t) clearTimeout(_this._t);
                        if (!_this.options.effect) scrollEl();
                        else fadeElement();
                        if (_this._timer) _this._hold.trigger('runTimer');
                    }
                    return false;
                }).mouseenter(function() {
                    if (_this.options.event == 'hover') {
                        if (_this.options.slideElement) {
                            _active = _switcher.index($(this)) * _this.options.slideElement;
                        } else {
                            _active = _switcher.index($(this));
                        }
                        if (_this._t) clearTimeout(_this._t);
                        if (!_this.options.effect) scrollEl();
                        else fadeElement();
                        if (_this._timer) _this._hold.trigger('runTimer');
                    }
                });
                if (_this._timer) _this._hold.trigger('runTimer');
            }
        },
        stop: function() {
            var _this = this;
            if (_this._t) clearTimeout(_this._t);
        },
        play: function() {
            var _this = this;
            if (_this._t) clearTimeout(_this._t);
            if (_this._timer) _this._hold.trigger('runTimer');
        }
    }
} (jQuery));
