function initGallery() {
	// options
	var _switchTime = 4000;
	var _slideSpeed = 400;
	var _fadeSpeed = 700;
	var _gallery = $('#gallery');
	var _slides = _gallery.find('.picture-list > li');
	var _activeSlide = 0;
	var _thumbsHolder = _gallery.find('#carusel');
	var _defOffset = parseInt(_thumbsHolder.css('marginBottom'));
	var _thumbs = _thumbsHolder.find('ul > li');
	var _thumbWidth = _thumbs.eq(0).outerWidth(true);
	var _thumbsCount = _thumbs.length;
	var _slider = _thumbs.eq(0).parent();

	var _hWidth = _thumbsHolder.width();
	var _sWidth = _thumbWidth*_thumbsCount;

	// thumbnail toggler
	_gallery.hover(function(){
		// _thumbsHolder.animate({marginBottom:0},{duration:_slideSpeed, queue:false})

		// _disableAutoSlide = true;
		// if(_autoTimer) clearTimeout(_autoTimer);
		return false;        
	});
	$('.toggle-gallery').click(function(){
		_thumbsHolder.animate({marginBottom:0},{duration:_slideSpeed, queue:false});

		_disableAutoSlide = true;
		if(_autoTimer) clearTimeout(_autoTimer);
		return false;
	});

	// gallery init
	_thumbs.parent().append(_thumbs.clone()).append(_thumbs.clone());
	_thumbs = _thumbsHolder.find('ul > li');
	var _gOffset = _thumbsHolder.offset().left;
	var _controlAreaSize = 100;
	var _cursorPos;
	var _direction = 100;
	var _speed = 0.15;
	var _gState = false;
	var _k = 1;
	_slider.css({marginLeft:-_sWidth});

	// gallery control
	_thumbsHolder.mousemove(function(e){
		_cursorPos = e.pageX-_gOffset;
		if(_cursorPos < _controlAreaSize) {
			if(!_gState) {
				_direction=1;
				gallerySlide(true);
			}
		} else if(_cursorPos > _hWidth-_controlAreaSize) {
			if(!_gState) {
				_direction=0;
				gallerySlide(true);
			}
		} else {
			gallerySlide(false);
		}
	});
	_thumbsHolder.hover(function(){
		return false;
	},function(){
		gallerySlide(false);
	});

	// gallery animation
	function gallerySlide(_f) {
		if(_f) {
			var _minL = 0;
			var _maxL = _sWidth*3 - _hWidth;
			_gState = true;

			if(_direction) {
				_k = 1-(_maxL + parseInt(_slider.css('marginLeft')))/_maxL;
				_duration = _sWidth / _speed;
				_slider.animate({marginLeft: _minL},{duration:_duration*_k,queue:false,easing:'linear',complete:function(){
					_slider.css({marginLeft:-_sWidth});
					setTimeout(function(){gallerySlide(true)},10);
				}});
			} else {
				_k = 2-(_maxL - parseInt(_slider.css('marginLeft')))/_maxL;
				_duration = _sWidth / _speed;
				_slider.animate({marginLeft: -(_maxL)},{duration:_duration*_k,queue:false,easing:'linear',complete:function(){
					_slider.css({marginLeft:_hWidth-_sWidth});
					setTimeout(function(){gallerySlide(true)},10);
				}});
			}
		} else {
			_slider.stop();
			_gState = false;
		}
	}

	// thumbs switcher
	_slides.css({opacity: 0});
	_slides.eq(_activeSlide).css({opacity: 1}).addClass('active');
	_thumbs.each(function(_ind){
		var _opener = $(this).find('a');
		var _num = _ind;

		_opener.click(function(){
			var _currentSlide;
			var _nextSlide;

			while(_num>=_thumbsCount) {
				_num-=_thumbsCount;
			}
			_slides.each(function(){
				if($(this).hasClass('active')) {
					_currentSlide = $(this);
				}
			});
			_nextSlide = _slides.eq(_num);

			_currentSlide.css({display:'block'}).removeClass('active').animate({opacity:0},{duration:_fadeSpeed,queue:false});
			_nextSlide.css({display:'block'}).addClass('active').animate({opacity:1},{duration:_fadeSpeed,queue:false});
			return false;
		});
	});

	// autoslide function
	var _disableAutoSlide = false;
	var _autoSlideNum = 0;
	var _autoTimer;
	function switchPhoto() {
		if(_disableAutoSlide) return false;

		var _currentSlide;
		var _nextSlide;

		_autoSlideNum = _slides.index(_slides.filter('.active'));
		_currentSlide = _slides.eq(_autoSlideNum);
		if(_autoSlideNum < _thumbsCount-1) {
			_autoSlideNum++;
		} else {
			_autoSlideNum=0;
		}
		_nextSlide = _slides.eq(_autoSlideNum);

		_currentSlide.css({display:'block'}).removeClass('active').animate({opacity:0},{duration:_fadeSpeed,queue:false});
		_nextSlide.css({display:'block'}).addClass('active').animate({opacity:1},{duration:_fadeSpeed,queue:false});
		if(!_disableAutoSlide) setTimeout(function(){switchPhoto()}, _switchTime);
	}
	_autoTimer = setTimeout(function(){switchPhoto()}, _switchTime);
}

$(document).ready(function() {
	initGallery();
});