$(function(){
	hoverClass();
	initSlideBlock();
	
	var gallery1 = $('#gallery1').gallery({
		duration: 600,
		listOfSlides: '.gallery-content>ul>li',
		autoRotation: 5000
	});
	$('#gallery1').mouseenter(function(){
		gallery1.stop();
	}).mouseleave(function(){
		gallery1.play();
	});
	
	initGalleryThumbs();
})

// add/remove hover class
function hoverClass()
{
	var nav = document.getElementById("nav");
	if (nav)
	{
		var nodes = nav.getElementsByTagName("li");
		for (var i = 0; i < nodes.length; i++)
		{
			nodes[i].onmouseover = function () 
			{
				if (this.className.indexOf("hover") == -1)
				{
					this.className += " hover";
					hideSelectBoxes(this.getElementsByTagName("ul")[0]);
				}
			}
			nodes[i].onmouseout = function ()
			{
				this.className = this.className.replace(" hover", "");
				showSelectBoxes(this.getElementsByTagName("ul")[0]);
			}
		}
	}
}

//hide select boxes
function hideSelectBoxes(object)
{
	if (!object) return;
	if (!object.sboxes)
		object.sboxes = [];
	var ol = getElementX(object);
	var ot = getElementY(object);
	var ow = object.offsetWidth;
	var oh = object.offsetHeight;
	var sboxes = document.all.tags("select");
	for (var i=0; i<sboxes.length; i++)
	{
		var node = sboxes[i].parentNode;
		while (node != object && node.tagName != "BODY")
			node = node.parentNode;
		var skip = (node == object);
		if (skip) continue;
		var t = getElementY(sboxes[i]);
		var l = getElementX(sboxes[i]);
		var w = sboxes[i].offsetWidth;
		var h = sboxes[i].offsetHeight;
		var ver = false;
		if (t > ot && t < (ot + oh))
			ver = true;
		else if ((t + h) > ot && (t + h) < (ot + oh))
			ver = true;
		var hor = false;
		if (l > ol && l < (ol + ow))
			hor = true;
		else if ((l + w) > ol && (l + w) < (ol + ow))
			hor = true;
		else if (l < ol && (l + w) > ol)
			hor = true;
		if (ver && hor && sboxes[i].style.visibility != "hidden")
			object.sboxes[object.sboxes.length] = sboxes[i];
	}
	for (var i=0; i<object.sboxes.length; i++)
		object.sboxes[i].style.visibility = "hidden";
}

function showSelectBoxes(object)
{
	if (!object) return;
	if (!object.sboxes) return;
	for (var i=0; i<object.sboxes.length; i++)
		object.sboxes[i].style.visibility = "";
	object.sboxes = [];
}

function getElementX(object) {return getElementC(object, true)}
function getElementY(object) {return getElementC(object, false)}

function getElementC(element, xAxis)
{
	var initialElement = element;
	var c = 0;

	while (element != null)
	{
		c += (xAxis) ? element.offsetLeft : element.offsetTop;
		if (element.style.position == "absolute")
			break;
		else
			element = element.offsetParent;
	}

	var elementWnd = document.window;
	if (!elementWnd) return c;

	if (!elementWnd.frameElement) return c;

	return c + getElementC(elementWnd.frameElement, xAxis);
}

//slide-block
function initSlideBlock(){
	var _parentSlide = '.slide-box';
	var _linkSlide = 'a.opener';
	var _slideBlock = 'div.slide';
	var _openClassS = 'active';
	var _textOpenS = 'Open block';
	var _textCloseS = 'Close block';
	var _durationSlide = 500;

	$(_parentSlide).each(function(){
		if (!$(this).is('.'+_openClassS)) {
			$(this).find(_slideBlock).css('display','none');
		}
	});
	$(_linkSlide,_parentSlide).click(function(){
		if ($(this).parents(_parentSlide).is('.'+_openClassS)) {
			$(this).parents(_parentSlide).removeClass(_openClassS);
			$(this).parents(_parentSlide).find(_slideBlock).slideUp(_durationSlide);
			$(this).text(_textOpenS);
		} else {
			$(this).parents(_parentSlide).addClass(_openClassS);
			$(this).parents(_parentSlide).find(_slideBlock).slideDown(_durationSlide);
			$(this).text(_textCloseS);
		}
		return false;
	});
}


