(function($) {
	$.fn.jCarouselLite = function(o) {
		o = $.extend( {
			btnPrev : null,
			btnNext : null,
			btnGo : null,
			dotNavigation : null,
			dotSrc : null,
			dotOnSrc : null,
			mouseWheel : false,
			auto : null,
			speed : 200,
			easing : null,
			vertical : false,
			circular : true,
			visible : 3,
			start : 0,
			scroll : 1,
			beforeStart : null,
			afterEnd : null
		}, o || {});
		return this
				.each(function() {
					var running = false, animCss = o.vertical ? "top" : "left", sizeCss = o.vertical ? "height"
							: "width";
					var div = $(this), ul = $("ul", div), tLi = $("li", ul), tl = tLi
							.size(), v = o.visible;
					if (o.circular) {
						ul.prepend(tLi.gt(tl - v - 1).clone()).append(
								tLi.lt(v).clone());
						o.start += v;
					}
					var li = $("li", ul), itemLength = li.size(), curr = o.start;
					div.css("visibility", "visible");
					li.css("overflow", "hidden").css("float",
							o.vertical ? "none" : "left").children().css(
							"overflow", "hidden");
					ul.css("margin", "1").css("padding", "0").css("position",
							"relative").css("list-style-type", "none").css(
							"z-index", "1");
					div.css("overflow", "hidden").css("position", "relative")
							.css("z-index", "1").css("left", "0px");
					var liSize = o.vertical ? height(li) : width(li);
					var ulSize = liSize * itemLength;
					var divSize = liSize * v;
					li.css("width", li.width()).css("height", li.height());
					ul.css(sizeCss, ulSize + "px").css(animCss,
							-(curr * liSize));
					div.css(sizeCss, divSize + "px");
					var carouselInterval;
					if (o.btnPrev)
						$(o.btnPrev).click(function() {
							clearInterval(carouselInterval);
							return go(curr - o.scroll)
						});
					if (o.btnNext)
						$(o.btnNext).click(function() {
							clearInterval(carouselInterval);
							return go(curr + o.scroll)
						});
					if (o.btnGo)
						$.each(o.btnGo, function(i, val) {
							$(val).click(function() {
								return go(o.circular ? o.visible + i : i)
							})
						});
					if (o.dotNavigation)
						$(o.dotNavigation).click(function() {
							$(o.dotNavigation).attr( {
								src : o.dotSrc,
								alt : ""
							});
							$(this).attr( {
								src : o.dotOnSrc,
								alt : ""
							});
							clearInterval(carouselInterval)
						});
					if (o.mouseWheel && div.mousewheel)
						div.mousewheel(function(e, d) {
							return d > 0 ? go(curr - o.scroll) : go(curr
									+ o.scroll)
						});
					if (o.auto)
						if (itemLength - 3 > 0)
							carouselInterval = setInterval(function() {
								go(curr + o.scroll)
							}, o.auto + o.speed);
					function vis() {
						return li.gt(curr - 1).lt(v)
					}
					;
					function go(to) {
						if (!running) {
							var current = "";
							if (o.beforeStart)
								o.beforeStart.call(this, vis());
							if (o.circular) {
								if (to <= o.start - v - 1) {
									ul.css(animCss,
											-((itemLength - (v * 2)) * liSize)
													+ "px");
									curr = to == o.start - v - 1 ? itemLength
											- (v * 2) - 1 : itemLength
											- (v * 2) - o.scroll;
									current = "#" + (curr - o.scroll)
								} else if (to >= itemLength - v + 1) {
									ul.css(animCss, -((v) * liSize) + "px");
									curr = to == itemLength - v + 1 ? v + 1 : v
											+ o.scroll;
									current = "#" + (curr - o.scroll)
								} else {
									curr = to;
									if (to <= o.start - v) {
										current = "#" + (itemLength - 3)
									} else if (to >= itemLength - v) {
										current = "#0"
									} else {
										current = "#" + (curr - o.scroll)
									}
								}
							} else {
								if (to < 0 || to > itemLength - v)
									return;
								else
									curr = to
							}
							running = true;
							ul.animate(animCss == "left" ? {
								left : -(curr * liSize)
							} : {
								top : -(curr * liSize)
							}, o.speed, o.easing, function() {
								if (o.afterEnd)
									o.afterEnd.call(this, vis());
								running = false
							});
							if (!o.circular) {
								$(o.btnPrev + "," + o.btnNext).removeClass(
										"disabled");
								$(
										(curr - o.scroll < 0 && o.btnPrev)
												|| (curr + o.scroll > itemLength
														- v && o.btnNext) || [])
										.addClass("disabled")
							}
							$("#promoNav img").attr( {
								src : o.dotSrc,
								alt : ""
							});
							$(current).attr( {
								src : o.dotOnSrc,
								alt : ""
							})
						}
						return false
					}
				})
	};
	function css(el, prop) {
		return parseInt($.css(el[0], prop)) || 0
	}
	;
	function width(el) {
		return el[0].offsetWidth + css(el, 'marginLeft')
				+ css(el, 'marginRight')
	}
	;
	function height(el) {
		return el[0].offsetHeight + css(el, 'marginTop')
				+ css(el, 'marginBottom')
	}
})(jQuery);