
var galleryCaption = '';

function initGallery() {
	var _galleryImage = $('#gallery-image');
	var _gallery = $('#gallery-holder');
	var _slideBorder = _gallery.find('.bottom-border').css({opacity:0});
	var _tabsBox = _gallery.find('.gallery-tabs');
	var _menuRow = _gallery.find('.menu-row').eq(0);
	var _toggleBox = _gallery.find('.toggle-box').eq(0);
	var _toggleTimer;
	var _maximizedState = 0;
	var _toggleSpeed = 300;
	var _fadeSpeed = 200;

	// gallery toggle state
	var _btnOpen = _gallery.find('a.btn-open');
	var _btnClose = _gallery.find('a.btn-close');
	function toggleState(_s) {
		if(_s) {
			if(!_toggleBox.hasClass('open')) {
				_toggleBox.animate({marginTop: -10},{duration:_toggleSpeed, queue:false,complete:function(){
					_slideBorder.show().animate({opacity: 1},{duration:_toggleSpeed, queue:false});
				}});
			}
		} else {
			if(!_toggleBox.hasClass('open')) {
				_toggleBox.animate({marginTop: 0},{duration:_toggleSpeed, queue:false, complete:function(){
					_slideBorder.animate({opacity: 0},{duration:_toggleSpeed, queue:false});
				}});
			}
		}
	}
	if (_toggleBox.hasClass('home-gallery')){ _maximizedState = 131;
		_toggleBox.addClass('open').animate({marginTop: -_maximizedState},{duration:_toggleSpeed, queue:false});
	}
	else{
	    _toggleBox.addClass('open').animate({marginTop: -_maximizedState},{duration:_toggleSpeed, queue:false});
	    _toggleBox.hover(function(){
		    toggleState(true);
	    },function(){
		    toggleState(false);
	    });
	    _btnOpen.click(function(){
	        _galleryImage.find('div.gallery-description').html(galleryCaption);
	        _galleryImage.find('div.gallery-description').css({display:'block'});
		    _slideBorder.fadeOut(_fadeSpeed);
		    _toggleBox.addClass('open').animate({marginTop: -_maximizedState},{duration:_toggleSpeed, queue:false});
		    return false;
	    });
	    _btnClose.click(function(){
	        if (_galleryImage.find('div.gallery-description'))
	        {
	          galleryCaption = _galleryImage.find('div.gallery-description').html();
	          _galleryImage.find('div.gallery-description').html('');
	          _galleryImage.find('div.gallery-description').css({display:'none'});
	        }
		    _toggleBox.removeClass('open');
		    toggleState(false);
		    return false;
	    });
	}


	// sliding gallery code
	_gallery.find('div.gallery').each(function(){
		var _minSlides = 4;
		var _mainHolder = $(this);
		var _slideHolder = _mainHolder.find('.gallery-wraper');
		var _slider = _slideHolder.find(' > ul');
		var _slideItems = _slider.find(' > li');

		// animate only when many slides
		if(_slideItems.length > _minSlides) {
			_slider.removeClass('shifted-position');

			// animation proporties
			var _slideCount = _slideItems.length;
			_slider.append(_slideItems.clone()).append(_slideItems.clone())

			var _hWidth = 780;//parseInt(_slideHolder.css('width'));
		
			var _hHeight = _slideHolder.height();
			var _maxOffset = 100;
			var _cursorPos = 0;
			var _direction = 0;
			var _sWidth = 0;
			var _speed = 0.15;
			var _k = 1;
			var _duration = 0;
			var _gOffset = _gallery.offset().left;
			var _controlSize = 130;

			_sWidth = 0;
			_slideItems.each(function(){
				_sWidth+=$(this).outerWidth(true);
			});

			var _holderDiv= _slideHolder.parent().parent();
			var _mouseCoords;
			$('body').mousemove(function(e){
				_mouseCoords = e;
				calculateSpeed();
			});

			function calculateSpeed() {
				var _holderOffsetLeft = _holderDiv.offset().left;
				var _holderOffsetTop = _holderDiv.offset().top;
				if(_mouseCoords.pageX > _holderOffsetLeft && _mouseCoords.pageX<_holderOffsetLeft+_hWidth && _mouseCoords.pageY > _holderOffsetTop && _mouseCoords.pageY < _holderOffsetTop+_hHeight){
					var _mX = _mouseCoords.clientX - _holderOffsetLeft;
					var _mY = _mouseCoords.clientY - _holderOffsetTop;

					if(_mX<_controlSize || _mX>_hWidth-_controlSize) {
						var _newSpeed;
						if(_mX < _controlSize) {
							_direction = 1;
							_newSpeed = Math.round((_controlSize-_mX) / 10)/100 * 3;
						} else {
							_direction = 0;
							_newSpeed = Math.abs(Math.round((_hWidth - _controlSize - _mX) / 10)/100) * 3;
						}
						if(_speed != _newSpeed) {
							_speed = _newSpeed;
							gallerySlide(true);
						}
					} else {
						gallerySlide(false);
					}
				} else {
					gallerySlide(false);
				}
			}

			_slider.css({marginLeft:-_sWidth});
			function gallerySlide(_f) {
				if(!_toggleBox.hasClass('open')) return false;
				var _minL = 0;
				var _maxL = _sWidth*3 - _hWidth;

				if(_f) {
					if(_direction) {
						_k = (_maxL - parseInt(_slider.css('marginLeft')))/_maxL - 1;
						_duration = _sWidth / _speed;
						_slider.stop().animate({marginLeft: 0},{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.stop().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();
				}
			}
		} else _slider.removeClass('shifted-position');
	});

	// change gallery big image

    $('a.image-changer').click(function(){
        $('#center-image').attr('src', $(this).attr('href'));
		return false;
	});

}

// global page init
$(window).bind("load", function() {
	initGallery();

});