//sliding gallery
(function($) {
	/* Gallery */
	function Gallery(el, options) {
		this._hold = $(el);
		this.initOptions(options);
		this._timer = options.autoRotation;
		this._t;
		this.initialize();
	}
	
	$.fn.gallery = function(options) {
		return new Gallery(this.get(0), options);
	};
	
	Gallery.prototype = {
		initOptions: function(_obj){
			this.options = {
				randomSlide: false,
				changeHeight: false,
				duration: 700,
				slideElement: 1,
				event: 'click',
				autoRotation: false,
				effect: false,
				listOfSlides: 'ul > li',
				switcher: false,
				disableBtn: false,
				nextBtn: 'a.next-link, a.btn-next, a.next, a.link-next',
				prevBtn: 'a.prev-link, a.btn-prev, a.prev, a.link-prev',
				circle: true,
				direction: false,
				IE: false,
				swicherBuilder: false,
				titleReplace: false
			};
			for(key in _obj) this.options[key] = _obj[key];
		},
		initialize: function(){
			var _this = this;
			var _hold = _this._hold;
			var _speed = _this.options.duration;
			var _timer = _this.options.autoRotation;
			var _el = _hold.find(_this.options.listOfSlides);
			if(_el.length){
				_el.css('display','block');
				if (_this.options.effect){
					_el.css('position','absolute');
					var _list = _el;
				}
				else var _list = _el.parent();
				var _switcher = _hold.find(_this.options.switcher);
				var _next = _hold.find(_this.options.nextBtn);
				var _prev = _hold.find(_this.options.prevBtn);
				var _count = _el.index(_el.filter(':last'));
				var _w = _el.outerWidth(true);
				var _h = _el.outerHeight(true);
				if (_this.options.switcher) var _active = _switcher.index(_switcher.filter('.active:eq(0)'));
				else var _active = _el.index(_el.filter('.active:eq(0)'));
				if (_active < 0) _active = 0;
				var _last = _active;
				if(_this.options.swicherBuilder){
					this._hold.append('<ul class="'+_this.options.swicherBuilder+'" />');
					var _newSwitcher = $('.' + _this.options.swicherBuilder, this._hold);
					
					for (var i = 0; i < _el.length; i++){
						_newSwitcher.append('<li><a href="#">'+ (i+1) +'</a></li>');
						if(i==_active){
							_newSwitcher.find('li').eq(_active).addClass('active');
						}
					};
					
					_switcher = _newSwitcher.find('li');
				}
				if(_this.options.titleReplace){
					var titleReplace = _hold.find(_this.options.titleReplace);
					if(titleReplace.length){
						_el.each(function(i){
							var this_el = $(this);
							var this_title = this_el.attr('title');
							if(this_title.length){
								_el.eq(i).data("title", this_title);
							}else{
								_el.eq(i).data("title", 'No title');
							}
							this_el.removeAttr('title');
						});
						titleReplace.html(_el.eq(_active).data("title"));
					}
				}
				
				// Installation directions
				if (!_this.options.direction) {
					var _wrapHolderW = Math.ceil(_list.parent().width() / _w);
					if (((_wrapHolderW - 1) * _w + _w / 2) > _list.parent().width()) _wrapHolderW--;
				}
				else{
					var _wrapHolderW = Math.ceil(_list.parent().height()/_h);
					if (((_wrapHolderW-1)*_h + _h/2) > _list.parent().height()) _wrapHolderW--;
				}
				
				// Setting "fade" or "slide" effect
				if (!_this.options.effect) var rew = _count - _wrapHolderW + 1;
				else var rew = _count;
				if (!_this.options.effect) {
					if (!_this.options.direction) _list.css({marginLeft: -(_w * _active)})
					else _list.css({marginTop: -(_h * _active)})
				}
				else {
					_list.css({
						opacity: 0
					}).removeClass('active').eq(_active).addClass('active').css({
						opacity: 1
					}).css('opacity', 'auto');
					_switcher.removeClass('active').eq(_active).addClass('active');
					if ($.browser.msie && _this.options.IE){
						_list.css({
							display: 'none'
						});
						_list.eq(_active).css({
							display: 'block'
						});
					}
				}
				
				// Disable or enable buttons "prev next"
				if (_this.options.disableBtn) {
					if (_count < _wrapHolderW) _next.addClass(_this.options.disableBtn);
					_prev.addClass(_this.options.disableBtn);
				}
				
				// Function to "fade"
				if(_this.options.changeHeight){
					if (_this.options.effect){
						_el.parent().css({height: _list.eq(_active).outerHeight(true), overflow: 'hidden'});
					}else{
						if(_this.options.slideElement>1){
							var active_H = _list.children().eq(_active).outerHeight(true);
							for (var i = 1; i < _this.options.slideElement; i++){
								if(active_H<_list.children().eq(_active+i).outerHeight(true)){
									active_H=_list.children().eq(_active+i).outerHeight(true)
								}
							};
							_el.parent().css({height: active_H, overflow: 'hidden'});
						}else _el.parent().css({height: _list.children().eq(_active).outerHeight(true), overflow: 'hidden'});
					}
				}
				function fadeElement(){
					if ($.browser.msie && _this.options.IE){
						_list.eq(_last).css({
							opacity:0,
							display: 'none'
						});
						_list.removeClass('active').eq(_active).addClass('active').css({
							opacity:'auto',
							display: 'block'
						});
					}
					else{
						_list.eq(_last).animate({opacity:0}, {queue:false, duration: _speed});
						_list.removeClass('active').eq(_active).addClass('active').animate({
							opacity:1
						}, {queue:false, duration: _speed, complete: function(){
							$(this).css('opacity','auto');
						}});
					}
					if(_this.options.changeHeight){
						_el.parent().animate({
							height: _list.eq(_active).outerHeight(true)
						}, {queue:false, duration:_speed});
					}
					if (_this.options.switcher) _switcher.removeClass('active').eq(_active).addClass('active');
					_last = _active;
					if(titleReplace){
						titleReplace.html(_el.eq(_active).data("title"));
					}
				}
				// Function for "slide"
				function scrollEl(){
					if (!_this.options.direction) _list.animate({marginLeft: -(_w * _active)}, {queue:false, duration: _speed})
					else _list.animate({marginTop: -(_h * _active)}, {queue:false, duration: _speed})
					if (_this.options.switcher && _this.options.slideElement) _switcher.removeClass('active').eq(_active/_this.options.slideElement).addClass('active');
					else{
						if (_this.options.switcher) _switcher.removeClass('active').eq(_active).addClass('active');
					}
					if(_this.options.changeHeight){
						if(_this.options.slideElement>1){
							var active_H = _list.children().eq(_active).outerHeight(true);
							for (var i = 1; i < _this.options.slideElement; i++){
								if(active_H<_list.children().eq(_active+i).outerHeight(true)){
									active_H=_list.children().eq(_active+i).outerHeight(true)
								}
							};
							_el.parent().animate({
								height: active_H
							}, {queue:false, duration:_speed});
						}else{
							_el.parent().animate({
								height: _list.children().eq(_active).outerHeight(true)
							}, {queue:false, duration:_speed});
						}
					}
					if(titleReplace){
						titleReplace.html(_el.eq(_active).data("title"));
					}
				}
				function toPrepare(){
					if ((_active == rew) && _this.options.circle) _active = -_this.options.slideElement;
					for (var i = 0; i < _this.options.slideElement; i++){
						if(_this.options.randomSlide){
							var pre_active = _active;
							if(_this.options.listOfSlides.length){
								while(pre_active == _active){
									_active = parseInt(Math.random()*(_count+1));
								}
							}
						}else{
							_active++;
						}
						if (_active > rew) {
							_active--;
							if (_this.options.disableBtn &&(_count > _wrapHolderW)) _next.addClass(_this.options.disableBtn);
						}
					}
					if (_active == rew) if (_this.options.disableBtn &&(_count > _wrapHolderW)) _next.addClass(_this.options.disableBtn);
					if (!_this.options.effect) scrollEl();
					else fadeElement();
				}
				if(_this._timer){
					_this._hold.bind('runTimer', function(){
						if(_this._t) clearTimeout(_this._t);
						_this._t = setInterval(function(){
							toPrepare();
						}, _this._timer);
					});
				}
				_next.click(function(){
					if(_this._t) clearTimeout(_this._t);
					if (_this.options.disableBtn &&(_count > _wrapHolderW)) _prev.removeClass(_this.options.disableBtn);
					toPrepare();
					if (_this._timer) _this._hold.trigger('runTimer');
					return false;
				});
				_prev.click(function(){
					if(_this._t) clearTimeout(_this._t);
					if (_this.options.disableBtn &&(_count > _wrapHolderW)) _next.removeClass(_this.options.disableBtn);
					if ((_active == 0) && _this.options.circle) _active = rew + _this.options.slideElement;
					for (var i = 0; i < _this.options.slideElement; i++){
						_active--;
						if (_active < 0) {
							_active++;
							if (_this.options.disableBtn &&(_count > _wrapHolderW)) _prev.addClass(_this.options.disableBtn);
						}
					};
					if (_active == 0) if (_this.options.disableBtn &&(_count > _wrapHolderW)) _prev.addClass(_this.options.disableBtn);
					if (!_this.options.effect) scrollEl();
					else fadeElement();
					if (_this._timer) _this._hold.trigger('runTimer');
					return false;
				});
				if (_this.options.switcher) _switcher.click(function(){
					if (_this.options.event=='click'){
						if (_this.options.slideElement){
							_active = _switcher.index($(this))*_this.options.slideElement;
						}else{
							_active = _switcher.index($(this));
						}
						if(_this._t) clearTimeout(_this._t);
						if (!_this.options.effect) scrollEl();
						else fadeElement();
						if (_this._timer) _this._hold.trigger('runTimer');
					}
					return false;
				}).mouseenter(function(){
					if (_this.options.event=='hover'){
						if (_this.options.slideElement){
							_active = _switcher.index($(this))*_this.options.slideElement;
						}else{
							_active = _switcher.index($(this));
						}
						if(_this._t) clearTimeout(_this._t);
						if (!_this.options.effect) scrollEl();
						else fadeElement();
						if (_this._timer) _this._hold.trigger('runTimer');
					}
				});
				if (_this._timer) _this._hold.trigger('runTimer');
			}
		},
		stop: function(){
			var _this = this;
			if (_this._t) clearTimeout(_this._t);
		},
		play: function(){
			var _this = this;
			if (_this._t) clearTimeout(_this._t);
			if (_this._timer) _this._hold.trigger('runTimer');
		}
	}
}(jQuery));

