jQuery.fn.slideShow = function(_options){
	// defaults options	
	var _options = jQuery.extend({
		slideEl:'div.block',
		linkNext:'a.next',
		linkPrev:'a.prev',
		linkPause:'a.pause',
		numElementLink:'div.menu-box li a',
		duration:700,
		autoSlideShow:true,
		switchTime:5000,
		event:'click',
		currentEl:'#footer span.cur',
		allEl:'#footer span.all'
    },_options);

    return this.each(function(){
	    var _THIS = jQuery(this);
		var _linkNext = false, _linkPrev = false, _linkPause = false, _numElementLink = false, _numElement = false;
		var _slideEl = $(_options.slideEl, _THIS);
		var _elTagName = _options.slideEl;
		if (_options.linkNext)
			var _linkNext = $(_options.linkNext, _THIS).length ? $(_options.linkNext, _THIS) : false;
		if (_options.linkPrev)
			var _linkPrev = $(_options.linkPrev, _THIS).length ? $(_options.linkPrev, _THIS) : false;
		if (_options.linkPause)
			var _linkPause = $(_options.linkPause, _THIS).length ? $(_options.linkPause, _THIS) : false;
		if (_options.numElementLink) {
			var _numElementLink = $(_options.numElementLink, _THIS).length ? $(_options.numElementLink, _THIS) : false;
			var _numElement = $(_options.numElementLink, _THIS).length ? _numElementLink.parent() : false;
		}
		var _duration = _options.duration;
		var _switchTime = _options.switchTime;
		var _numElActive, _n, _timer = false, _hover = false;
		
		if (!_slideEl.filter('.active').length)
				_slideEl.eq(0).addClass('active');
				
		$(_slideEl).not(".active").css('display','none');
		
		if ($(_numElement).length) {activeNumEl()}
		
		if (_options.autoSlideShow) {
				_timer = setTimeout(function(){nextEl()},_switchTime);
				contentHover();
		}
		if (_linkNext) {
				$(_linkNext).click(function(){
						if (_timer) {
								clearTimeout(_timer);
								_timer = setTimeout(function(){nextEl()},_switchTime);
						}
						if ($(_slideEl).filter(".active").next().is(_elTagName)) {
							$(_slideEl).filter(".active").next().addClass("next");
						} else {
							$(_slideEl).eq(0).addClass("next");
						}
						fadeElement();
						activeNumEl();
						return false;
				});
		}
		if (_linkPrev) {	
				$(_linkPrev).click(function(){
						if (_timer) {
								clearTimeout(_timer);
								_timer = setTimeout(function(){nextEl()},_switchTime);
						}
						if ($(_slideEl).filter(".active").prev().is(_elTagName)) {
							$(_slideEl).filter(".active").prev().addClass("next");
						} else {
							$(_slideEl).filter(":last-child").addClass("next");
						}
						fadeElement();
						activeNumEl();
						return false;
				});
		}
		if (_linkPause) {
				if (!_options.autoSlideShow) {
					_linkPause.addClass('play');
					_options.autoSlideShow = true;
					if (!_hover) contentHover();
				}
				$(_linkPause).click(function(){
						if (!_linkPause.is('.play')) {
							clearTimeout(_timer);
							_linkPause.addClass('play');
						} else {
							_linkPause.removeClass('play');
							_timer = setTimeout(function(){nextEl()},_switchTime);
						}
						return false;
				});
		}
		if (_numElementLink) {
				$(_numElementLink).bind(_options.event, function(){
						if (_timer) {
								clearTimeout(_timer);
								_timer = setTimeout(function(){nextEl()},_switchTime);
						}
						_n = _numElement.index($(this).parent());
						if (!$(_slideEl).eq(_n).hasClass("active")){
							$(_slideEl).eq(_n).addClass("next");
							fadeElement();
							activeNumEl();
						}
						return false;
				});
		}
		if (_options.currentEl || _options.allEl) {
				_THIS.all = _slideEl.length;
				$(_options.allEl, _THIS).html(_THIS.all);
				function currentNum() {
					var _index = _slideEl.index(_slideEl.filter('.active')) + 1;
					$(_options.currentEl, _THIS).html(_index);
				}
				currentNum();
		}
		function contentHover() {
			_hover = true;
			_slideEl.hover(function() {
				if (_timer) clearTimeout(_timer);
			}, function(){
					if (_linkPause && !_linkPause.is('.play'))
						_timer = setTimeout(function(){nextEl()},_switchTime);
					else if (!_linkPause)
						_timer = setTimeout(function(){nextEl()},_switchTime);
			});			
		}
		function nextEl(){
				if (_timer) clearTimeout(_timer);
				if ($(_slideEl).filter(".active").next().is(_elTagName)){
					$(_slideEl).filter(".active").next().addClass("next");
				} else { 
					$(_slideEl).eq(0).addClass("next");
				}
				fadeElement();
				activeNumEl();
				_timer = setTimeout(function(){nextEl()},_switchTime);
		};		
		function activeNumEl() {
				$(_numElement).removeClass("active");
				_numElActive = $(_slideEl).index($(_slideEl).filter(".active")[0]);
				$(_numElement).eq(_numElActive).addClass("active");
		};
		function fadeElement(){
				$(_slideEl).filter(".active").fadeOut(_duration).removeClass("active");
				$(_slideEl).filter(".next").fadeIn(_duration).addClass("active").removeClass("next");
				if (_options.currentEl || _options.allEl) currentNum();
		};
    });
}


