jQuery(function() {
    initPage();
    initCustomForms();
    initGalleries();
    initLightbox();
    initFooterExpand();
    initValidation();
    initOpenClose();
    initFullscreenGallery();
    initFullscreenGallery2();
    initTooltip();
})
///// 5-17-Y
function isValidEmailAddress(emailAddress) {
    var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
    return pattern.test(emailAddress);
}

function submitNews() {
    var contactEmail = $("#txtNews").val();
    var isok = true;
    var str = "";

    if (contactEmail == 'enter email address') {
        isok = false;
        str += "Email Address is required.\n";
    }


    var email = contactEmail;
    if (!isValidEmailAddress(email)) {
        str += "Enter a valid Email Address. \n";
        isok = false;
    }
    
    if (!isok) {
        alert(str);
    }
    else {
        $.get('/AJAX/Newsletter.ashx', { 'E': email }, function(data) {

            if (data == 1) {
                alert("Thank you for signing up for our newsletter.");
                //location.href = "/Contact/";
                location.href = location.href;
            }
            else {
                alert("Your contact was not sent due to unknown error, please try again later.");
            }
        });
    }


}




////
function initTooltip() {
    //var els = $('.gallery2 ul a');
    var els = $('.gallery2 ul li');
    var fadeDuration = $.browser.msie ? 0 : 400;
    els.each(function() {
        var _this = $(this);
        var tooltip = _this.find('.title').css({ opacity: 0 }).show();
        _this.mouseover(function(e) {
            show(true);
            tooltip.css({
                left: e.pageX - $(this).offset().left,
                top: e.pageY - $(this).offset().top
            });
        });
        _this.mousemove(function(e) {
            show(true);
            tooltip.css({
                left: e.pageX - $(this).offset().left,
                top: e.pageY - $(this).offset().top
            });
        });
        _this.mouseenter(function() { show(true); }).mouseleave(function() { show(); });
        function show(t) {
            tooltip.animate({
                opacity: t ? 1 : 0
            }, {
                queue: false,
                duration: fadeDuration,
                complete: function() {
                    if (t) $(this).css({ opacity: 'auto' });
                }
            });
        }
    });
}
function initFullscreenGallery() {
    var _body = $('body');
    var _wrapper = $('#wrapper');
    var _minWidth = 1002;
    var _animSpeed = 1000;
    $('#fullscreen').each(function() {
        var _fullscreen = $(this);
        var _main = $('#main');
        var _gallery = $('.fullscreen-minimized:eq(0)');
        var _slideEl = $('.gallery2>ul', _gallery);
        var _slides = $('>li', _slideEl);
        var _thumbs = $('.thumbs', _gallery);
        var _thumbsLinks = $('li', _thumbs);
        var _step = _slides.eq(0).width();
        var _prev = $('.btn-prev', _gallery);
        var _next = $('.btn-next', _gallery);
        var _switcher = $('.switcher ul>li', _gallery);
        var _fsButton = $('.full-screen', _gallery);
        var _fsClose = $('.full-screen', _fullscreen);
        var _playBtn = $('.fullscreen-minimized:eq(0) .play, #fullscreen .play');
        var _active = 0;
        var _switchTime = 6000;
        var _autoRotation = true;
        var _t;
        var _frame = $('.gallery', _fullscreen);
        var _fsSlideEl = $('.holder > ul', _frame);
        var _fsSlides = $('>li', _fsSlideEl);
        var _fsSwitcher = $('.switcher ul>li', _fullscreen);
        var _fsThumbsHold = $('.thumbs', _fullscreen);
        var _fsThumbs = $('.thumbs ul>li', _fullscreen);
        var _fsThumbsScroll = $('.thumbs ul', _fullscreen);
        var _fsStep;
        var _fsNext = $('.btn-next', _fullscreen);
        var _fsPrev = $('.btn-prev', _fullscreen);


        function resizeSlide(_slide) {
            var _w = _slide.width();
            var _h = _slide.height();
            if (_slide.parents('#fullscreen').length > 0 && _frame.is(':visible')) _h = _frame.height();
            var _maxW = Math.floor(_slide.width() / _slide.find('img').length) - 5;
            var _link = $('>a', _slide)
            if (_link.length > 0) _link.css({
                'width': _w,
                'height': _h
            });
            if (_slide.find('img').length > 1) _w = _maxW;
            var _sumW = 0;
            var _imgCount = _slide.find('img').length;
            _slide.find('img').each(function(ind) {
                var _img = $(this);
                var _imgW = _img.width();
                var _imgH = _img.height()
                var _ratio = _imgW / _imgH;
                _img.css({
                    'width': _w,
                    'height': _w / _ratio
                })
                if (_img.height() > _h) _img.css({
                    'width': _h * _ratio,
                    'height': _h
                })
                _sumW = _img.width() * _imgCount;
                if (ind == _slide.find('img').length - 1) {
                    var _sHolder = _slide.find('.image-holder');
                    if (_sumW < _slide.width()) _sHolder.css('padding-left', (_slide.width() - _sumW) / 2);
                }
            });
        }

        //set slides
        _slides.each(function() {
            var _slide = $(this);
            resizeSlide(_slide);
        })

        // for gallery with thumbs
        if (_thumbs.length > 0) {
            _slides.css({
                'position': 'absolute',
                'top': 0,
                'left': 0
            })
            _fsSlides.css({
                'position': 'absolute',
                'top': 0,
                'left': 0
            })
            _slides.hide().eq(_active).show().addClass('active');
            _thumbsLinks.eq(_active).addClass('active');
            _fsThumbs.eq(_active).addClass('active');
            _fsButton.click(function() {
                $('.w1, .footer-holder').hide();
                _fullscreen.show();
                scrollThumbs(_fullscreen.find('.thumbs'));
                fullscreenSet();
                fsResize();
                return false;
            })

            _fsClose.click(function() {
                _fullscreen.hide();
                $('.w1, .footer-holder').show();
                minimizedSet();
                return false;
            })

            function changeSlides(_to) {
                if (_gallery.is(':visible') && _slides.filter(':animated').length == 0) {
                    if (_t) clearTimeout(_t);
                    _slides.eq(_active).fadeOut(_animSpeed).removeClass('active');
                    _slides.eq(_to).fadeIn(_animSpeed, function() {
                        autoRotation();
                    }).addClass('active');
                    _thumbsLinks.eq(_active).removeClass('active');
                    _thumbsLinks.eq(_to).addClass('active');
                    _fsThumbs.eq(_active).removeClass('active');
                    _fsThumbs.eq(_to).addClass('active');
                    _active = _to;
                }
                else if (_fullscreen.is(':visible') && _fsSlides.filter(':animated').length == 0) {
                    if (_t) clearTimeout(_t);
                    _fsSlides.eq(_active).fadeOut(_animSpeed).removeClass('active');
                    _fsSlides.eq(_to).fadeIn(_animSpeed, function() {
                        autoRotation();
                    }).addClass('active');
                    _thumbsLinks.eq(_active).removeClass('active');
                    _thumbsLinks.eq(_to).addClass('active');
                    _fsThumbs.eq(_active).removeClass('active');
                    _fsThumbs.eq(_to).addClass('active');
                    resizeSlide(_fsSlides.eq(_to));
                    _active = _to;
                }
            }

            function fullscreenSet() {
                _fsSlides.hide().removeClass('active').eq(_active).show().addClass('active');
                _fsThumbsScroll.css({ 'margin-left': _thumbs.find('ul').css('margin-left') });
                _fsThumbsHold.data('cur', _thumbs.data('cur'));
                if (_thumbs.find('.btn-prev2').hasClass('noactive')) _fsThumbsHold.find('.btn-prev2').addClass('noactive')
                else _fsThumbsHold.find('.btn-prev2').removeClass('noactive');
                if (_thumbs.find('.btn-next2').hasClass('noactive')) _fsThumbsHold.find('.btn-next2').addClass('noactive')
                else _fsThumbsHold.find('.btn-next2').removeClass('noactive');
            }

            function minimizedSet() {
                _slides.hide().removeClass('active').eq(_active).show().addClass('active');
                _thumbs.find('ul').css({ 'margin-left': _fsThumbsScroll.css('margin-left') })
                _thumbs.data('cur', _fsThumbsHold.cur);
                if (_fsThumbsHold.find('.btn-prev2').hasClass('noactive')) _thumbs.find('.btn-prev2').addClass('noactive')
                else _thumbs.find('.btn-prev2').removeClass('noactive');
                if (_fsThumbsHold.find('.btn-next2').hasClass('noactive')) _thumbs.find('.btn-next2').addClass('noactive')
                else _thumbs.find('.btn-next2').removeClass('noactive');
            }

            function autoRotation() {
                if (_t) clearTimeout(_t);
                if (_autoRotation) _t = setTimeout(function() {
                    _gallery.addClass('gallery-playing');
                    _fullscreen.addClass('gallery-playing');
                    var _next = _active < _slides.length - 1 ? _active + 1 : 0;
                    changeSlides(_next);
                }, _switchTime)
            }
            autoRotation();

            _playBtn.click(function() {
                if (_gallery.hasClass('gallery-playing')) {
                    _autoRotation = false;
                    if (_t) clearTimeout(_t);
                    _gallery.removeClass('gallery-playing').addClass('gallery-paused');
                    _fullscreen.removeClass('gallery-playing').addClass('gallery-paused');
                }
                else if (_gallery.hasClass('gallery-paused')) {
                    _autoRotation = true;
                    if (_t) clearTimeout(_t);
                    _gallery.addClass('gallery-playing').removeClass('gallery-paused');
                    _fullscreen.addClass('gallery-playing').removeClass('gallery-paused');
                    autoRotation();
                }
                return false;
            })

            _thumbsLinks.click(function() {
                var _link = $(this);
                if (!_link.hasClass('active')) {
                    if (_t) clearTimeout(_t);
                    changeSlides(_thumbsLinks.index(_link));
                }
                return false;
            })
            _fsThumbs.click(function() {
                var _link = $(this);
                if (!_link.hasClass('active')) {
                    if (_t) clearTimeout(_t);
                    changeSlides(_fsThumbs.index(_link));
                }
                return false;
            })

            function fsResize() {
                var _addH = $('.top-container', _fullscreen).outerHeight(true) + parseInt($('.wrapper', _fullscreen).css('padding-bottom')) + parseInt(_frame.css('margin-bottom')) + _fsSwitcher.eq(0).height() + _fsThumbs.eq(0).height();
                var _gallH = $(window).height() - _addH > 300 ? $(window).height() - _addH : 300;
                _frame.height(_gallH);
                _fsSlideEl.height(_gallH);
                _fsSlides.css({
                    'width': _frame.width(),
                    'height': _gallH
                })
                _fsSlides.each(function() {
                    var _slide = $(this);
                    resizeSlide(_slide);
                })
                _fsNext.css({ 'top': (_gallH - _fsNext.height()) / 2 })
                _fsPrev.css({ 'top': (_gallH - _fsPrev.height()) / 2 });
            }

            function scrollThumbs(_thumbs) {
                if (_thumbs.hasClass('ready')) return;
                _thumbs.addClass('ready');
                var _tprev = $('.btn-prev2', _thumbs);
                var _tnext = $('.btn-next2', _thumbs);
                var _thumbsScroll = $('ul', _thumbs).css('margin-left', 0);
                var _hold = $('.holder', _thumbs);
                var _holdW = _hold.width();
                _thumbs.data('cur', 0);
                var _thumbsEls = $('li', _thumbs);
                var _sumWidth = _thumbsEls.eq(0).width() - _thumbsEls.eq(0).outerWidth(true);
                _thumbsEls.each(function(ind) {
                    _sumWidth += $(this).outerWidth(true);
                });
                var _marginMax = -(_sumWidth - _holdW);

                function scrollThumbs(_to) {
                    var _curMargin = parseInt(_thumbsScroll.css('margin-left'));
                    var offset = _to > _thumbs.data('cur') ? _curMargin - _thumbsEls.eq(_thumbs.data('cur')).outerWidth(true) : _curMargin + _thumbsEls.eq(_to).outerWidth(true)
                    if (offset >= _marginMax) {
                        _thumbsScroll.animate({
                            'margin-left': offset
                        }, 500)
                        _thumbs.data('cur', _to);
                        if (offset == _marginMax) _tnext.addClass('noactive');
                        else if (offset == 0) _tprev.addClass('noactive');
                        else {
                            _tnext.removeClass('noactive');
                            _tprev.removeClass('noactive');
                        }
                    }
                }
                _tprev.click(function() {
                    var _link = $(this);
                    if (!_thumbsScroll.is(':animated')) {
                        if (!_link.hasClass('noactive')) scrollThumbs(_thumbs.data('cur') - 1);
                    }
                    return false;
                })
                _tnext.click(function() {
                    var _link = $(this);
                    if (!_thumbsScroll.is(':animated')) {
                        if (!_link.hasClass('noactive')) scrollThumbs(_thumbs.data('cur') + 1);
                    }
                    return false;
                })
            }
            scrollThumbs(_thumbs)

            $(window).resize(function() {
                fsResize();
            })
        }
        //for gallery with simple switcher
        else {
            _switcher.removeClass('active').eq(_active).addClass('active');
            _fsSwitcher.removeClass('active').eq(_active).addClass('active');
            _slideEl.css('margin-left', 0);

            _fsButton.click(function() {
                $('.w1, .footer-holder').hide();
                _fullscreen.show();
                fsResize();
                return false;
            })
            _fsClose.click(function() {
                _fullscreen.hide();
                $('.w1, .footer-holder').show();
                return false;
            })

            function fsResize() {
                var _addH = $('.top-container', _fullscreen).outerHeight(true) + parseInt($('.wrapper', _fullscreen).css('padding-bottom')) + parseInt(_frame.css('margin-bottom')) + _fsSwitcher.eq(0).height() + _fsThumbs.eq(0).height();
                var _gallH = $(window).height() - _addH > 300 ? $(window).height() - _addH : 300;
                _frame.height(_gallH);
                _fsSlideEl.height(_gallH);
                _fsSlides.css({
                    'width': _frame.width(),
                    'height': _gallH
                })
                _fsStep = _fsSlides.eq(0).width();
                _fsSlideEl.css({
                    'margin-left': -_fsStep * _active
                })
                _fsSlides.each(function() {
                    _fsSlides.each(function() {
                        var _slide = $(this);
                        resizeSlide(_slide);
                    })
                })
                _fsNext.css({ 'top': (_gallH - _fsNext.height()) / 2 })
                _fsPrev.css({ 'top': (_gallH - _fsPrev.height()) / 2 });

            }

            function autoRotation() {
                if (_t) clearTimeout(_t);
                if (_autoRotation) _t = setTimeout(function() {
                    _gallery.addClass('gallery-playing');
                    _fullscreen.addClass('gallery-playing');
                    _fsNext.trigger('click');
                }, _switchTime)
            }
            autoRotation();

            function scrollTo(_to) {
                if (_t) clearTimeout(_t);
                _slideEl.stop().animate({
                    'margin-left': -_step * _to
                }, _animSpeed, function() {
                    autoRotation();
                })
                if (_fullscreen.is(':visible')) _fsSlideEl.stop().animate({
                    'margin-left': -_fsStep * _to
                }, _animSpeed)
                _switcher.removeClass('active').eq(_to).addClass('active');
                _fsSwitcher.removeClass('active').eq(_to).addClass('active');
                _active = _to;
            }
            _fsPrev.click(function() { _prev.trigger('click') })
            _fsNext.click(function() { _next.trigger('click') })
            _prev.click(function() {
                var _prev = _active > 0 ? _active - 1 : _slides.length - 1;
                scrollTo(_prev);
                return false;
            })
            _next.click(function() {
                var _next = _active < _slides.length - 1 ? _active + 1 : 0;
                scrollTo(_next);
                return false;
            })
            _switcher.click(function() {
                var _link = $(this);
                if (!_link.hasClass('active')) scrollTo(_switcher.index(_link));
            })
            _fsSwitcher.click(function() {
                var _link = $(this);
                if (!_link.hasClass('active')) scrollTo(_fsSwitcher.index(_link));
            })
            _playBtn.click(function() {
                if (_gallery.hasClass('gallery-playing')) {
                    _autoRotation = false;
                    if (_t) clearTimeout(_t);
                    _gallery.removeClass('gallery-playing').addClass('gallery-paused');
                    _fullscreen.removeClass('gallery-playing').addClass('gallery-paused');
                }
                else if (_gallery.hasClass('gallery-paused')) {
                    _autoRotation = true;
                    if (_t) clearTimeout(_t);
                    _gallery.addClass('gallery-playing').removeClass('gallery-paused');
                    _fullscreen.addClass('gallery-playing').removeClass('gallery-paused');
                    autoRotation();
                }
                return false;
            })
            $(window).resize(function() {
                if (_fullscreen.is(':visible')) {
                    var _flag = false;
                    if (_autoRotation) {
                        _autoRotation = false;
                        if (_t) clearTimeout(_t);
                        _gallery.removeClass('gallery-playing').addClass('gallery-paused');
                        _fullscreen.removeClass('gallery-playing').addClass('gallery-paused');
                        _flag = true;
                    }
                }
                fsResize();
                if (_flag) {
                    _flag = false;
                    _autoRotation = true;
                    if (_t) clearTimeout(_t);
                    _gallery.addClass('gallery-playing').removeClass('gallery-paused');
                    _fullscreen.addClass('gallery-playing').removeClass('gallery-paused');
                    autoRotation();
                }
            })
        }


    })
}