// init gallery with thumbnails
function initGalleryThumbs(){
	var _activeClass = 'active';
	var _animSpeed = 500;
	$('.custom-gallery').each(function(){
		var _holder = $(this),
			_btnPrev = _holder.find('a.btn-prev'),
			_btnNext = _holder.find('a.btn-next'),
			_slidesHolder = _holder.find('.gallery-content ul'),
			_slidesAreaW = _holder.find('.gallery-content').width(),
			_slideImages = _slidesHolder.find('>li'),
			_slideImageW = _slideImages.width(),
			_thumbsHolder = _holder.find('.thumbnails ul'),
			_thumbsAreaW = _holder.find('.thumbnails>.hold').width(),
			_thumbs = _thumbsHolder.find('>li'),
			_thumbW = _thumbs.eq(0).outerWidth(),
			_thumbSetLength = Math.ceil(_thumbsAreaW / _thumbW),
			_thumbSets = Math.ceil(_thumbs.length / _thumbSetLength),
			_btnThumbsPrev = _holder.find('a.arrow-prev'),
			_btnThumbsNext = _holder.find('a.arrow-next'),
			_numbersTxt = _holder.find('.name'),
			_slideNumTxt = _numbersTxt.find('>.number'),
			_slidesTotalTxt = _numbersTxt.find('>.total'),
			_active = 0,
			_activeThumbSet = 1,
			_lastThumbSetLength = _thumbs.length - (_thumbSets-1) * _thumbSetLength;
		
		//active element reset
		_slideImages.removeClass(_activeClass).eq(0).addClass(_activeClass);
		_thumbs.removeClass(_activeClass).eq(0).addClass(_activeClass);
		_slideNumTxt.text(_active+1);
		_slidesTotalTxt.text(_slideImages.length);
		
		function imageScroll(_nowActive){
			_numbersTxt.hide();
			_slidesHolder.animate({
				'left': -_nowActive * _slidesAreaW
			}, _animSpeed, function(){
				_slideNumTxt.text(_nowActive+1);
				_numbersTxt.fadeIn();
			})
		}
		
		function changeThumbset(){
			var _leftPos;
			if ((_activeThumbSet == _thumbSets)) _leftPos = _thumbW * (_thumbs.length - _thumbSetLength)
				else {
					_leftPos = (_activeThumbSet-1) * _thumbsAreaW
				}
			_thumbsHolder.animate({
				'left': -_leftPos
			}, _animSpeed);
		}
		
		function thumbsScrollBySet(_direction){
			if (_direction == 'next')
				if (_activeThumbSet < _thumbSets) _activeThumbSet++
					else _activeThumbSet = 1
			else if (_direction == 'prev')
				if (_activeThumbSet > 1) _activeThumbSet--
					else _activeThumbSet = _thumbSets
			changeThumbset();
		}
		
		function thumbsScrollToActive(_nowActive){
			_activeThumbSet = Math.ceil((_nowActive + 1)/_thumbSetLength);
			changeThumbset();
		}
		
		_thumbs.click(function(){
			var _thumb = $(this);
			_thumbs.eq(_active).removeClass(_activeClass);
			_active = _thumbs.index(_thumb);
			_thumbs.eq(_active).addClass(_activeClass);
			imageScroll(_active);
			return false;
		})
		
		_btnNext.click(function(){
			_thumbs.eq(_active).removeClass(_activeClass);
			if (_active < _slideImages.length-1) _active++
				else _active = 0;
			_thumbs.eq(_active).addClass(_activeClass);
			imageScroll(_active);
			if (Math.ceil((_active + 1)/_thumbSetLength) != _activeThumbSet) thumbsScrollToActive(_active);
			return false;
		})
		
		_btnPrev.click(function(){
			_thumbs.eq(_active).removeClass(_activeClass);
			if (_active > 0) _active--
				else _active = _slideImages.length-1;
			_thumbs.eq(_active).addClass(_activeClass);
			imageScroll(_active);
			if (Math.ceil((_active + 1)/_thumbSetLength) != _activeThumbSet) thumbsScrollToActive(_active);
			return false;
		})
		
		_btnThumbsPrev.click(function(){
			thumbsScrollBySet('prev');
			return false;
		})
		
		_btnThumbsNext.click(function(){
			thumbsScrollBySet('next');
			return false;
		})
		
	});
}
