jQuery.fn.galleryScroll = function (s) {
	var s = 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
	},
	s);
	return this.each(function () {
		var h = jQuery(this);
		var i = jQuery(s.holderList, h).width();
		var j = jQuery(s.scrollEl, h).outerWidth(true);
		var k = jQuery(s.scrollEl, h).length * j;
		var l = -s.innerMargin;
		var f = 0;
		var m = 0;
		var n = s.autoSlide;
		var o = null;
		if (!s.step) m = i;
		else m = s.step * j;
		if (s.stepWidth) m = s.stepWidth;
		if (!s.circleSlide) {
			if (s.innerMargin == l) jQuery(s.btPrev, h).addClass(s.disableClass)
		}
		if (s.slideNum && !s.step) {
			var p = 0;
			var q = 0;
			while (q < k) {
				q = q + i;
				if (q > k) {
					p = q - k
				}
			}
		}
		if (n) {
			o = setTimeout(function () {
				autoSlide(n)
			},
			n);
			jQuery(s.scrollElParent, h).hover(function () {
				clearTimeout(o)
			},
			function () {
				o = setTimeout(function () {
					autoSlide(n)
				},
				n)
			})
		}
		jQuery(s.btNext, h).bind('click', function () {
			jQuery(s.btPrev, h).removeClass(s.disableClass);
			if (!s.circleSlide) {
				if (l + m > k - i - s.innerMargin) {
					if (l != k - i - s.innerMargin) {
						l = k - i + s.innerMargin;
						jQuery(s.btNext, h).addClass(s.disableClass);
						r = 0
					}
				} else {
					l = l + m;
					if (l == k - i - s.innerMargin) {
						jQuery(s.btNext, h).addClass(s.disableClass);
						r = 0
					}
				}
			} else {
				if (l + m > k - i + s.innerMargin) {
					if (l != k - i + s.innerMargin) {
						l = k - i + s.innerMargin
					} else {
						r = 1;
						l = -s.innerMargin
					}
				} else {
					l = l + m;
					r = 0
				}
			}
			jQuery(s.scrollElParent, h).animate({
				marginLeft: -l + "px"
			},
			{
				queue: false,
				duration: s.duration
			});
			if (o) {
				clearTimeout(o);
				o = setTimeout(function () {
					autoSlide(s.autoSlide)
				},
				s.autoSlide)
			}
			if (s.slideNum && !s.step) jQuery.fn.galleryScroll.numListActive(l, s.slideNum, i, p);
			if (jQuery.isFunction(s.funcOnclick)) {
				s.funcOnclick.apply(h)
			}
			return false
		});
		var r = 1;
		jQuery(s.btPrev, h).bind('click', function () {
			jQuery(s.btNext, h).removeClass(s.disableClass);
			if (l - m >= -m - s.innerMargin && l - m <= -s.innerMargin) {
				if (r != 1) {
					l = -s.innerMargin;
					r = 1
				} else {
					if (s.circleSlide) {
						l = k - i + s.innerMargin;
						f = 1;
						r = 0
					} else {
						l = -s.innerMargin
					}
				}
			} else if (l - m < -m + s.innerMargin) {
				l = l - m;
				f = 0
			} else {
				l = l - m;
				f = 0
			};
			if (!s.circleSlide && l == s.innerMargin) {
				jQuery(this).addClass(s.disableClass);
				r = 0
			}
			if (!s.circleSlide && l == -s.innerMargin) jQuery(this).addClass(s.disableClass);
			jQuery(s.scrollElParent, h).animate({
				marginLeft: -l + "px"
			},
			{
				queue: false,
				duration: s.duration
			});
			if (s.slideNum && !s.step) jQuery.fn.galleryScroll.numListActive(l, s.slideNum, i, p);
			if (o) {
				clearTimeout(o);
				o = setTimeout(function () {
					autoSlide(s.autoSlide)
				},
				s.autoSlide)
			}
			if (jQuery.isFunction(s.funcOnclick)) {
				s.funcOnclick.apply(h)
			}
			return false
		});
		if (k <= i) {
			jQuery(s.btPrev, h).addClass(s.disableClass).unbind('click');
			jQuery(s.btNext, h).addClass(s.disableClass).unbind('click')
		}
		function autoSlide(a) {
			if (k - m <= l + m - s.innerMargin) {
				if (f == 0) {
					l = k - i + s.innerMargin;
					f = 1;
					r = 0;
					if (!s.circleSlide) btPrev.addClass(s.disableClass)
				} else {
					if (s.circleSlide) l = s.innerMargin;
					f = 0;
					r = 0
				}
			} else l = l + m;
			jQuery(s.scrollElParent, h).animate({
				marginLeft: -l + "px"
			},
			{
				queue: false,
				duration: s.duration
			});
			o = setTimeout(function () {
				autoSlide(s.autoSlide)
			},
			s.autoSlide);
			jQuery.fn.galleryScroll.numListActive(l, s.slideNum, i, p)
		};
		/*
		jQuery.fn.galleryScroll.numListCreate = function (a, b, c, d) {
			var e = '';
			var f = 1;
			var g = b + d;
			while (g > 0) {
				e += '<li><a href="">' + f + '</a></li>';
				f++;
				g = g - c
			}
			jQuery(a).html('<ul>' + e + '</ul>')
		};
		*/
		jQuery.fn.galleryScroll.numListActive = function (a, b, c, d) {
			if (b) {
				jQuery('a', b).removeClass('active');
				var e = c - d - 1;
				var f = 0;
				if (a != 0) {
					while (a > e) {
						e = (f * c) - d - 1 + s.innerMargin;
						f++
					}
				}
				var g = (e + d + 1 + s.innerMargin) / c - 1;
				jQuery('a', b).eq(g).addClass('active')
			}
		};
		if (s.slideNum && !s.step) {
			/*jQuery.fn.galleryScroll.numListCreate(s.slideNum, k, i, p);*/
			jQuery.fn.galleryScroll.numListActive(l, s.slideNum, i, p);
			numClick()
		};
		function numClick() {
			jQuery('a', s.slideNum).click(function () {
				jQuery(s.btPrev, h).removeClass(s.disableClass);
				jQuery(s.btNext, h).removeClass(s.disableClass);
				var a = jQuery('a', s.slideNum).index(jQuery(this));
				l = (m * a) - s.innerMargin;
				f = 0;
				r = 0;
				if (a == 0) r = 1;
				if (l + m > k) {
					l = l - (l - k) - m + s.innerMargin;
					if (!s.circleSlide) jQuery(s.btNext, h).addClass(s.disableClass)
				}
				jQuery(s.scrollElParent, h).animate({
					marginLeft: -l + "px"
				},
				{
					queue: false,
					duration: s.duration
				});
				if (!s.circleSlide && l == 0) jQuery(s.btPrev, h).addClass(s.disableClass);
				jQuery.fn.galleryScroll.numListActive(l, s.slideNum, i, p);
				if (o) {
					clearTimeout(o);
					o = setTimeout(function () {
						autoSlide(s.autoSlide)
					},
					s.autoSlide)
				}
				return false
			})
		};
		jQuery(window).resize(function () {
			i = jQuery(s.holderList, h).width();
			j = jQuery(s.scrollEl, h).outerWidth(true);
			k = jQuery(s.scrollEl, h).length * j;
			if (!s.step) m = i;
			else m = s.step * j;
			if (s.slideNum && !s.step) {
				var a = 0;
				var b = 0;
				while (b < k) {
					b = b + i;
					if (b > k) {
						a = b - k
					}
				};
				/*jQuery.fn.galleryScroll.numListCreate(s.slideNum, k, i, a);*/
				jQuery.fn.galleryScroll.numListActive(l, s.slideNum, i, a);
				numClick()
			};
			jQuery(s.btPrev, h).removeClass(s.disableClass);
			jQuery(s.btNext, h).removeClass(s.disableClass);
			if (l == s.innerMargin) jQuery(this).addClass(s.disableClass);
			if (k - i < l - s.innerMargin) {
				if (!s.circleSlide) jQuery(s.btNext, h).addClass(s.disableClass);
				jQuery(s.scrollElParent, h).animate({
					marginLeft: -(k - i + s.innerMargin) + "px"
				},
				{
					queue: false,
					duration: s.duration
				})
			}
		})
	})
}