/*
	************* OPTIONS ************************************** default ****************
	btPrev         - link for previos [selector]    	btPrev: 'a.link-prev'
	btNext         - link for next [selector]		btNext: 'a.link-next'
	holderList     - image list holder [Tag name]		holderList: 'div'
	scrollElParent - list [Tag name]			scrollElParent: 'ul'
	scrollEl       - list element [Tag name]		scrollEl: 'li'
	slideNum       - view slide numbers [boolean]		slideNum: false
	duration       - duration slide [1000 - 1sec]		duration : 1000
	step           - slide step [int]			step: false
	circleSlide    - slide circle [boolean]			circleSlide: true
	disableClass   - class for disable link	[string] 	disableClass: 'disable'
	funcOnclick    - callback function			funcOnclick: null
	innerMargin    - inner margin, use width step [px]      innerMargin:0
	autoSlide      - auto slide [1000 - 1sec]               autoSlide:false
	*************************************************************************************
*/

jQuery.fn.galleryScroll = function(_options){
	// defaults options	
	var _options = jQuery.extend({
		btPrev: 'a.link-prev',
		btNext: 'a.link-next',
		holderList: 'div',
		scrollElParent: 'ul',
		scrollEl: 'li',
		slideNum: false,
		duration : 1000,
		step: false,
		circleSlide: true,
		disableClass: 'disable',
		funcOnclick: null,
		autoSlide:false,
		innerMargin:0,
		stepWidth:false
	},_options);

	return this.each(function(){
		var _this = jQuery(this);

		var _gWidth = jQuery(_options.holderList,_this).width();
		var _liWidth = jQuery(_options.scrollEl,_this).outerWidth(true);
		var _liSum = jQuery(_options.scrollEl,_this).length * _liWidth;
		var _margin = -_options.innerMargin;
		var f = 0;
		var _step = 0;
		var _autoSlide = _options.autoSlide;
		var _timerSlide = null;
		if (!_options.step) _step = _gWidth; else _step = _options.step*_liWidth;
		if (_options.stepWidth) _step = _options.stepWidth;
		
		if (!_options.circleSlide) {
			if (_options.innerMargin == _margin)
				jQuery(_options.btPrev,_this).addClass(_options.disableClass);
		}
		if (_options.slideNum && !_options.step) {
			var _lastSection = 0;
			var _sectionWidth = 0;
			while(_sectionWidth < _liSum)
			{
				_sectionWidth = _sectionWidth + _gWidth;
				if(_sectionWidth > _liSum) {
					_lastSection = _sectionWidth - _liSum;
				}
			}
		}
		if (_autoSlide) {
				_timerSlide = setTimeout(function(){
					autoSlide(_autoSlide);
				}, _autoSlide);
			jQuery(_options.scrollElParent,_this).hover(function(){
				clearTimeout(_timerSlide);
			}, function(){
				_timerSlide = setTimeout(function(){
					autoSlide(_autoSlide)
				}, _autoSlide);
			});
		}
	
		// click button 'Next'
		jQuery(_options.btNext,_this).bind('click',function(){
			jQuery(_options.btPrev,_this).removeClass(_options.disableClass);
			if (!_options.circleSlide) {
				if (_margin + _step  > _liSum - _gWidth - _options.innerMargin) {
					if (_margin != _liSum - _gWidth - _options.innerMargin) {
						_margin = _liSum - _gWidth  + _options.innerMargin;
						jQuery(_options.btNext,_this).addClass(_options.disableClass);
						_f2 = 0;
					} 
				} else {
					_margin = _margin + _step;
					if (_margin == _liSum - _gWidth - _options.innerMargin) {
						jQuery(_options.btNext,_this).addClass(_options.disableClass);_f2 = 0;
					}
				}
			} else {
				if (_margin + _step  > _liSum - _gWidth + _options.innerMargin) {
					if (_margin != _liSum - _gWidth + _options.innerMargin) {
						_margin = _liSum - _gWidth  + _options.innerMargin;
					} else {
						_f2 = 1;
						_margin = -_options.innerMargin;
					}
				} else {
					_margin = _margin + _step;
					_f2 = 0;
				}
			}
			jQuery(_options.scrollElParent,_this).animate({marginLeft: -_margin+"px"}, {queue:false,duration: _options.duration });

			if (_timerSlide) {
				clearTimeout(_timerSlide);
				_timerSlide = setTimeout(function(){
					autoSlide(_options.autoSlide)
				}, _options.autoSlide);
			}

			if (_options.slideNum && !_options.step) jQuery.fn.galleryScroll.numListActive(_margin,jQuery(_options.slideNum, _this),_gWidth,_lastSection);
			if (jQuery.isFunction(_options.funcOnclick)) {
				_options.funcOnclick.apply(_this);
			}
			return false;
		});
		// click button 'Prev'
		var _f2 = 1;
		jQuery(_options.btPrev, _this).bind('click',function(){
			jQuery(_options.btNext,_this).removeClass(_options.disableClass);
			if (_margin - _step >= -_step - _options.innerMargin && _margin - _step <= -_options.innerMargin) {
				if (_f2 != 1) {
					_margin = -_options.innerMargin;
					_f2 = 1;
				} else {
					if (_options.circleSlide) {
						_margin = _liSum - _gWidth  + _options.innerMargin;
						f=1;_f2=0;
					} else {
						_margin = -_options.innerMargin
					}
				}
			} else if (_margin - _step < -_step + _options.innerMargin) {
				_margin = _margin - _step;
				f=0;
			}
			else {_margin = _margin - _step;f=0;};

			if (!_options.circleSlide && _margin == _options.innerMargin) {
				jQuery(this).addClass(_options.disableClass);
				_f2=0;
			}

			if (!_options.circleSlide && _margin == -_options.innerMargin) jQuery(this).addClass(_options.disableClass);
			jQuery(_options.scrollElParent,_this).animate({marginLeft: -_margin + "px"}, {queue:false, duration: _options.duration});

			if (_options.slideNum && !_options.step) jQuery.fn.galleryScroll.numListActive(_margin,jQuery(_options.slideNum, _this),_gWidth,_lastSection);

			if (_timerSlide) {
				clearTimeout(_timerSlide);
				_timerSlide = setTimeout(function(){
					autoSlide(_options.autoSlide)
				}, _options.autoSlide);
			}

			if (jQuery.isFunction(_options.funcOnclick)) {
				_options.funcOnclick.apply(_this);
			}
			return false;
		});

		if (_liSum <= _gWidth) {
			jQuery(_options.btPrev,_this).addClass(_options.disableClass).unbind('click');
			jQuery(_options.btNext,_this).addClass(_options.disableClass).unbind('click');
		}
		// auto slide
		function autoSlide(autoSlideDuration){
			//if (_options.circleSlide) {
				if (_liSum - _step  <= _margin + _step - _options.innerMargin) {
					if (f == 0) {
						_margin = _liSum - _gWidth  + _options.innerMargin;
						f = 1;_f2=0;
						if (!_options.circleSlide)
							jQuery(_options.btPrev, _this).addClass(_options.disableClass);
					}
					else {
						if (_options.circleSlide)
							_margin = _options.innerMargin;
						f=0;_f2=0;
					}
				} else _margin = _margin + _step;

				jQuery(_options.scrollElParent,_this).animate({marginLeft: -_margin+"px"}, {queue:false,duration: _options.duration });

				_timerSlide = setTimeout(function(){
					autoSlide(_options.autoSlide)
				}, _options.autoSlide);
				jQuery.fn.galleryScroll.numListActive(_margin, jQuery(_options.slideNum, _this),_gWidth,_lastSection);
			//}
		};
		// Number list
		jQuery.fn.galleryScroll.numListCreate = function(_elNumList, _liSumWidth, _width, _section){
			var _numListElC = '';
			var _num = 1;
			var _difference = _liSumWidth + _section;
			while(_difference > 0)
			{
				_numListElC += '<li><a href="">'+_num+'</a></li>';
				_num++;
				_difference = _difference - _width;
			}
			jQuery(_elNumList).html('<ul>'+_numListElC+'</ul>');
		};
		jQuery.fn.galleryScroll.numListActive = function(_marginEl, _slideNum, _width, _section){
			if (_slideNum) {
				jQuery('a',_slideNum).removeClass('active');
				var _activeRange = _width - _section-1;
				var _n = 0;
				if (_marginEl != 0) {
					while (_marginEl > _activeRange) {
						_activeRange = (_n * _width) -_section-1 + _options.innerMargin;
						_n++;
					}
				}
				var _a  = (_activeRange+_section+1 + _options.innerMargin)/_width - 1;
				jQuery('a',_slideNum).eq(_a).addClass('active');
			}
		};
		if (_options.slideNum && !_options.step) {
			jQuery.fn.galleryScroll.numListCreate(jQuery(_options.slideNum, _this), _liSum, _gWidth,_lastSection);
			jQuery.fn.galleryScroll.numListActive(_margin, jQuery(_options.slideNum, _this),_gWidth,_lastSection);
			numClick();
		};
		function numClick() {
			jQuery(_options.slideNum, _this).find('a').click(function(){
				jQuery(_options.btPrev,_this).removeClass(_options.disableClass);
				jQuery(_options.btNext,_this).removeClass(_options.disableClass);

				var _indexNum = jQuery(_options.slideNum, _this).find('a').index(jQuery(this));
				_margin = (_step*_indexNum) - _options.innerMargin;
				f=0; _f2=0;
				if (_indexNum == 0) _f2=1;
				if (_margin + _step > _liSum) {
					_margin = _margin - (_margin - _liSum) - _step + _options.innerMargin;
					if (!_options.circleSlide) jQuery(_options.btNext, _this).addClass(_options.disableClass);
				}
				jQuery(_options.scrollElParent,_this).animate({marginLeft: -_margin + "px"}, {queue:false, duration: _options.duration});

				if (!_options.circleSlide && _margin==0) jQuery(_options.btPrev,_this).addClass(_options.disableClass);
				jQuery.fn.galleryScroll.numListActive(_margin, jQuery(_options.slideNum, _this),_gWidth,_lastSection);

				if (_timerSlide) {
					clearTimeout(_timerSlide);
					_timerSlide = setTimeout(function(){
						autoSlide(_options.autoSlide)
					}, _options.autoSlide);
				}
				return false;
			});
		};
		jQuery(window).resize(function(){
			_gWidth = jQuery(_options.holderList,_this).width();
			_liWidth = jQuery(_options.scrollEl,_this).outerWidth(true);
			_liSum = jQuery(_options.scrollEl,_this).length * _liWidth;
			if (!_options.step) _step = _gWidth; else _step = _options.step*_liWidth;
			if (_options.slideNum && !_options.step) {
				var _lastSection = 0;
				var _sectionWidth = 0;
				while(_sectionWidth < _liSum)
				{
					_sectionWidth = _sectionWidth + _gWidth;
					if(_sectionWidth > _liSum) {
						_lastSection = _sectionWidth - _liSum;
					}
				};
				jQuery.fn.galleryScroll.numListCreate(jQuery(_options.slideNum, _this), _liSum, _gWidth,_lastSection);
				jQuery.fn.galleryScroll.numListActive(_margin, jQuery(_options.slideNum, _this),_gWidth,_lastSection);
				numClick();
			};
			if (_margin == _options.innerMargin) jQuery(this).addClass(_options.disableClass);
			if (_liSum - _gWidth  < _margin - _options.innerMargin) {
				if (!_options.circleSlide) jQuery(_options.btNext, _this).addClass(_options.disableClass);
				jQuery(_options.scrollElParent,_this).animate({marginLeft: -(_liSum - _gWidth + _options.innerMargin) + "px"}, {queue:false, duration: _options.duration});
			};
		});
	});
}

$(document).ready(function(){

	// home scroller
	$('div.gallery').slideShow({
		slideEl:'ul.gallery-content li',
		numElementLink:'div.gal-nav li a',
		duration:700,
		autoSlideShow:true,
		switchTime:5000
	});

	$('div.slidegallary').slideShow({
		slideEl:'ul.gallery-picture li',
		numElementLink:'div.thumb-hold li a',
		duration:700,
		autoSlideShow:false,
		switchTime:5000,
		linkNext:'a.arrow-next',
		linkPrev:'a.arrow-prev',
		currentEl: 'span.current-img',
		allEl: 'span.all-img'

	});

	$('div.thumb').galleryScroll({
		btPrev: 'a.arrow1-prev',
		btNext: 'a.arrow1-next',
		holderList: 'div.thumb-hold',
		scrollElParent: 'ul.thumb-list',
		scrollEl: 'ul.thumb-list li',
		slideNum: false,
		duration : 1250,
		step: false,
		circleSlide: true,
		funcOnclick: null
	});
	
});