function initOpenClose() {
    $('#archive').each(function() {
        var _holder = $(this);
        var _blocks = $('>li', _holder);
        var _margin;
        _blocks.each(function(ind) {
            var _block = $(this);
            var _link = $('>a', _block);
            var _slideEl = $('>ul', _block);
            _slideEl.show();
            var _h = _slideEl.height();
            if (ind == 0) _margin = parseInt(_slideEl.css('margin-bottom'));
            if (!_block.hasClass('active')) _slideEl.hide().css({
                'opacity': 0,
                'height': 0,
                'margin-bottom': 0
            });

            _link.click(function() {
                if (_block.hasClass('active')) {
                    hideBlock(_slideEl);
                    _block.removeClass('active');
                }
                else {
                    showBlock(_slideEl, _h);
                    _block.addClass('active');
                }
                return false;
            })
        })
        function showBlock(_el, _ht) {
            _el.show().animate({
                'height': _ht,
                'opacity': 1,
                'margin-bottom': _margin
            }, 600)
        }
        function hideBlock(_el) {
            _el.animate({
                'height': 0,
                'opacity': 0,
                'margin-bottom': 0
            }, 600, function() {
                _el.hide();
            })
        }
    })
}

function initFooterExpand() {
    jQuery('.link-expand').each(function() {
        var _link = jQuery(this);
        var _block = jQuery('.expanded-box');
        var _linkClose = jQuery('.link-close-expand', _block);
        _link.click(function() {
            _block.show();
            return false;
        })
        _linkClose.click(function() {
            _block.hide();
            return false;
        })
    })
}

function initGalleries() {
    /*
    jQuery('.simple-scroll-gallery').scrollGallery({
    sliderHolder:'>.gallery',
    pauseOnHover: false,
    pauseButton: '.play',
    autoRotation: true,
    switchTime: 6000
    })
    */
    jQuery('.simple-scroll-gallery').cyclingGall({
        slideEl: '>.gallery>ul',
        slides: '>li',
        switcher: '.switcher ul li',
        autoSlide: 6000,
        duration: 700,
        btPrev: '.btn-prev, .prev, .prev-btn, .btn-up, .up-btn, .link-prev',
        btNext: '.btn-next, .next, .next-btn, .btn-down, .down-btn, .link-next',
        direction: false,
        activeClass: 'active',
        changeHeight: false,
        afterInit: false
    });
    jQuery('.gallery-product').cyclingGall({
        slideEl: '>.frame>ul',
        slides: '>li',
        autoSlide: false,
        afterInit: function() { initInsideGall(); }
    })
    function initInsideGall() {
        jQuery('.gallery-product .visual').each(function() {
            jQuery(this).fadeGallery({
                slideElements: '>.photo>img',
                pagerLinks: '>ul>li'
            })
        })
    }
}


