jQuery.fn.imageCarousel = function(parameters){ 
	var busy =false;
	var defaults = {rightArrowText:'>', leftArrowText:'<',moveElements:1,speed:5000,popping:false}
	var i = 0;
	var endReached = false; 
	jQuery.extend(defaults,parameters);
	
	var itemWidth  = 200;
	var itemMargin = 17; 
	
	var chainable =  this.each(function(){
		var rv = [];
		var sel = jQuery(this);

		sel.css({height:'220px',left:'2px',	position:'absolute',top:'0px'});
		sel.wrap('<div class="featureContainer"><div class="featureWindow"></div></div>');
		sel.children().css({'float':'left', 'margin': '10px '+itemMargin+'px', width: itemWidth+'px'});
		
		sel.parent().parent().append('<a id="leftArrow_'+i+'" class="whiteArrows leftArrow">'+defaults.leftArrowText+'</a><a id="rightArrow_'+i+'" class="whiteArrows rightArrow">'+defaults.rightArrowText+'</a>');
		i++;
	});
	
	$('.featureContainer').css({marginTop:'38px',	position:'relative',height:'240px'});
	$('.featureWindow').css({height:'224px',margin:'0px 10px 0',overflow:'hidden',	position:'relative'});
	
	if (!defaults.popping){
		$('.featureWindow').children().eq(0).each(function(){ 
			var ch = 	$(this).children();
			var fw = parseInt(ch.length) * itemWidth + (parseInt(ch.length) * (2 * itemMargin));
			$(this).css({'width':fw+'px'});
			
		})
	}
	
	jQuery(".featureContainer .whiteArrows").click(function(){  //features motion: 
		if (busy) return;
		busy=1;
		var par = $(this).parent().find('.featureWindow');
		var featureWindow = par.children().eq(0);
		var curPos = featureWindow.offset().left - par.offset().left;
		var direction = this.id.indexOf('ight'); 
		var features = featureWindow.children();
		
		/* todo - allow for variable width elements: */
		var xMove = (itemWidth+(2*itemMargin)) * defaults.moveElements;
		var newX = parseInt(curPos) + (xMove * direction)
		

		if (direction===1 && curPos >=0){
			busy = 0;
			return;
		}else{
			if (direction == -1){ //check for end of the list/*
				if(defaults.popping){
					var v = $(this).attr('id').split('_')[1];
					if (features.eq(features.length-1).offset().top == features.eq(0).offset().top){
						busy =0;
						return false; 
					}
				}else{
					
					if((parseInt(featureWindow.outerWidth(true)+newX )- par.outerWidth(true)).toString().indexOf('-') != -1){
						if (!endReached){
							endReached = true; 
							newX = -parseInt((featureWindow.outerWidth(true))- par.outerWidth(true))-(itemMargin*2);
						}else{
							endReached = false; 
							newX=0;
						}
						//alert(newX);
					}
				}
			}
			
				if ($.browser.msie && defaults.popping){
					var ieWidth = xMove * (-direction);
					featureWindow.animate({left: newX+'px', width :parseInt(featureWindow.width()+ ieWidth )+'px'}, defaults.speed,function(){busy=0;});
				}else {
					featureWindow.animate({left: newX+'px'}, defaults.speed,function(){busy=0;});
				}
			
		}
	});
	return chainable; 
}
