/* modificado por Rodrigo Saling e com o original daqui: http://www.markvoss.net/jcarousel/ */

// Copyright (c) 2007 Ganeshji Marwaha (gmarwaha.com)
// Dual licensed under the MIT and GPL licenses:
// http://www.opensource.org/licenses/mit-license.php
// http://www.gnu.org/licenses/gpl.html
(function($) {
	$.fn.jCarouselLite = function(o) {
		o = $.extend({
			btnNext: ".next",
			btnPrev: ".prev",
			btnGo: null,
			mouseWheel: false,
			auto: null,
			speed: 600,
			easing: null,
			vertical: false,
			circular: false,
			visible: 3,
			start: 0,
			scroll: 3,
			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.slice(tl-v-1+1).clone())
		.append(tLi.slice(0,v).clone());
		o.start += v;
	}
	var li = $("li", ul), itemLength = li.size(), curr = o.start;
	if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){
		var ieversion=new Number(RegExp.$1)
	}
	div.css("visibility", "visible");
	li.css({overflow: "hidden", float: o.vertical ? "none" : "left"});
	ul.css({margin: "0", padding: "0", position: "relative", "list-style-type": "none", "z-index": "1"});
	div.css({overflow: "hidden", position: "relative", "z-index": "2", left: "0px"});
	var liSize = o.vertical ? height(li) : width(li);
	var ulSize = liSize * itemLength;
	var divSize = liSize * v;
	
	// descobre a maior altura dos <li> jah que aparentemente a funcao que deveria fazer isso nao funciona
	var heightBiggest = 0;
	for (cont=0; cont<li.length; cont++) {
		if(li[cont].offsetHeight > heightBiggest)
			heightBiggest = li[cont].offsetHeight;
	}
	//li.css({width: li.width(), height: li.height()}); // original
	li.css({width: li.width(), height: heightBiggest}); // v2
	
	ul.css(sizeCss, ulSize+"px").css(animCss, -(curr*liSize)); //original

	if (ieversion<=6) {
		if (li.length == 2)
			ul.css("padding-left","252px");
		else if (li.length == 3)
			ul.css("padding-left","167px");
		else if (li.length == 4)
			ul.css("padding-left","85px");
	}
	else {
		ul.css("margin", "0 auto");
	}

	div.css(sizeCss, divSize+"px");
	if(!o.circular) {
		$(o.btnPrev + ',' + o.btnNext).removeClass("disabled");
		if (o.btnPrev && curr == 0){
			$(o.btnPrev).addClass("disabled");
		}
		if (o.btnNext && curr >= itemLength-v){
			$(o.btnNext).addClass("disabled");
		}
		if (ieversion<=6)
			if (o.btnNext && curr >= itemLength-v-1){
				$(o.btnNext).addClass("disabled");
			}
	}
	
	if(o.btnPrev)
		$(o.btnPrev).click(function() {
			prev = curr-o.scroll;
			if (!o.circular && prev < 0){
				prev = 0;
			}
			return go(prev);
		});
		
	if(o.btnNext)
		$(o.btnNext).click(function() {
			next = curr+o.scroll;
			if (!o.circular && next > itemLength-v-1){
				if (ieversion<=6)
					next = itemLength-v-1;
				else
					next = itemLength-v;
			}
			return go(next);
		});
		
	if(o.btnGo)
		$.each(o.btnGo, function(i, val) {
			$(val).click(function() {
				return go(o.circular ? o.visible+i : i);
			});
		});
			
	if(o.mouseWheel && div.mousewheel)
		div.mousewheel(function(e, d) {
			return d>0 ? go(curr-o.scroll) : go(curr+o.scroll);
		});
	
	if(o.auto)
		setInterval(function() {
			go(curr+o.scroll);
		}, o.auto+o.speed);

function vis() {
	return li.slice(curr).slice(0,v);
};

function go(to) {
	if(!running) {
		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;
			} else if(to>=itemLength-v+1) {
				ul.css(animCss, -( (v) * liSize ) + "px" );
				curr = to==itemLength-v+1 ? v+1 : v+o.scroll;
			} else curr = to;
		} 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("esconder");
			if (o.btnPrev && curr == 0) {
				$(o.btnPrev).addClass("esconder");
			}
			if (o.btnNext && curr >= itemLength-v) {
				$(o.btnNext).addClass("esconder");
			}
			if (ieversion<=6)
				if (o.btnNext && curr >= itemLength-v-1){
					$(o.btnNext).addClass("esconder");
				}
		}
	}
	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');
	};
})($);