jQuery.fn.carousel = function(previous, next, options){
	var sliderList = jQuery(this).children()[0];
	
	if (sliderList) {
		var carousel = jQuery(this);
		var carouselOuterWidth = parseInt(jQuery(this).outerWidth(true));
		var elmnts = jQuery(sliderList).children();
		var numElmts = elmnts.length;
		var sizeFirstElmnt = jQuery(elmnts[0]).outerWidth(true);
		var sizeLastElmnt = jQuery(elmnts[numElmts - 1]).outerWidth(true);
		var isAnimating = false;
		var sliderListWidth = 0;
		var slideRightPX = 0;
		var slideLeftPX = 0;
		var nextElemIndex = 1;
		var prevElemIndex = numElmts;
		var nextElemWidth = sizeFirstElmnt;
		var prevElemWidth = sizeLastElmnt;

		jQuery(elmnts).each(function(index) {
			sliderListWidth = parseInt(sliderListWidth) + parseInt(jQuery(this).outerWidth(true));
			jQuery(this).show();
		});

		if (sliderListWidth > carouselOuterWidth) {
			jQuery(elmnts).each(function(index) {
				jQuery(sliderList).append(jQuery(this).clone());
				jQuery(sliderList).css('width', (sliderListWidth*2) + "px");
			});
		}

		jQuery(previous).click(function(event) {
			slideRightPX = prevElemWidth;
			if (prevElemIndex == numElmts) {
				jQuery(sliderList).css('left', "-" + sliderListWidth + "px");
			}
			jQuery(sliderList).animate({
				left: "+=" + slideRightPX,
				y: 0,
				queue: false
			}, "swing", function() {
				nextElemIndex = prevElemIndex;
				nextElemWidth = prevElemWidth;
				if (prevElemIndex <= 1) {
					prevElemIndex = numElmts;
					prevElemWidth = sizeLastElmnt;
				}
				else {
					prevElemIndex--;
					prevElemWidth = jQuery(elmnts[prevElemIndex-1]).outerWidth(true);;
				}
			});
		});

		jQuery(next).click(function(event) {
			slideLeftPX = nextElemWidth;
			jQuery(sliderList).animate({
				left: "-=" + slideLeftPX,
				y: 0,
				queue: false
			}, "swing", function() {
				if (prevElemIndex < 1) {
					prevElemIndex = numElmts;
					prevElemWidth = sizeLastElmnt;
				}
				else {
					prevElemIndex = nextElemIndex;
					prevElemWidth = nextElemWidth;
				}
				if (nextElemIndex >= numElmts) {
					nextElemIndex = 1;
					nextElemWidth = sizeFirstElmnt;
				}
				else {
					nextElemIndex++;
					nextElemWidth = jQuery(elmnts[nextElemIndex-1]).outerWidth(true);
				}
				if (nextElemIndex == 1) {
					jQuery(sliderList).css("left", "0px");
				}
			});				
		});
	}
};
