	$.fn.iwcarousel = function(opts) {
		var defaults = {
			instance : this,
			items : false,
			next : false,
			prev : false,
			auto : false,
			speed : 500,
			loop : true,
			direction : 'h',
			transition : 'slide',
			scrollLength : false,
			beforeScroll : false,
			afterScroll : false,
			indicators : false,
			timerObject : false
		}; 
		
		var carousel = this;
		var setwidth = 0;
		var setheight = 0;
		var preScroll = 0;
		var options = $.extend(defaults, opts);

	//---------------------------------------------------
		
		this.each(function(e){
			$(options.prev).hide();
			$(options.next).hide();
		
			if(carousel.find(options.items).length < 1){
				return false;
			}else if(carousel.find(options.items).length < 2){
				$(options.items).css('visibility', 'visible');
				carousel.find(options.items).show();
				$(options.next).remove();
				$(options.prev).remove();
				return false;
			}
			
			carousel.find(options.items).hide();
			carousel.prepend('<img src="/images/ajaxflower.gif" alt="loading..." />');
			
			setItems();
			
			$(options.prev).show();
			$(options.next).show();
			
			if(!options.loop){
				$(options.prev).addClass('disabled');
			}
			
			carousel.find('td:first').addClass('first');
			carousel.find('td:last').addClass('last');
			
			if(options.direction == 'h'){ 
				carousel.find(options.items).show();
				setwidth = carousel.find('table:first').width() / 3;
				
				if(options.loop){
					preScroll = setwidth;	
				}
				
				carousel.animate({scrollLeft: preScroll}, 0, function(){
					
				});
			}else{
				carousel.find(options.items).show();
				
				setheight = carousel.find('table:first').height() / 3;
				if(options.loop){
					preScroll = setheight;	
				}
				
				carousel.animate({scrollTop: preScroll}, 0, function(){
					//corners(8,8,8,8,'.iw_modularea_206 .iw_modulcontent_inner');
				});
			}
			
			if(options.auto){
				setTimeout(function(){
					options.auto += options.speed;
					carousel.addClass('iwCarouselAutoScroll');
					AutoScroll(carousel);
				}, 2000);
			}
			
			//$(this).parents('.iw_modulcontent_inner').curvycorners({tr:8, tl:8, bl:8, br:8 });
			
			
			//setIndicators();
			
		});

	//---------------------------------------------------
	
		function setItems(){
			carousel.addClass('iwCarousel').css('overflow', 'hidden').css('position', 'relative');
			var table = $('<table border="0" cellpadding="0" cellspacing="0"></table>');
				
			if(options.direction == 'h'){
				table.append('<tr></tr>');
				
				carousel.find(options.items).each(function(e){
					table.find('tr').append('<td></td>');
					table.find('td:last').append($(this));
					table.find('td:last').attr('index', e+1);
				});
				
				carousel.empty().append(table);				
				
				//setwidth = carousel.find('table:first').width();
				
				if(options.loop){
					var adj1 = table.find('td').clone();				
					var adj2 = table.find('td').clone();				
					table.find('tr').append(adj1).append(adj2);
					//carousel.animate({scrollLeft: setwidth}, 0);
					preScroll = setwidth;
				}else{
					//carousel.animate({scrollLeft: 0}, 0);
				}

				if(!options.scrollLength){
					options.scrollLength = carousel.width();
				}	
			
			}else{
				carousel.find(options.items).each(function(e){
					table.append('<tr><td></td></tr>');
					table.find('td:last').append($(this));
					table.find('td:last').attr('index', e+1);
				});
				
				carousel.empty().append(table);				
				
				//setheight = carousel.find('table:first').height();
				
				if(options.loop){
					var adj1 = table.find('tr').clone();				
					var adj2 = table.find('tr').clone();				
					table.append(adj1).append(adj2);
					preScroll = setheight;
					//carousel.animate({scrollTop: setheight}, 0);
				}else{
					//carousel.animate({scrollTop: 0}, 0);
				}

				if(!options.scrollLength){
					options.scrollLength = carousel.height();
				}
			}
		}

	//---------------------------------------------------
		
		function setNavButtons(carousel){
			if(!options.loop && options.prev){
				carousel.find(options.prev).addClass('disabled').fadeTo(0, 0.3);
			}
		}

	//---------------------------------------------------
		
		function setIndicators(){
			if(options.indicators){
				for (i=1; i<$(options.items).length; i++){
					$(options.indicators).append('<a href="#'+i+'">'+i+'</a>');
				}
			}
			$(options.indicators).find('a:first').addClass('active');
		}
	
	//---------------------------------------------------
		
		$(options.next).click(function(){
			if(options.direction == 'h'){
				ScrollHorizontal('fw', false);
			}else{
				ScrollVertical('fw', false);
			}
		});
	
	//---------------------------------------------------
	
		$(options.prev).click(function(){
			if(options.direction == 'h'){
				ScrollHorizontal('bw', false);
			}else{
				ScrollVertical('bw', false);
			}
		});
	
	//---------------------------------------------------
	
		this.hover(function(){
			$(this).removeClass('iwCarouselAutoScroll');
		}, function(){
			if(options.auto){
				$(this).addClass('iwCarouselAutoScroll');
			}
		});
		
		$(options.prev+','+options.next).hover(function(){
			$(this).parents('.carousel').find('.iwCarousel').removeClass('iwCarouselAutoScroll');
		}, function(){
			if(options.auto){
				$(this).parents('.carousel').find('.iwCarousel').addClass('iwCarouselAutoScroll');
			}
		});
	
		
	//---------------------------------------------------
	
		function AutoScroll(carousel){
			options.timerObject = setTimeout(function(){
				if(carousel.is('.iwCarouselAutoScroll')){	
					if(options.direction == 'h'){	
						ScrollHorizontal('fw', true);
					}else{
						ScrollVertical('fw', true);
					}
				}
				AutoScroll(carousel);
			}, options.auto);
		}
		
	//---------------------------------------------------
		
		function ScrollHorizontal(dir, autoscroll){
			if(!$(options.prev).is('.busy') && !$(options.next).is('.busy')){
				$(options.prev).addClass('busy');
				$(options.next).addClass('busy');
				
				var left = 0;
				
				if(dir == 'fw'){
					left = carousel.scrollLeft() + options.scrollLength;
				}else{
					left = carousel.scrollLeft() - options.scrollLength;
				}
				
				if(options.beforeScroll){	
					eval(options.beforeScroll+'();');
				}
				
				carousel.animate({scrollLeft: left}, options.speed, function(){
					$(options.prev).removeClass('busy');
					$(options.next).removeClass('busy');
					
					if(options.afterScroll){	
						eval(options.afterScroll+'();');
					}
					
					if(options.loop){ 
						AdjustVertical(dir);
					}
					
					if(!options.loop){
						if((carousel.scrollLeft() + options.scrollLength) >= carousel.find('table:first').width()){
							$(options.next).addClass('disabled');
						}else{
							$(options.next).removeClass('disabled');
						}
						if(left > 0){
							$(options.prev).removeClass('disabled');
						}else{
							$(options.prev).addClass('disabled');
						}
					}
				});
				
			}
		}

	//---------------------------------------------------------------

		function AdjustVertical(dir){
			if(dir == 'fw'){
				if((carousel.find('table:first').width() - (carousel.scrollLeft() + carousel.width())) < carousel.width()){
					var adj = carousel.scrollLeft() - setwidth;
					carousel.animate({scrollLeft: adj}, 0);
				}
			}else{
				if(((carousel.scrollLeft() - carousel.width())) < carousel.width()){
					var adj = carousel.scrollLeft() + setwidth;
					carousel.animate({scrollLeft: adj}, 0);
				}
			}
		}
		
	//---------------------------------------------------------------

		function ScrollVertical(dir, autoscroll){
			if(!$(options.prev).is('.busy') && !$(options.next).is('.busy')){
				$(options.prev).addClass('busy');
				$(options.next).addClass('busy');
				
				var top = 0;
				
				if(dir == 'fw'){
					top = carousel.scrollTop() + options.scrollLength;
				}else{
					top = carousel.scrollTop() - options.scrollLength;
				}
				
				if(options.beforeScroll){	
					eval(options.beforeScroll+'();');
				}
				
				carousel.animate({scrollTop: top}, options.speed, function(){
					$(options.prev).removeClass('busy');
					$(options.next).removeClass('busy');
					
					if(options.afterScroll){	
						eval(options.afterScroll+'();');
					}
					
					if(options.loop){ 
						AdjustHorizontal(dir);
					}
					
					if(!options.loop){
						if((carousel.scrollTop() + options.scrollLength) >= carousel.find('table:first').height()){
							$(options.next).addClass('disabled');
						}else{
							$(options.next).removeClass('disabled');
						}
						if(top > 0){
							$(options.prev).removeClass('disabled');
						}else{
							$(options.prev).addClass('disabled');
						}
					}
				});
				
			}
		}
		
	//---------------------------------------------------------------

		function AdjustHorizontal(dir){
			if(dir == 'fw'){
				if((carousel.find('table:first').height() - (carousel.scrollTop() + carousel.height())) < carousel.height()){
					var adj = carousel.scrollTop() - setheight;
					carousel.animate({scrollTop: adj}, 0);
				}
			}else{
				if(((carousel.scrollTop() - carousel.height())) < carousel.height()){
					var adj = carousel.scrollTop() + setheight;
					carousel.animate({scrollTop: adj}, 0);
				}
			}
		}
		
	//---------------------------------------------------------------

		this.find(options.indicators).find('a').click(function(event){
			event.preventDefault();
			if(options.direction == 'h'){
				var roller = $(this).parents(options.carousel).find('.IW_CarouselItemsRoller');
				var eq = parseInt($(this).attr('href').replace('#', ''));
				var left = roller.width() * eq;
				
				$(this).parents(options.indicators).find('a.active').removeClass('active');
				$(this).addClass('active');
				
				roller.find('td.current').removeClass('current');
				roller.find('td:eq('+eq+')').addClass('current');
				
				if(options.beforeScroll){	
					eval(options.beforeScroll+'();');
				}
				
				roller.animate({scrollLeft: left}, options.speed, function(){
					if(options.afterScroll){	
						eval(options.afterScroll+'();');
					}
				});
			}else{
				var roller = $(this).parents(options.carousel).find('.IW_CarouselItemsRoller');
				var eq = parseInt($(this).attr('href').replace('#', ''));
				var top = roller.height() * eq;
				
				$(this).parents(options.indicators).find('a.active').removeClass('active');
				$(this).addClass('active');
				
				roller.find('td.current').removeClass('current');
				roller.find('tr:eq('+eq+') td:first').addClass('current');
				
				if(options.beforeScroll){	
					eval(options.beforeScroll+'();');
				}
				
				roller.animate({scrollTop: top}, options.speed, function(){
					if(options.afterScroll){	
						eval(options.afterScroll+'();');
					}
				});
			}
		});

	//---------------------------------------------------------------
		

	};

//---------------------------------------------------------------