// scrolling gallery plugin
jQuery.fn.scrollGallery = function(_options) {
    var _options = jQuery.extend({
        sliderHolder: '>div',
        slider: '>ul',
        slides: '>li',
        pagerLinks: 'div.pager a, .switcher ul>li',
        btnPrev: 'a.link-prev, .prev, .btn-prev',
        btnNext: 'a.link-next, .next, .btn-next',
        activeClass: 'active',
        disabledClass: 'disabled',
        generatePagination: 'div.pg-holder',
        curNum: 'em.scur-num',
        allNum: 'em.sall-num',
        circleSlide: true,
        pauseClass: 'gallery-paused',
        pauseButton: 'none',
        pauseOnHover: true,
        autoRotation: false,
        stopAfterClick: false,
        switchTime: 5000,
        duration: 650,
        easing: 'swing',
        event: 'click',
        splitCount: false,
        afterInit: false,
        vertical: false,
        step: false
    }, _options);

    return this.each(function() {
        // gallery options
        var _this = jQuery(this);
        var _sliderHolder = jQuery(_options.sliderHolder, _this);
        var _slider = jQuery(_options.slider, _sliderHolder);
        var _slides = jQuery(_options.slides, _slider);
        var _btnPrev = jQuery(_options.btnPrev, _this);
        var _btnNext = jQuery(_options.btnNext, _this);
        var _pagerLinks = jQuery(_options.pagerLinks, _this);
        var _generatePagination = jQuery(_options.generatePagination, _this);
        var _curNum = jQuery(_options.curNum, _this);
        var _allNum = jQuery(_options.allNum, _this);
        var _pauseButton = jQuery(_options.pauseButton, _this);
        var _pauseOnHover = _options.pauseOnHover;
        var _pauseClass = _options.pauseClass;
        var _autoRotation = _options.autoRotation;
        var _activeClass = _options.activeClass;
        var _disabledClass = _options.disabledClass;
        var _easing = _options.easing;
        var _duration = _options.duration;
        var _switchTime = _options.switchTime;
        var _controlEvent = _options.event;
        var _step = _options.step;
        var _vertical = _options.vertical;
        var _circleSlide = _options.circleSlide;
        var _stopAfterClick = _options.stopAfterClick;
        var _afterInit = _options.afterInit;
        var _splitCount = _options.splitCount;

        // gallery init
        if (!_slides.length) return;

        if (_splitCount) {
            var curStep = 0;
            var newSlide = $('<slide>').addClass('split-slide');
            _slides.each(function() {
                newSlide.append(this);
                curStep++;
                if (curStep > _splitCount - 1) {
                    curStep = 0;
                    _slider.append(newSlide);
                    newSlide = $('<slide>').addClass('split-slide');
                }
            });
            if (curStep) _slider.append(newSlide);
            _slides = _slider.children();
        }

        var _currentStep = 0;
        var _sumWidth = 0;
        var _sumHeight = 0;
        var _hover = false;
        var _stepWidth;
        var _stepHeight;
        var _stepCount;
        var _offset;
        var _timer;

        _slides.each(function() {
            _sumWidth += $(this).outerWidth(true);
            _sumHeight += $(this).outerHeight(true);
        });

        // calculate gallery offset
        function recalcOffsets() {
            if (_vertical) {
                if (_step) {
                    _stepHeight = _slides.eq(_currentStep).outerHeight(true);
                    _stepCount = Math.ceil((_sumHeight - _sliderHolder.height()) / _stepHeight) + 1;
                    _offset = -_stepHeight * _currentStep;
                } else {
                    _stepHeight = _sliderHolder.height();
                    _stepCount = Math.ceil(_sumHeight / _stepHeight);
                    _offset = -_stepHeight * _currentStep;
                    if (_offset < _stepHeight - _sumHeight) _offset = _stepHeight - _sumHeight;
                }
            } else {
                if (_step) {
                    _stepWidth = _slides.eq(_currentStep).outerWidth(true) * _step;
                    _stepCount = Math.ceil((_sumWidth - _sliderHolder.width()) / _stepWidth) + 1;
                    _offset = -_stepWidth * _currentStep;
                    if (_offset < _sliderHolder.width() - _sumWidth) _offset = _sliderHolder.width() - _sumWidth;
                } else {
                    _stepWidth = _sliderHolder.width();
                    _stepCount = Math.ceil(_sumWidth / _stepWidth);
                    _offset = -_stepWidth * _currentStep;
                    if (_offset < _stepWidth - _sumWidth) _offset = _stepWidth - _sumWidth;
                }
            }
        }

        // gallery control
        if (_btnPrev.length) {
            _btnPrev.bind(_controlEvent, function() {
                if (_stopAfterClick) stopAutoSlide();
                prevSlide();
                return false;
            });
        }
        if (_btnNext.length) {
            _btnNext.bind(_controlEvent, function() {
                if (_stopAfterClick) stopAutoSlide();
                nextSlide();
                return false;
            });
        }
        if (_generatePagination.length) {
            _generatePagination.empty();
            recalcOffsets();
            var _list = $('<ul />');
            for (var i = 0; i < _stepCount; i++) $('<li><a href="#">' + (i + 1) + '</a></li>').appendTo(_list);
            _list.appendTo(_generatePagination);
            _pagerLinks = _list.children();
        }
        if (_pagerLinks.length) {
            _pagerLinks.each(function(_ind) {
                jQuery(this).bind(_controlEvent, function() {
                    if (_currentStep != _ind) {
                        if (_stopAfterClick) stopAutoSlide();
                        _currentStep = _ind;
                        switchSlide();
                    }
                    return false;
                });
            });
        }

        // gallery animation
        function prevSlide() {
            recalcOffsets();
            if (_currentStep > 0) _currentStep--;
            else if (_circleSlide) _currentStep = _stepCount - 1;
            switchSlide();
        }
        function nextSlide() {
            recalcOffsets();
            if (_currentStep < _stepCount - 1) _currentStep++;
            else if (_circleSlide) _currentStep = 0;
            switchSlide();
        }
        function refreshStatus() {
            if (_pagerLinks.length) _pagerLinks.removeClass(_activeClass).eq(_currentStep).addClass(_activeClass);
            if (!_circleSlide) {
                _btnPrev.removeClass(_disabledClass);
                _btnNext.removeClass(_disabledClass);
                if (_currentStep == 0) _btnPrev.addClass(_disabledClass);
                if (_currentStep == _stepCount - 1) _btnNext.addClass(_disabledClass);
            }
            if (_curNum.length) _curNum.text(_currentStep + 1);
            if (_allNum.length) _allNum.text(_stepCount);
        }
        function switchSlide() {
            recalcOffsets();
            if (_vertical) _slider.animate({ marginTop: _offset }, { duration: _duration, queue: false, easing: _easing });
            else _slider.animate({ marginLeft: _offset }, { duration: _duration, queue: false, easing: _easing });
            refreshStatus();
            autoSlide();
        }

        // autoslide function
        function stopAutoSlide() {
            if (_timer) clearTimeout(_timer);
            _autoRotation = false;
        }
        function autoSlide() {
            if (!_autoRotation || _hover) return;
            if (_timer) clearTimeout(_timer);
            _timer = setTimeout(nextSlide, _switchTime + _duration);
        }
        if (_pauseOnHover) {
            _this.hover(function() {
                _hover = true;
                if (_timer) clearTimeout(_timer);
            }, function() {
                _hover = false;
                autoSlide();
            });
        }
        recalcOffsets();
        refreshStatus();
        autoSlide();

        // pause buttton
        if (_pauseButton.length) {
            _pauseButton.click(function() {
                if (_this.hasClass(_pauseClass)) {
                    _this.removeClass(_pauseClass);
                    _autoRotation = true;
                    autoSlide();
                } else {
                    _this.addClass(_pauseClass);
                    stopAutoSlide();
                }
                return false;
            });
        }

        if (_afterInit && typeof _afterInit === 'function') _afterInit(_this, _slides);
    });
}

