/*	************* 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 : 500,		step: false,		circleSlide: true,		disableClass: 'disable',		funcOnclick: null,		autoSlide:3500,		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});			};		});	});}
