(function($) {
	// plugin definition
	$.fn.carousel = function(options){
		var defaults = {			
			slideBy:        1,
			auto:           false,
			slideSpeed: 	500,
			showSpeed:      1000,
			pause:			2000,
			vertical:		false
			};

		var options = $.extend(defaults, options);

		this.each(function(){
			var object = $(this); 
			var ul = $('.ItemWrapper ul', object);
			var li = $('.ItemWrapper ul li', object);
			var nextlink = $('.nextLink', object);
			var prevlink = $('.prevLink', object);
			var offset = 0;
			var nextlinkflag = 0;
			var prevlinkflag = 0;
			var flagAnimate = 1;
			
			var liWidth = parseInt(li.css('width')) + parseInt(li.css('margin-left')) + parseInt(li.css('margin-right')) + parseInt(li.css('padding-left')) + parseInt(li.css('padding-right'));
			var liHeight = parseInt(li.css('height')) + parseInt(li.css('margin-top')) + parseInt(li.css('margin-bottom')) + parseInt(li.css('padding-top')) + parseInt(li.css('padding-bottom'));
			
			if(!options.vertical) {var offsetStep = liWidth * options.slideBy;} 
			else {var offsetStep = liHeight * options.slideBy;}
			
			function prevlinkControl(){
				if(!options.vertical) {
					if (parseInt(ul.css('left')) == 0) {prevlink.addClass('disabled'); prevlinkflag = 0;} 
					else {prevlink.removeClass('disabled'); prevlinkflag = 1;}
				} else {
					if (parseInt(ul.css('top')) == 0) {prevlink.addClass('disabled'); prevlinkflag = 0;} 
					else {prevlink.removeClass('disabled'); prevlinkflag = 1;}
				}	
			}
			
			function nextlinkControl(){
				if(!options.vertical) {
					if (parseInt(ul.css('left')) + ul.width() <= liWidth * options.slideBy ) {nextlink.addClass('disabled'); nextlinkflag = 0;} 
					else {nextlink.removeClass('disabled'); nextlinkflag = 1;}
				} else {
					if (parseInt(ul.css('top')) + ul.height() <= liHeight * options.slideBy ) {nextlink.addClass('disabled'); nextlinkflag = 0;} 
					else {nextlink.removeClass('disabled'); nextlinkflag = 1;}
				}
			}
			
			function adjust(){
				prevlinkControl();
				nextlinkControl();
				flagAnimate = 1;
			}

			function animate(direction){
				flagAnimate = 0;
				switch(direction){
					case "next":
						if (nextlinkflag == 1) {
							if(!options.vertical) {
								offset = parseInt(ul.css('left')) - offsetStep;
							} else {
								offset = parseInt(ul.css('top')) - offsetStep;
							}
						}
						break; 
					case "prev":
						if (prevlinkflag == 1) {
							if(!options.vertical) {
								offset = parseInt(ul.css('left')) + offsetStep;
							} else {
								offset = parseInt(ul.css('top')) + offsetStep;
							}
						}
						break; 
					default:
						offset = 0;
						break; 
				};
				
				if(!options.vertical) {ul.animate({left: offset}, options.slideSpeed, adjust);} 
				else {ul.animate({top: offset}, options.slideSpeed, adjust);}
	
			}

			// Init
			if (li.length > options.slideBy){
					ul.css('width',(li.length * liWidth));
					prevlink.addClass('disabled');
					nextlinkflag = 1;

					nextlink.click(function() {if(flagAnimate == 1){animate("next");}});
					prevlink.click(function() {if(flagAnimate == 1){animate("prev");}});
				}
		
		});
	};	
})(jQuery);


// $wrapper.filter(':not(:animated)').animate({    })