// popups function
function initLightbox() {
    var _zIndex = 1000;
    var _fadeSpeed = $.browser.msie ? 0 : 350;
    var _faderOpacity = 0.65;
    var _faderBackground = '#000';
    var _faderId = 'lightbox-overlay';
    var _closeLink = 'a.btn-close, a.close, a.cancel';
    var _fader;
    var _lightbox = null;
    var _openers = jQuery('a.open-popup');
    var _page = jQuery(document);
    var _minWidth = jQuery('body > div:eq(0)').outerWidth();
    var _scroll = false;

    // init popup fader
    _fader = jQuery('#' + _faderId);
    if (!_fader.length) {
        _fader = jQuery('<div />');
        _fader.attr('id', _faderId);
        jQuery('body').append(_fader);
    }
    _fader.css({
        opacity: _faderOpacity,
        backgroundColor: _faderBackground,
        position: 'absolute',
        overflow: 'hidden',
        display: 'none',
        top: 0,
        left: 0,
        zIndex: _zIndex
    });

    // IE6 iframe fix
    if (jQuery.browser.msie && jQuery.browser.version < 7) {
        if (!_fader.children().length) {
            var _frame = jQuery('<iframe src="javascript:false" frameborder="0" scrolling="no" />');
            _frame.css({
                opacity: 0,
                width: '100%',
                height: '100%'
            });
            var _frameOverlay = jQuery('<div>');
            _frameOverlay.css({
                top: 0,
                left: 0,
                zIndex: 1,
                opacity: 0,
                background: '#000',
                position: 'absolute',
                width: '100%',
                height: '100%'
            });
            _fader.empty().append(_frame).append(_frameOverlay);
        }
    }

    // lightbox positioning function
    function positionLightbox() {
        if (_lightbox) {
            var _windowHeight = jQuery(window).height();
            var _windowWidth = jQuery(window).width();
            var _lightboxWidth = _lightbox.outerWidth();
            var _lightboxHeight = _lightbox.outerHeight();
            var _pageHeight = _page.height();

            if (_windowWidth < _minWidth) _fader.css('width', _minWidth);
            else _fader.css('width', '100%');
            if (_windowHeight < _pageHeight) _fader.css('height', _pageHeight);
            else _fader.css('height', _windowHeight);

            _lightbox.css({
                position: 'absolute',
                zIndex: (_zIndex + 1)
            });

            // vertical position
            if (_windowHeight > _lightboxHeight) {
                if (jQuery.browser.msie && jQuery.browser.version < 7) {
                    _lightbox.css({
                        position: 'absolute',
                        top: parseInt(jQuery(window).scrollTop()) + (_windowHeight - _lightboxHeight) / 2
                    });
                } else {
                    _lightbox.css({
                        position: 'fixed',
                        top: (_windowHeight - _lightboxHeight) / 2
                    });
                }
            } else {
                var _faderHeight = _fader.height();
                if (_faderHeight < _lightboxHeight) _fader.css('height', _lightboxHeight);
                if (!_scroll) {
                    if (_faderHeight - _lightboxHeight > parseInt(jQuery(window).scrollTop())) {
                        _faderHeight = parseInt(jQuery(window).scrollTop())
                        _scroll = _faderHeight;
                    } else {
                        _scroll = _faderHeight - _lightboxHeight;
                    }
                }
                _lightbox.css({
                    position: 'absolute',
                    top: _scroll
                });
            }

            // horizontal position
            if (_fader.width() > _lightbox.outerWidth()) _lightbox.css({ left: (_fader.width() - _lightbox.outerWidth()) / 2 });
            else _lightbox.css({ left: 0 });
        }
    }

    // show/hide lightbox
    function toggleState(_state) {
        if (!_lightbox) return;
        if (_state) {
            _fader.fadeIn(_fadeSpeed, function() {
                _lightbox.fadeIn(_fadeSpeed);
            });
            _scroll = false;
            positionLightbox();
        } else {
            _lightbox.fadeOut(_fadeSpeed, function() {
                _fader.fadeOut(_fadeSpeed);
                _scroll = false;
            });
        }
    }

    // popup actions
    function initPopupActions(_obj) {
        if (!_obj.get(0).jsInit) {
            _obj.get(0).jsInit = true;
            // close link
            _obj.find(_closeLink).click(function() {
                _lightbox = _obj;
                toggleState(false);
                return false;
            });
        }
    }

    // lightbox openers
    _openers.each(function() {
        var _opener = jQuery(this);
        var _target = _opener.attr('href');
        var _reg = new RegExp(/\#[^\s]+/gi);

        // popup load type - ajax or static
        if (!_reg.test(_target)) {
            _opener.click(function() {
                // ajax load
                if (jQuery('div[rel*="' + _target + '"]').length == 0) {
                    jQuery.ajax({
                        url: _target,
                        type: "POST",
                        dataType: "html",
                        success: function(msg) {
                            // append loaded popup
                            _lightbox = jQuery(msg);
                            _lightbox.find('img').load(positionLightbox)
                            _lightbox.attr('rel', _target).hide().css({
                                position: 'absolute',
                                zIndex: (_zIndex + 1),
                                top: -9999,
                                left: -9999
                            });
                            jQuery('body').append(_lightbox);

                            // init js for lightbox
                            initPopupActions(_lightbox);

                            // show lightbox
                            toggleState(true);
                        },
                        error: function(msg) {
                            alert('AJAX error!');
                            return false;
                        }
                    });
                } else {
                    _lightbox = jQuery('div[rel*="' + _target + '"]');
                    toggleState(true);
                }
                return false;
            });
        } else {
            if (jQuery(_target).length) {
                // init actions for popup
                var _popup = jQuery(_target);
                initPopupActions(_popup);
                _popup.hide();
                // open popup
                _opener.click(function() {
                    if (_lightbox) {
                        _lightbox.fadeOut(_fadeSpeed, function() {
                            _lightbox = _popup.hide();
                            toggleState(true);
                        })
                    } else {
                        _lightbox = _popup.hide();
                        toggleState(true);
                    }
                    return false;
                });
            }
        }
    });

    // event handlers
    jQuery(window).resize(positionLightbox);
    jQuery(window).scroll(positionLightbox);
    jQuery(document).keydown(function(e) {
        if (!e) evt = window.event;
        if (e.keyCode == 27) {
            toggleState(false);
        }
    })
    _fader.click(function() {
        if (!_fader.is(':animated')) toggleState(false);
        return false;
    })
}

function initPage() {
    clearFormFields({
        clearInputs: true,
        clearTextareas: true,
        passwordFieldText: true,
        addClassFocus: "focus",
        filterClass: "default"
    });
}
function clearFormFields(o) {
    if (o.clearInputs == null) o.clearInputs = true;
    if (o.clearTextareas == null) o.clearTextareas = true;
    if (o.passwordFieldText == null) o.passwordFieldText = false;
    if (o.addClassFocus == null) o.addClassFocus = false;
    if (!o.filterClass) o.filterClass = "default";
    if (o.clearInputs) {
        var inputs = document.getElementsByTagName("input");
        for (var i = 0; i < inputs.length; i++) {
            if ((inputs[i].type == "text" || inputs[i].type == "password") && inputs[i].className.indexOf(o.filterClass) == -1) {
                inputs[i].valueHtml = inputs[i].value;
                inputs[i].onfocus = function() {
                    if (this.valueHtml == this.value) this.value = "";
                    if (this.fake) {
                        inputsSwap(this, this.previousSibling);
                        this.previousSibling.focus();
                    }
                    if (o.addClassFocus && !this.fake) {
                        this.className += " " + o.addClassFocus;
                        this.parentNode.className += " parent-" + o.addClassFocus;
                    }
                }
                inputs[i].onblur = function() {
                    if (this.value == "") {
                        this.value = this.valueHtml;
                        if (o.passwordFieldText && this.type == "password") inputsSwap(this, this.nextSibling);
                    }
                    if (o.addClassFocus) {
                        this.className = this.className.replace(o.addClassFocus, "");
                        this.parentNode.className = this.parentNode.className.replace("parent-" + o.addClassFocus, "");
                    }
                }
                if (o.passwordFieldText && inputs[i].type == "password") {
                    var fakeInput = document.createElement("input");
                    fakeInput.type = "text";
                    fakeInput.value = inputs[i].value;
                    fakeInput.className = inputs[i].className;
                    fakeInput.fake = true;
                    inputs[i].parentNode.insertBefore(fakeInput, inputs[i].nextSibling);
                    inputsSwap(inputs[i], null);
                }
            }
        }
    }
    if (o.clearTextareas) {
        var textareas = document.getElementsByTagName("textarea");
        for (var i = 0; i < textareas.length; i++) {
            if (textareas[i].className.indexOf(o.filterClass) == -1) {
                textareas[i].valueHtml = textareas[i].value;
                textareas[i].onfocus = function() {
                    if (this.value == this.valueHtml) this.value = "";
                    if (o.addClassFocus) {
                        this.className += " " + o.addClassFocus;
                        this.parentNode.className += " parent-" + o.addClassFocus;
                    }
                }
                textareas[i].onblur = function() {
                    if (this.value == "") this.value = this.valueHtml;
                    if (o.addClassFocus) {
                        this.className = this.className.replace(o.addClassFocus, "");
                        this.parentNode.className = this.parentNode.className.replace("parent-" + o.addClassFocus, "");
                    }
                }
            }
        }
    }
    function inputsSwap(el, el2) {
        if (el) el.style.display = "none";
        if (el2) el2.style.display = "inline";
    }
}

// custom forms init
function initCustomForms() {
    $('select').customSelect();
    //$('input:radio').customRadio();
    $('input:checkbox').customCheckbox();
}

// custom forms plugin
; (function(jQuery) {
    // custom checkboxes module
    jQuery.fn.customCheckbox = function(_options) {
        var _options = jQuery.extend({
            checkboxStructure: '<div></div>',
            checkboxDisabled: 'disabled',
            checkboxDefault: 'checkboxArea',
            checkboxChecked: 'checkboxAreaChecked'
        }, _options);
        return this.each(function() {
            var checkbox = jQuery(this);
            if (!checkbox.hasClass('outtaHere') && checkbox.is(':checkbox')) {
                var replaced = jQuery(_options.checkboxStructure);
                this._replaced = replaced;
                if (checkbox.is(':disabled')) replaced.addClass(_options.checkboxDisabled);
                else if (checkbox.is(':checked')) replaced.addClass(_options.checkboxChecked);
                else replaced.addClass(_options.checkboxDefault);

                replaced.click(function() {
                    if (checkbox.is(':checked')) checkbox.removeAttr('checked');
                    else checkbox.attr('checked', 'checked');
                    changeCheckbox(checkbox);
                });
                checkbox.click(function() {
                    changeCheckbox(checkbox);
                });
                replaced.insertBefore(checkbox);
                checkbox.addClass('outtaHere');
            }
        });
        function changeCheckbox(_this) {
            _this.change();
            if (_this.is(':checked')) _this.get(0)._replaced.removeClass().addClass(_options.checkboxChecked);
            else _this.get(0)._replaced.removeClass().addClass(_options.checkboxDefault);
        }
    }

    // custom radios module
    jQuery.fn.customRadio = function(_options) {
        var _options = jQuery.extend({
            radioStructure: '<div></div>',
            radioDisabled: 'disabled',
            radioDefault: 'radioArea',
            radioChecked: 'radioAreaChecked'
        }, _options);
        return this.each(function() {
            var radio = jQuery(this);
            if (!radio.hasClass('outtaHere') && radio.is(':radio')) {
                var replaced = jQuery(_options.radioStructure);
                this._replaced = replaced;
                if (radio.is(':disabled')) replaced.addClass(_options.radioDisabled);
                else if (radio.is(':checked')) replaced.addClass(_options.radioChecked);
                else replaced.addClass(_options.radioDefault);
                replaced.click(function() {
                    if ($(this).hasClass(_options.radioDefault)) {
                        radio.attr('checked', 'checked');
                        changeRadio(radio.get(0));
                    }
                });
                radio.click(function() {
                    changeRadio(this);
                });
                replaced.insertBefore(radio);
                radio.addClass('outtaHere');
            }
        });
        function changeRadio(_this) {
            $(_this).change();
            $('input:radio[name=' + $(_this).attr("name") + ']').not(_this).each(function() {
                if (this._replaced && !$(this).is(':disabled')) this._replaced.removeClass().addClass(_options.radioDefault);
            });
            _this._replaced.removeClass().addClass(_options.radioChecked);
        }
    }

    // custom selects module
    jQuery.fn.customSelect = function(_options) {
        var _options = jQuery.extend({
            selectStructure: '<div class="selectArea"><span class="left"></span><span class="center"></span><a href="#" class="selectButton"></a><div class="disabled"></div></div>',
            hideOnMouseOut: false,
            copyClass: true,
            selectText: '.center',
            selectBtn: '.selectButton',
            selectDisabled: '.disabled',
            optStructure: '<div class="optionsDivVisible"><div class="select-top"></div><div class="select-center"><ul></ul><div class="select-bottom"></div></div>',
            optList: 'ul',
            maxHeight: 200
        }, _options);
        return this.each(function() {
            var select = jQuery(this);
            if (!select.hasClass('outtaHere')) {
                if (select.is(':visible')) {
                    var hideOnMouseOut = _options.hideOnMouseOut;
                    var copyClass = _options.copyClass;
                    var replaced = jQuery(_options.selectStructure);
                    var selectText = replaced.find(_options.selectText);
                    var selectBtn = replaced.find(_options.selectBtn);
                    var selectDisabled = replaced.find(_options.selectDisabled).hide();
                    var optHolder = jQuery(_options.optStructure);
                    var optList = optHolder.find(_options.optList);
                    var maxHeight = _options.maxHeight;
                    if (copyClass) optHolder.addClass('drop-' + select.attr('class'));

                    if (select.attr('disabled')) selectDisabled.show();
                    select.find('option').each(function() {
                        var selOpt = $(this);
                        var _opt = jQuery('<li><a href="#">' + selOpt.html() + '</a></li>');
                        if (selOpt.attr('selected')) {
                            selectText.html(selOpt.html());
                            _opt.addClass('selected');
                        }
                        _opt.children('a').click(function() {
                            optList.find('li').removeClass('selected');
                            select.find('option').removeAttr('selected');
                            $(this).parent().addClass('selected');
                            selOpt.attr('selected', 'selected');
                            selectText.html(selOpt.html());
                            select.change();
                            optHolder.hide();
                            return false;
                        });
                        optList.append(_opt);
                    });
                    select.keydown(function(e) {
                        var _sel = $(this);
                        if (e.keyCode == 13) {
                            optList.children('.selected').find('>a').trigger('click');
                            select.trigger('blur');
                        }
                        else if (e.keyCode == 27) {
                            $('body').trigger('click');
                            select.trigger('blur');
                        }
                        else setTimeout(function() {
                            var _ind = _sel.get(0).selectedIndex;
                            optList.children().removeClass('selected').eq(_ind).addClass('selected');
                        }, 50)

                    })
                    replaced.width(select.outerWidth());
                    replaced.insertBefore(select);
                    optHolder.css({
                        width: select.outerWidth(),
                        display: 'none',
                        position: 'absolute'
                    })
                    jQuery(document.body).append(optHolder);
                    optHolder.show();
                    if (optList.height() > maxHeight) optHolder.css({
                        'overflow': 'auto',
                        'height': maxHeight
                    })
                    optHolder.hide();

                    var optTimer;
                    replaced.hover(function() {
                        if (optTimer) clearTimeout(optTimer);
                    }, function() {
                        if (hideOnMouseOut) {
                            optTimer = setTimeout(function() {
                                optHolder.hide();
                            }, 200);
                        }
                    });
                    optHolder.hover(function() {
                        if (optTimer) clearTimeout(optTimer);
                    }, function() {
                        if (hideOnMouseOut) {
                            optTimer = setTimeout(function() {
                                optHolder.hide();
                            }, 200);
                        }
                    });
                    selectBtn.click(function() {
                        if (optHolder.is(':visible')) {
                            optHolder.hide();
                            select.trigger('blur');
                        }
                        else {
                            if (_activeDrop) _activeDrop.hide();
                            optHolder.children('ul').css({ height: 'auto', overflow: 'hidden' });
                            optHolder.css({
                                top: replaced.offset().top + replaced.outerHeight(),
                                left: replaced.offset().left,
                                display: 'block'
                            });
                            if (optHolder.children('ul').height() > 200) optHolder.children('ul').css({ height: 200, overflow: 'auto' });
                            _activeDrop = optHolder;
                            select.trigger('focus');
                        }
                        return false;
                    });
                    select.addClass('outtaHere');
                }
            }
        });
    }

    // event handler on DOM ready
    var _activeDrop;
    jQuery(function() {
        jQuery('body').click(hideOptionsClick)
        jQuery(window).resize(hideOptions)
    });
    function hideOptions() {
        if (_activeDrop && _activeDrop.length) {
            _activeDrop.hide();
            _activeDrop = null;
        }
    }
    function hideOptionsClick(e) {
        if (_activeDrop && _activeDrop.length) {
            var f = false;
            $(e.target).parents().each(function() {
                if (this == _activeDrop) f = true;
            });
            if (!f) {
                _activeDrop.hide();
                _activeDrop = null;
            }
        }
    }
})(jQuery);

$.fn.cyclingGall = function(_opt) {
    var _options = $.extend({
        slideEl: '>ul',
        slides: '>li',
        switcher: false,
        autoSlide: 7000,
        duration: 700,
        btPrev: '.btn-prev, .prev, .prev-btn, .btn-up, .up-btn, .link-prev',
        btNext: '.btn-next, .next, .next-btn, .btn-down, .down-btn, .link-next',
        direction: false,
        activeClass: 'active',
        changeHeight: false,
        afterInit: false
    }, _opt);
    var _enabledClass = 'slide-enabled';

    return this.each(function() {
        if ($(this).hasClass(_enabledClass)) return;
        var _holder = $(this),
			_animSpeed = _options.duration,
			_duration = _options.autoSlide,
			_slideEl = $(_options.slideEl, _holder),
			_slides = $(_options.slides, _slideEl),
			_btNext = $(_options.btNext, _holder),
			_btPrev = $(_options.btPrev, _holder),
			_switcher = _options.switcher ? $(_options.switcher, _holder) : false,
			_duration = _options.autoSlide,
			_activeClass = _options.activeClass,
			_direction = _options.direction,
			afterInit = _options.afterInit,
			_frame = _options.changeHeight ? $(_options.changeHeight, _holder) : false;
        var _step = _slides.eq(0).outerWidth(true);
        var _active = 0;
        var _t;

        if (!_direction) {
            var _offset = _step * (_slides.length);
            _slideEl.css('margin-left', -_offset);
            _slides.clone().appendTo(_slideEl);
            _slides.clone().appendTo(_slideEl);
        }
        else {
            _step = _slides.eq(0).outerHeight(true);
            var _offset = _step * (_slides.length);
            _slideEl.css('margin-top', -_offset);
            _slides.clone().appendTo(_slideEl);
            _slides.clone().appendTo(_slideEl);
        }
        if (_frame) {
            if (_frame.height() != _slides.eq(_active).height()) _frame.css({
                'height': _slides.eq(_active).height()
            })
        }

        function changeSlide(_to) {
            if (_switcher) {
                _switcher.eq(_active).removeClass(_activeClass);
                if (_to < 0) _switcher.eq(_slides.length - 1).addClass(_activeClass);
                else if (_to > _slides.length - 1) _switcher.eq(0).addClass(_activeClass);
                else _switcher.eq(_to).addClass(_activeClass);
            }
            if (_frame) {
                var _toSl = _to;
                if (_to < 0) _toSl = _slides.length - 1
                else if (_to > _slides.length - 1) _toSl = 0;
                if (_frame.height() != _slides.eq(_toSl).height()) _frame.animate({
                    'height': _slides.eq(_toSl).height()
                }, _animSpeed)
            }

            if (_direction) {
                _slideEl.animate({
                    'margin-top': -_step * _to - _offset
                }, _animSpeed, function() {
                    _active = _to;
                    if (_active < 0) {
                        _active = _slides.length - 1;
                        _slideEl.css('margin-top', -_offset - _step * _active)
                    }
                    else if (_active > _slides.length - 1) {
                        _active = 0;
                        _slideEl.css('margin-top', -_offset)
                    }
                })
            }
            else {
                _slideEl.animate({
                    'margin-left': -_step * _to - _offset
                }, _animSpeed, function() {
                    _active = _to;
                    if (_active < 0) {
                        _active = _slides.length - 1;
                        _slideEl.css('margin-left', -_offset - _step * _active)
                    }
                    else if (_active > _slides.length - 1) {
                        _active = 0;
                        _slideEl.css('margin-left', -_offset)
                    }
                })
            }
        }

        if (_duration) {
            _t = setInterval(function() {
                changeSlide(_active + 1)
            }, _duration)

            _holder.mouseenter(function() {
                if (_t) clearInterval(_t);
            }).mouseleave(function() {
                if (_t) clearInterval(_t);
                _t = setInterval(function() {
                    changeSlide(_active + 1)
                }, _duration)
            })
        }

        if (_switcher) {
            _switcher.click(function() {
                if (!_slideEl.is(':animated')) {
                    changeSlide(_switcher.index($(this)));
                }
                return false;
            })
        }

        if (_btNext) {
            _btNext.click(function() {
                if (!_slideEl.is(':animated')) {
                    changeSlide(_active + 1);
                }
                return false;
            })
        }
        if (_btPrev) {
            _btPrev.click(function() {
                if (!_slideEl.is(':animated')) {
                    changeSlide(_active - 1);
                }
                return false;
            })
        }
        if (typeof (afterInit) == 'function') afterInit();
    });
}

// slideshow plugin
jQuery.fn.fadeGallery = function(_options) {
    var _options = jQuery.extend({
        slideElements: 'div.slideset > div',
        pagerLinks: 'div.pager a',
        btnNext: 'a.next',
        btnPrev: 'a.prev',
        btnPlayPause: 'a.play-pause',
        btnPlay: 'a.play',
        btnPause: 'a.pause',
        pausedClass: 'paused',
        disabledClass: 'disabled',
        playClass: 'playing',
        activeClass: 'active',
        loadingClass: 'ajax-loading',
        loadedClass: 'slide-loaded',
        dynamicImageLoad: false,
        dynamicImageLoadAttr: 'alt',
        currentNum: false,
        allNum: false,
        startSlide: null,
        noCircle: false,
        pauseOnHover: true,
        autoRotation: false,
        autoHeight: false,
        onBeforeFade: false,
        onAfterFade: false,
        onChange: false,
        disableWhileAnimating: false,
        switchTime: 3000,
        duration: 650,
        event: 'click'
    }, _options);

    return this.each(function() {
        // gallery options
        if (this.slideshowInit) return; else this.slideshowInit;
        var _this = jQuery(this);
        var _slides = jQuery(_options.slideElements, _this);
        var _pagerLinks = jQuery(_options.pagerLinks, _this);
        var _btnPrev = jQuery(_options.btnPrev, _this);
        var _btnNext = jQuery(_options.btnNext, _this);
        var _btnPlayPause = jQuery(_options.btnPlayPause, _this);
        var _btnPause = jQuery(_options.btnPause, _this);
        var _btnPlay = jQuery(_options.btnPlay, _this);
        var _pauseOnHover = _options.pauseOnHover;
        var _dynamicImageLoad = _options.dynamicImageLoad;
        var _dynamicImageLoadAttr = _options.dynamicImageLoadAttr;
        var _autoRotation = _options.autoRotation;
        var _activeClass = _options.activeClass;
        var _loadingClass = _options.loadingClass;
        var _loadedClass = _options.loadedClass;
        var _disabledClass = _options.disabledClass;
        var _pausedClass = _options.pausedClass;
        var _playClass = _options.playClass;
        var _autoHeight = _options.autoHeight;
        var _duration = _options.duration;
        var _switchTime = _options.switchTime;
        var _controlEvent = _options.event;
        var _currentNum = (_options.currentNum ? jQuery(_options.currentNum, _this) : false);
        var _allNum = (_options.allNum ? jQuery(_options.allNum, _this) : false);
        var _startSlide = _options.startSlide;
        var _noCycle = _options.noCircle;
        var _onChange = _options.onChange;
        var _onBeforeFade = _options.onBeforeFade;
        var _onAfterFade = _options.onAfterFade;
        var _disableWhileAnimating = _options.disableWhileAnimating;

        // gallery init
        var _anim = false;
        var _hover = false;
        var _prevIndex = 0;
        var _currentIndex = 0;
        var _slideCount = _slides.length;
        var _timer;
        if (_slideCount < 2) return;

        _prevIndex = _slides.index(_slides.filter('.' + _activeClass));
        if (_prevIndex < 0) _prevIndex = _currentIndex = 0;
        else _currentIndex = _prevIndex;
        if (_startSlide != null) {
            if (_startSlide == 'random') _prevIndex = _currentIndex = Math.floor(Math.random() * _slideCount);
            else _prevIndex = _currentIndex = parseInt(_startSlide);
        }
        _slides.hide().eq(_currentIndex).show();
        if (_autoRotation) _this.removeClass(_pausedClass).addClass(_playClass);
        else _this.removeClass(_playClass).addClass(_pausedClass);

        // gallery control
        if (_btnPrev.length) {
            _btnPrev.bind(_controlEvent, function() {
                prevSlide();
                return false;
            });
        }
        if (_btnNext.length) {
            _btnNext.bind(_controlEvent, function() {
                nextSlide();
                return false;
            });
        }
        if (_pagerLinks.length) {
            _pagerLinks.each(function(_ind) {
                jQuery(this).bind(_controlEvent, function() {
                    if (_currentIndex != _ind) {
                        if (_disableWhileAnimating && _anim) return;
                        _prevIndex = _currentIndex;
                        _currentIndex = _ind;
                        switchSlide();
                    }
                    return false;
                });
            });
        }

        // play pause section
        if (_btnPlayPause.length) {
            _btnPlayPause.bind(_controlEvent, function() {
                if (_this.hasClass(_pausedClass)) {
                    _this.removeClass(_pausedClass).addClass(_playClass);
                    _autoRotation = true;
                    autoSlide();
                } else {
                    _autoRotation = false;
                    if (_timer) clearTimeout(_timer);
                    _this.removeClass(_playClass).addClass(_pausedClass);
                }
                return false;
            });
        }
        if (_btnPlay.length) {
            _btnPlay.bind(_controlEvent, function() {
                _this.removeClass(_pausedClass).addClass(_playClass);
                _autoRotation = true;
                autoSlide();
                return false;
            });
        }
        if (_btnPause.length) {
            _btnPause.bind(_controlEvent, function() {
                _autoRotation = false;
                if (_timer) clearTimeout(_timer);
                _this.removeClass(_playClass).addClass(_pausedClass);
                return false;
            });
        }

        // dynamic image loading (swap from ATTRIBUTE)
        function loadSlide(slide) {
            if (!slide.hasClass(_loadingClass) && !slide.hasClass(_loadedClass)) {
                var images = slide.find(_dynamicImageLoad) // pass selector here
                var imagesCount = images.length;
                if (imagesCount) {
                    slide.addClass(_loadingClass);
                    images.each(function() {
                        var img = this;
                        img.onload = function() {
                            img.loaded = true;
                            img.onload = null;
                            setTimeout(reCalc, _duration);
                        }
                        img.setAttribute('src', img.getAttribute(_dynamicImageLoadAttr));
                        img.setAttribute(_dynamicImageLoadAttr, '');
                    }).css({ opacity: 0 });

                    function reCalc() {
                        var cnt = 0;
                        images.each(function() {
                            if (this.loaded) cnt++;
                        });
                        if (cnt == imagesCount) {
                            slide.removeClass(_loadingClass);
                            images.animate({ opacity: 1 }, { duration: _duration, complete: function() {
                                if (jQuery.browser.msie && jQuery.browser.version < 9) jQuery(this).css({ opacity: 'auto' })
                            } 
                            });
                            slide.addClass(_loadedClass)
                        }
                    }
                }
            }
        }

        // gallery animation
        function prevSlide() {
            if (_disableWhileAnimating && _anim) return;
            _prevIndex = _currentIndex;
            if (_currentIndex > 0) _currentIndex--;
            else {
                if (_noCycle) return;
                else _currentIndex = _slideCount - 1;
            }
            switchSlide();
        }
        function nextSlide() {
            if (_disableWhileAnimating && _anim) return;
            _prevIndex = _currentIndex;
            if (_currentIndex < _slideCount - 1) _currentIndex++;
            else {
                if (_noCycle) return;
                else _currentIndex = 0;
            }
            switchSlide();
        }
        function refreshStatus() {
            if (_dynamicImageLoad) loadSlide(_slides.eq(_currentIndex));
            if (_pagerLinks.length) _pagerLinks.removeClass(_activeClass).eq(_currentIndex).addClass(_activeClass);
            if (_currentNum) _currentNum.text(_currentIndex + 1);
            if (_allNum) _allNum.text(_slideCount);
            _slides.eq(_prevIndex).removeClass(_activeClass);
            _slides.eq(_currentIndex).addClass(_activeClass);
            if (_noCycle) {
                if (_btnPrev.length) {
                    if (_currentIndex == 0) _btnPrev.addClass(_disabledClass);
                    else _btnPrev.removeClass(_disabledClass);
                }
                if (_btnNext.length) {
                    if (_currentIndex == _slideCount - 1) _btnNext.addClass(_disabledClass);
                    else _btnNext.removeClass(_disabledClass);
                }
            }
            if (typeof _onChange === 'function') {
                _onChange(_this, _slides, _prevIndex, _currentIndex);
            }
        }
        function switchSlide() {
            _anim = true;
            if (typeof _onBeforeFade === 'function') _onBeforeFade(_this, _slides, _prevIndex, _currentIndex);
            _slides.eq(_prevIndex).fadeOut(_duration, function() {
                _anim = false;
            });
            _slides.eq(_currentIndex).fadeIn(_duration, function() {
                if (typeof _onAfterFade === 'function') _onAfterFade(_this, _slides, _prevIndex, _currentIndex);
            });
            if (_autoHeight) _slides.eq(_currentIndex).parent().animate({ height: _slides.eq(_currentIndex).outerHeight(true) }, { duration: _duration, queue: false });
            refreshStatus();
            autoSlide();
        }

        // autoslide function
        function autoSlide() {
            if (!_autoRotation || _hover) return;
            if (_timer) clearTimeout(_timer);
            _timer = setTimeout(nextSlide, _switchTime + _duration);
        }
        if (_pauseOnHover) {
            _this.hover(function() {
                _hover = true;
                if (_timer) clearTimeout(_timer);
            }, function() {
                _hover = false;
                autoSlide();
            });
        }
        refreshStatus();
        autoSlide();
    });
}

function initValidation() {
    var _errorClass = 'error';
    var _regName = new RegExp(/[A-Za-z]/);
    var _regEmail = new RegExp(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/);
    var _regEmails = new RegExp(/^([_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,4})+([, ]+[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,4})*$/);
    var _regPhone = new RegExp(/^[0-9\-\ \()]+$/);
    var _regNum = new RegExp(/^[0-9]+$/);
    var _regDay = new RegExp(/^(([0]{1}[1-9]{1})|([1-9]{1})|([1-2]{1}[0-9]{1})|([3]{1}[0-1]{1}))$/);
    var _regMon = new RegExp(/^(([0]{1}[1-9]{1})|([1-9]{1})|([1]{1}[0-2]{1}))$/);
    var _regYear = new RegExp(/^[19]{2}[0-9]{2}$/);

    $('form.validate').each(function() {
        var _form = $(this);
        function checkFields() {

            var _flag = false;
            _form.find('.' + _errorClass).removeClass(_errorClass);

            // fields validation
            _form.find('input.required-name').each(function() {
                if ($(this).val().length == 0 || $(this).val() == $(this).attr('alt') || !_regName.test($(this).val())) addError($(this));
            });
            _form.find('input.required-email').each(function() {
                if (!_regEmail.test($(this).val()) || $(this).val().length == 0 || $(this).val() == $(this).attr('alt')) addError($(this));
            });
            _form.find('input.required-day').each(function() {
                if (!_regDay.test($(this).val()) || $(this).val().length == 0 || $(this).val() == $(this).attr('alt')) addError($(this));
            });
            _form.find('input.required-mon').each(function() {
                if (!_regMon.test($(this).val()) || $(this).val().length == 0 || $(this).val() == $(this).attr('alt')) addError($(this));
            });
            _form.find('input.required-year').each(function() {
                if (!_regYear.test($(this).val()) || $(this).val().length == 0 || $(this).val() == $(this).attr('alt')) addError($(this));
            });
            _form.find('textarea.required-many-emails').each(function() {
                if (!_regEmails.test($(this).val()) || $(this).val().length == 0 || $(this).val() == $(this).attr('alt')) addError($(this));
            });
            _form.find('input.required-phone').each(function() {
                if (!_regPhone.test($(this).val()) || $(this).val().length == 0 || $(this).val() == $(this).attr('alt')) addError($(this));
            });
            _form.find('input.required-num').each(function() {
                if (!_regNum.test($(this).val()) || $(this).val().length == 0 || $(this).val() == $(this).attr('alt')) addError($(this));
            });
            _form.find('input.required, textarea.required').each(function() {
                if (!$(this).val().length || $(this).val() == $(this).attr('alt')) addError($(this));
            });
            _form.find('input.required-check').each(function() {
                if (!$(this).is(':checked')) {
                    $(this).parent('span').addClass('error-chk');
                    _flag = true;
                }
            });
            _form.find('div.required-radio').each(function() {
                var _test = false;
                $(this).find('input[type=radio]').each(function() {
                    if ($(this).is(':checked')) _test = true;
                });
                if (!_test) {
                    _flag = true;
                }
            });
            _form.find('select.required').each(function() {
                if (this.value == 'default' || this.value == 'Year') {
                    addError(_field);
                }
            });

            // error class adding
            function addError(_obj) {
                _obj.parents('.row, .text2, .text, .textarea').addClass(_errorClass);
                _flag = true;
            }
            return _flag;
        }

        // catch form submit event
        _form.submit(function() {
            if (checkFields()) {
                return false;
            }
        });
    });
}

// slideshow plugin
jQuery.fn.fadeGallery = function(_options) {
    var _options = jQuery.extend({
        slideElements: 'div.slideset > div',
        pagerLinks: 'div.pager a',
        btnNext: 'a.next',
        btnPrev: 'a.prev',
        btnPlayPause: 'a.play-pause',
        btnPlay: 'a.play',
        btnPause: 'a.pause',
        pausedClass: 'paused',
        disabledClass: 'disabled',
        playClass: 'playing',
        activeClass: 'active',
        loadingClass: 'ajax-loading',
        loadedClass: 'slide-loaded',
        dynamicImageLoad: false,
        dynamicImageLoadAttr: 'alt',
        currentNum: false,
        allNum: false,
        startSlide: null,
        noCircle: false,
        pauseOnHover: true,
        autoRotation: false,
        autoHeight: false,
        onBeforeFade: false,
        onAfterFade: false,
        onChange: false,
        disableWhileAnimating: false,
        switchTime: 3000,
        duration: 650,
        event: 'click'
    }, _options);

    return this.each(function() {
        // gallery options
        if (this.slideshowInit) return; else this.slideshowInit;
        var _this = jQuery(this);
        var _slides = jQuery(_options.slideElements, _this);
        var _pagerLinks = jQuery(_options.pagerLinks, _this);
        var _btnPrev = jQuery(_options.btnPrev, _this);
        var _btnNext = jQuery(_options.btnNext, _this);
        var _btnPlayPause = jQuery(_options.btnPlayPause, _this);
        var _btnPause = jQuery(_options.btnPause, _this);
        var _btnPlay = jQuery(_options.btnPlay, _this);
        var _pauseOnHover = _options.pauseOnHover;
        var _dynamicImageLoad = _options.dynamicImageLoad;
        var _dynamicImageLoadAttr = _options.dynamicImageLoadAttr;
        var _autoRotation = _options.autoRotation;
        var _activeClass = _options.activeClass;
        var _loadingClass = _options.loadingClass;
        var _loadedClass = _options.loadedClass;
        var _disabledClass = _options.disabledClass;
        var _pausedClass = _options.pausedClass;
        var _playClass = _options.playClass;
        var _autoHeight = _options.autoHeight;
        var _duration = _options.duration;
        var _switchTime = _options.switchTime;
        var _controlEvent = _options.event;
        var _currentNum = (_options.currentNum ? jQuery(_options.currentNum, _this) : false);
        var _allNum = (_options.allNum ? jQuery(_options.allNum, _this) : false);
        var _startSlide = _options.startSlide;
        var _noCycle = _options.noCircle;
        var _onChange = _options.onChange;
        var _onBeforeFade = _options.onBeforeFade;
        var _onAfterFade = _options.onAfterFade;
        var _disableWhileAnimating = _options.disableWhileAnimating;

        // gallery init
        var _anim = false;
        var _hover = false;
        var _prevIndex = 0;
        var _currentIndex = 0;
        var _slideCount = _slides.length;
        var _timer;
        if (_slideCount < 2) return;

        _prevIndex = _slides.index(_slides.filter('.' + _activeClass));
        if (_prevIndex < 0) _prevIndex = _currentIndex = 0;
        else _currentIndex = _prevIndex;
        if (_startSlide != null) {
            if (_startSlide == 'random') _prevIndex = _currentIndex = Math.floor(Math.random() * _slideCount);
            else _prevIndex = _currentIndex = parseInt(_startSlide);
        }
        _slides.hide().eq(_currentIndex).show();
        if (_autoRotation) _this.removeClass(_pausedClass).addClass(_playClass);
        else _this.removeClass(_playClass).addClass(_pausedClass);

        // gallery control
        if (_btnPrev.length) {
            _btnPrev.bind(_controlEvent, function() {
                prevSlide();
                return false;
            });
        }
        if (_btnNext.length) {
            _btnNext.bind(_controlEvent, function() {
                nextSlide();
                return false;
            });
        }
        if (_pagerLinks.length) {
            _pagerLinks.each(function(_ind) {
                jQuery(this).bind(_controlEvent, function() {
                    if (_currentIndex != _ind) {
                        if (_disableWhileAnimating && _anim) return;
                        _prevIndex = _currentIndex;
                        _currentIndex = _ind;
                        switchSlide();
                    }
                    return false;
                });
            });
        }

        // play pause section
        if (_btnPlayPause.length) {
            _btnPlayPause.bind(_controlEvent, function() {
                if (_this.hasClass(_pausedClass)) {
                    _this.removeClass(_pausedClass).addClass(_playClass);
                    _autoRotation = true;
                    autoSlide();
                } else {
                    _autoRotation = false;
                    if (_timer) clearTimeout(_timer);
                    _this.removeClass(_playClass).addClass(_pausedClass);
                }
                return false;
            });
        }
        if (_btnPlay.length) {
            _btnPlay.bind(_controlEvent, function() {
                _this.removeClass(_pausedClass).addClass(_playClass);
                _autoRotation = true;
                autoSlide();
                return false;
            });
        }
        if (_btnPause.length) {
            _btnPause.bind(_controlEvent, function() {
                _autoRotation = false;
                if (_timer) clearTimeout(_timer);
                _this.removeClass(_playClass).addClass(_pausedClass);
                return false;
            });
        }

        // dynamic image loading (swap from ATTRIBUTE)
        function loadSlide(slide) {
            if (!slide.hasClass(_loadingClass) && !slide.hasClass(_loadedClass)) {
                var images = slide.find(_dynamicImageLoad) // pass selector here
                var imagesCount = images.length;
                if (imagesCount) {
                    slide.addClass(_loadingClass);
                    images.each(function() {
                        var img = this;
                        img.onload = function() {
                            img.loaded = true;
                            img.onload = null;
                            setTimeout(reCalc, _duration);
                        }
                        img.setAttribute('src', img.getAttribute(_dynamicImageLoadAttr));
                        img.setAttribute(_dynamicImageLoadAttr, '');
                    }).css({ opacity: 0 });

                    function reCalc() {
                        var cnt = 0;
                        images.each(function() {
                            if (this.loaded) cnt++;
                        });
                        if (cnt == imagesCount) {
                            slide.removeClass(_loadingClass);
                            images.animate({ opacity: 1 }, { duration: _duration, complete: function() {
                                if (jQuery.browser.msie && jQuery.browser.version < 9) jQuery(this).css({ opacity: 'auto' })
                            } 
                            });
                            slide.addClass(_loadedClass)
                        }
                    }
                }
            }
        }

        // gallery animation
        function prevSlide() {
            if (_disableWhileAnimating && _anim) return;
            _prevIndex = _currentIndex;
            if (_currentIndex > 0) _currentIndex--;
            else {
                if (_noCycle) return;
                else _currentIndex = _slideCount - 1;
            }
            switchSlide();
        }
        function nextSlide() {
            if (_disableWhileAnimating && _anim) return;
            _prevIndex = _currentIndex;
            if (_currentIndex < _slideCount - 1) _currentIndex++;
            else {
                if (_noCycle) return;
                else _currentIndex = 0;
            }
            switchSlide();
        }
        function refreshStatus() {
            if (_dynamicImageLoad) loadSlide(_slides.eq(_currentIndex));
            if (_pagerLinks.length) _pagerLinks.removeClass(_activeClass).eq(_currentIndex).addClass(_activeClass);
            if (_currentNum) _currentNum.text(_currentIndex + 1);
            if (_allNum) _allNum.text(_slideCount);
            _slides.eq(_prevIndex).removeClass(_activeClass);
            _slides.eq(_currentIndex).addClass(_activeClass);
            if (_noCycle) {
                if (_btnPrev.length) {
                    if (_currentIndex == 0) _btnPrev.addClass(_disabledClass);
                    else _btnPrev.removeClass(_disabledClass);
                }
                if (_btnNext.length) {
                    if (_currentIndex == _slideCount - 1) _btnNext.addClass(_disabledClass);
                    else _btnNext.removeClass(_disabledClass);
                }
            }
            if (typeof _onChange === 'function') {
                _onChange(_this, _slides, _prevIndex, _currentIndex);
            }
        }
        function switchSlide() {
            _anim = true;
            if (typeof _onBeforeFade === 'function') _onBeforeFade(_this, _slides, _prevIndex, _currentIndex);
            _slides.eq(_prevIndex).fadeOut(_duration, function() {
                _anim = false;
            });
            _slides.eq(_currentIndex).fadeIn(_duration, function() {
                if (typeof _onAfterFade === 'function') _onAfterFade(_this, _slides, _prevIndex, _currentIndex);
            });
            if (_autoHeight) _slides.eq(_currentIndex).parent().animate({ height: _slides.eq(_currentIndex).outerHeight(true) }, { duration: _duration, queue: false });
            refreshStatus();
            autoSlide();
        }

        // autoslide function
        function autoSlide() {
            if (!_autoRotation || _hover) return;
            if (_timer) clearTimeout(_timer);
            _timer = setTimeout(nextSlide, _switchTime + _duration);
        }
        if (_pauseOnHover) {
            _this.hover(function() {
                _hover = true;
                if (_timer) clearTimeout(_timer);
            }, function() {
                _hover = false;
                autoSlide();
            });
        }
        refreshStatus();
        autoSlide();
    });
}



////////////
function initFullscreenGallery2() {
    var _body = $('body');
    var _wrapper = $('#wrapper');
    var _minWidth = 1002;
    var _animSpeed = 1000;
    $('#fullscreen2').each(function() {
        var _fullscreen = $(this);
        var _main = $('#main');
        var _gallery = $('.fullscreen-minimized:eq(0)');
        var _slideEl = $('.gallery2>ul', _gallery);
        var _slides = $('>li', _slideEl);
        var _thumbs = $('.thumbs', _gallery);
        var _thumbsLinks = $('li', _thumbs);
        var _step = _slides.eq(0).width();
        var _prev = $('.btn-prev', _gallery);
        var _next = $('.btn-next', _gallery);
        var _switcher = $('.switcher ul>li', _gallery);
        var _fsButton = $('.full-screen2', _gallery);
        var _fsClose = $('.full-screen2', _fullscreen);
        var _playBtn = $('.fullscreen-minimized:eq(0) .play, #fullscreen .play');
        var _active = 0;
        var _switchTime = 6000;
        var _autoRotation = true;
        var _t;
        var _frame = $('.gallery', _fullscreen);
        var _fsSlideEl = $('.holder > ul', _frame);
        var _fsSlides = $('>li', _fsSlideEl);
        var _fsSwitcher = $('.switcher ul>li', _fullscreen);
        var _fsThumbsHold = $('.thumbs', _fullscreen);
        var _fsThumbs = $('.thumbs ul>li', _fullscreen);
        var _fsThumbsScroll = $('.thumbs ul', _fullscreen);
        var _fsStep;
        var _fsNext = $('.btn-next', _fullscreen);
        var _fsPrev = $('.btn-prev', _fullscreen);


        function resizeSlide(_slide) {
            var _w = _slide.width();
            var _h = _slide.height();
            if (_slide.parents('#fullscreen').length > 0 && _frame.is(':visible')) _h = _frame.height();
            var _maxW = Math.floor(_slide.width() / _slide.find('img').length) - 5;
            var _link = $('>a', _slide)
            if (_link.length > 0) _link.css({
                'width': _w,
                'height': _h
            });
            if (_slide.find('img').length > 1) _w = _maxW;
            var _sumW = 0;
            var _imgCount = _slide.find('img').length;
            _slide.find('img').each(function(ind) {
                var _img = $(this);
                var _imgW = _img.width();
                var _imgH = _img.height()
                var _ratio = _imgW / _imgH;
                _img.css({
                    'width': _w,
                    'height': _w / _ratio
                })
                if (_img.height() > _h) _img.css({
                    'width': _h * _ratio,
                    'height': _h
                })
                _sumW = _img.width() * _imgCount;
                if (ind == _slide.find('img').length - 1) {
                    var _sHolder = _slide.find('.image-holder');
                    if (_sumW < _slide.width()) _sHolder.css('padding-left', (_slide.width() - _sumW) / 2);
                }
            });
        }

        //set slides
        _slides.each(function() {
            var _slide = $(this);
            resizeSlide(_slide);
        })

        // for gallery with thumbs
        if (_thumbs.length > 0) {
            _slides.css({
                'position': 'absolute',
                'top': 0,
                'left': 0
            })
            _fsSlides.css({
                'position': 'absolute',
                'top': 0,
                'left': 0
            })
            _slides.hide().eq(_active).show().addClass('active');
            _thumbsLinks.eq(_active).addClass('active');
            _fsThumbs.eq(_active).addClass('active');
            _fsButton.click(function() {
                $('.w1, .footer-holder').hide();
                _fullscreen.show();
                scrollThumbs(_fullscreen.find('.thumbs'));
                fullscreenSet();
                fsResize();
                return false;
            })

            _fsClose.click(function() {
                _fullscreen.hide();
                $('.w1, .footer-holder').show();
                minimizedSet();
                return false;
            })

            function changeSlides(_to) {
                if (_gallery.is(':visible') && _slides.filter(':animated').length == 0) {
                    if (_t) clearTimeout(_t);
                    _slides.eq(_active).fadeOut(_animSpeed).removeClass('active');
                    _slides.eq(_to).fadeIn(_animSpeed, function() {
                        autoRotation();
                    }).addClass('active');
                    _thumbsLinks.eq(_active).removeClass('active');
                    _thumbsLinks.eq(_to).addClass('active');
                    _fsThumbs.eq(_active).removeClass('active');
                    _fsThumbs.eq(_to).addClass('active');
                    _active = _to;
                }
                else if (_fullscreen.is(':visible') && _fsSlides.filter(':animated').length == 0) {
                    if (_t) clearTimeout(_t);
                    _fsSlides.eq(_active).fadeOut(_animSpeed).removeClass('active');
                    _fsSlides.eq(_to).fadeIn(_animSpeed, function() {
                        autoRotation();
                    }).addClass('active');
                    _thumbsLinks.eq(_active).removeClass('active');
                    _thumbsLinks.eq(_to).addClass('active');
                    _fsThumbs.eq(_active).removeClass('active');
                    _fsThumbs.eq(_to).addClass('active');
                    resizeSlide(_fsSlides.eq(_to));
                    _active = _to;
                }
            }

            function fullscreenSet() {
                _fsSlides.hide().removeClass('active').eq(_active).show().addClass('active');
                _fsThumbsScroll.css({ 'margin-left': _thumbs.find('ul').css('margin-left') });
                _fsThumbsHold.data('cur', _thumbs.data('cur'));
                if (_thumbs.find('.btn-prev2').hasClass('noactive')) _fsThumbsHold.find('.btn-prev2').addClass('noactive')
                else _fsThumbsHold.find('.btn-prev2').removeClass('noactive');
                if (_thumbs.find('.btn-next2').hasClass('noactive')) _fsThumbsHold.find('.btn-next2').addClass('noactive')
                else _fsThumbsHold.find('.btn-next2').removeClass('noactive');
            }

            function minimizedSet() {
                _slides.hide().removeClass('active').eq(_active).show().addClass('active');
                _thumbs.find('ul').css({ 'margin-left': _fsThumbsScroll.css('margin-left') })
                _thumbs.data('cur', _fsThumbsHold.cur);
                if (_fsThumbsHold.find('.btn-prev2').hasClass('noactive')) _thumbs.find('.btn-prev2').addClass('noactive')
                else _thumbs.find('.btn-prev2').removeClass('noactive');
                if (_fsThumbsHold.find('.btn-next2').hasClass('noactive')) _thumbs.find('.btn-next2').addClass('noactive')
                else _thumbs.find('.btn-next2').removeClass('noactive');
            }

            function autoRotation() {
                if (_t) clearTimeout(_t);
                if (_autoRotation) _t = setTimeout(function() {
                    _gallery.addClass('gallery-playing');
                    _fullscreen.addClass('gallery-playing');
                    var _next = _active < _slides.length - 1 ? _active + 1 : 0;
                    changeSlides(_next);
                }, _switchTime)
            }
            autoRotation();

            _playBtn.click(function() {
                if (_gallery.hasClass('gallery-playing')) {
                    _autoRotation = false;
                    if (_t) clearTimeout(_t);
                    _gallery.removeClass('gallery-playing').addClass('gallery-paused');
                    _fullscreen.removeClass('gallery-playing').addClass('gallery-paused');
                }
                else if (_gallery.hasClass('gallery-paused')) {
                    _autoRotation = true;
                    if (_t) clearTimeout(_t);
                    _gallery.addClass('gallery-playing').removeClass('gallery-paused');
                    _fullscreen.addClass('gallery-playing').removeClass('gallery-paused');
                    autoRotation();
                }
                return false;
            })

            _thumbsLinks.click(function() {
                var _link = $(this);
                if (!_link.hasClass('active')) {
                    if (_t) clearTimeout(_t);
                    changeSlides(_thumbsLinks.index(_link));
                }
                return false;
            })
            _fsThumbs.click(function() {
                var _link = $(this);
                if (!_link.hasClass('active')) {
                    if (_t) clearTimeout(_t);
                    changeSlides(_fsThumbs.index(_link));
                }
                return false;
            })

            function fsResize() {
                var _addH = $('.top-container', _fullscreen).outerHeight(true) + parseInt($('.wrapper', _fullscreen).css('padding-bottom')) + parseInt(_frame.css('margin-bottom')) + _fsSwitcher.eq(0).height() + _fsThumbs.eq(0).height();
                var _gallH = $(window).height() - _addH > 300 ? $(window).height() - _addH : 300;
                _frame.height(_gallH);
                _fsSlideEl.height(_gallH);
                _fsSlides.css({
                    'width': _frame.width(),
                    'height': _gallH
                })
                _fsSlides.each(function() {
                    var _slide = $(this);
                    resizeSlide(_slide);
                })
                _fsNext.css({ 'top': (_gallH - _fsNext.height()) / 2 })
                _fsPrev.css({ 'top': (_gallH - _fsPrev.height()) / 2 });
            }

            function scrollThumbs(_thumbs) {
                if (_thumbs.hasClass('ready')) return;
                _thumbs.addClass('ready');
                var _tprev = $('.btn-prev2', _thumbs);
                var _tnext = $('.btn-next2', _thumbs);
                var _thumbsScroll = $('ul', _thumbs).css('margin-left', 0);
                var _hold = $('.holder', _thumbs);
                var _holdW = _hold.width();
                _thumbs.data('cur', 0);
                var _thumbsEls = $('li', _thumbs);
                var _sumWidth = _thumbsEls.eq(0).width() - _thumbsEls.eq(0).outerWidth(true);
                _thumbsEls.each(function(ind) {
                    _sumWidth += $(this).outerWidth(true);
                });
                var _marginMax = -(_sumWidth - _holdW);

                function scrollThumbs(_to) {
                    var _curMargin = parseInt(_thumbsScroll.css('margin-left'));
                    var offset = _to > _thumbs.data('cur') ? _curMargin - _thumbsEls.eq(_thumbs.data('cur')).outerWidth(true) : _curMargin + _thumbsEls.eq(_to).outerWidth(true)
                    if (offset >= _marginMax) {
                        _thumbsScroll.animate({
                            'margin-left': offset
                        }, 500)
                        _thumbs.data('cur', _to);
                        if (offset == _marginMax) _tnext.addClass('noactive');
                        else if (offset == 0) _tprev.addClass('noactive');
                        else {
                            _tnext.removeClass('noactive');
                            _tprev.removeClass('noactive');
                        }
                    }
                }
                _tprev.click(function() {
                    var _link = $(this);
                    if (!_thumbsScroll.is(':animated')) {
                        if (!_link.hasClass('noactive')) scrollThumbs(_thumbs.data('cur') - 1);
                    }
                    return false;
                })
                _tnext.click(function() {
                    var _link = $(this);
                    if (!_thumbsScroll.is(':animated')) {
                        if (!_link.hasClass('noactive')) scrollThumbs(_thumbs.data('cur') + 1);
                    }
                    return false;
                })
            }
            scrollThumbs(_thumbs)

            $(window).resize(function() {
                fsResize();
            })
        }
        //for gallery with simple switcher
        else {
            _switcher.removeClass('active').eq(_active).addClass('active');
            _fsSwitcher.removeClass('active').eq(_active).addClass('active');
            _slideEl.css('margin-left', 0);

            _fsButton.click(function() {
                $('.w1, .footer-holder').hide();
                _fullscreen.show();
                fsResize();
                return false;
            })
            _fsClose.click(function() {
                _fullscreen.hide();
                $('.w1, .footer-holder').show();
                return false;
            })

            function fsResize() {
                var _addH = $('.top-container', _fullscreen).outerHeight(true) + parseInt($('.wrapper', _fullscreen).css('padding-bottom')) + parseInt(_frame.css('margin-bottom')) + _fsSwitcher.eq(0).height() + _fsThumbs.eq(0).height();
                var _gallH = $(window).height() - _addH > 300 ? $(window).height() - _addH : 300;
                _frame.height(_gallH);
                _fsSlideEl.height(_gallH);
                _fsSlides.css({
                    'width': _frame.width(),
                    'height': _gallH
                })
                _fsStep = _fsSlides.eq(0).width();
                _fsSlideEl.css({
                    'margin-left': -_fsStep * _active
                })
                _fsSlides.each(function() {
                    _fsSlides.each(function() {
                        var _slide = $(this);
                        resizeSlide(_slide);
                    })
                })
                _fsNext.css({ 'top': (_gallH - _fsNext.height()) / 2 })
                _fsPrev.css({ 'top': (_gallH - _fsPrev.height()) / 2 });

            }

            function autoRotation() {
                if (_t) clearTimeout(_t);
                if (_autoRotation) _t = setTimeout(function() {
                    _gallery.addClass('gallery-playing');
                    _fullscreen.addClass('gallery-playing');
                    _fsNext.trigger('click');
                }, _switchTime)
            }
            autoRotation();

            function scrollTo(_to) {
                if (_t) clearTimeout(_t);
                _slideEl.stop().animate({
                    'margin-left': -_step * _to
                }, _animSpeed, function() {
                    autoRotation();
                })
                if (_fullscreen.is(':visible')) _fsSlideEl.stop().animate({
                    'margin-left': -_fsStep * _to
                }, _animSpeed)
                _switcher.removeClass('active').eq(_to).addClass('active');
                _fsSwitcher.removeClass('active').eq(_to).addClass('active');
                _active = _to;
            }
            _fsPrev.click(function() { _prev.trigger('click') })
            _fsNext.click(function() { _next.trigger('click') })
            _prev.click(function() {
                var _prev = _active > 0 ? _active - 1 : _slides.length - 1;
                scrollTo(_prev);
                return false;
            })
            _next.click(function() {
                var _next = _active < _slides.length - 1 ? _active + 1 : 0;
                scrollTo(_next);
                return false;
            })
            _switcher.click(function() {
                var _link = $(this);
                if (!_link.hasClass('active')) scrollTo(_switcher.index(_link));
            })
            _fsSwitcher.click(function() {
                var _link = $(this);
                if (!_link.hasClass('active')) scrollTo(_fsSwitcher.index(_link));
            })
            _playBtn.click(function() {
                if (_gallery.hasClass('gallery-playing')) {
                    _autoRotation = false;
                    if (_t) clearTimeout(_t);
                    _gallery.removeClass('gallery-playing').addClass('gallery-paused');
                    _fullscreen.removeClass('gallery-playing').addClass('gallery-paused');
                }
                else if (_gallery.hasClass('gallery-paused')) {
                    _autoRotation = true;
                    if (_t) clearTimeout(_t);
                    _gallery.addClass('gallery-playing').removeClass('gallery-paused');
                    _fullscreen.addClass('gallery-playing').removeClass('gallery-paused');
                    autoRotation();
                }
                return false;
            })
            $(window).resize(function() {
                if (_fullscreen.is(':visible')) {
                    var _flag = false;
                    if (_autoRotation) {
                        _autoRotation = false;
                        if (_t) clearTimeout(_t);
                        _gallery.removeClass('gallery-playing').addClass('gallery-paused');
                        _fullscreen.removeClass('gallery-playing').addClass('gallery-paused');
                        _flag = true;
                    }
                }
                fsResize();
                if (_flag) {
                    _flag = false;
                    _autoRotation = true;
                    if (_t) clearTimeout(_t);
                    _gallery.addClass('gallery-playing').removeClass('gallery-paused');
                    _fullscreen.addClass('gallery-playing').removeClass('gallery-paused');
                    autoRotation();
                }
            })
        }


    })
}
