(function($) {
		  
		 
	$.fn.lCarousel = function(options) {
		var isAnimating=false;
		var self = this;
		var currentAantalItems = 0,prevAantalItems = 0, nextAantalItems=0;
		var currentStartItem = 0,prevStartItem = 0, nextStartItem=0;
		var currentLastItem = 0,prevLastItem = 0, nextLastItem=0;
		var defaults = {
			start: 0,
			animation: 'normal',
			loaderImg: 'images/loader.gif',
			easing: 'swing',
			auto: 0,
			autotime:0,
			nextBtn:null,
			prevBtn:null,
			nextBtnEvent: 'click',
			prevBtnEvent: 'click',
			nextBtnEventCallback: null,
			prevBtnCallback: null
		};
		
		
		if (typeof o == 'string') {
            //var instance = $(this).data('jcarousel'), args = Array.prototype.slice.call(arguments, 1);
            //return instance[o].apply(instance, args);
        } 
		var opts = jQuery.extend(defaults,options);
		
        return this.each(function() {
			 $(this).css({"overflow":"hidden","position":"relative"});
             var items = $(this).children().detach();
			 $(this).html("<div class='lCarousel_wrapper'><div class='lCarousel_prev'></div><div class='lCarousel_current'><img src='"+opts.loaderImg+"' height='19px' style='display:block;margin:auto' id='lCarousel_loader'></div><div class='lCarousel_next'></div></div>");
			 // add 3 blocks current next and prev
			 var wrapper = $(this).children(":first");
			wrapper.children().css({"float":"left","width":$(this).width(),"height":$(this).height()});
			 wrapper.css({"position":"absolute","width":$(this).width()*3,"height":$(this).height(),"left":"-"+$(this).width()+"px","top":"0px"});
				items.css({"float":"left","height":$(this).height()});
				//$("#lCarousel_wrapper").css({'position':'absolute','left':'-608px'});
				 $("#lCarousel_loader").css({"height":"19px","margin-top":function(){
											return ($(self).height() - $(this).height())	/2		   
							}});
			 var current = $(wrapper).children(".lCarousel_current");
			 var prev = $(wrapper).children(".lCarousel_prev");
			 var next = $(wrapper).children(".lCarousel_next");
			 var viewportwidth =  $(this).width();
			 
			 function init(){
				
				startnr = opts.start;
				
				nextnr = fillCurrent(startnr);
				
				fillNext(getNextNr(nextnr));
				
				fillPrev(getPrevNr(startnr));
				
			 }
			 
			 function rerange(newcurrent){
				 $(wrapper).css("left","-"+$(self).width()+"px");
				  // zorg ervoor dat de blok die momenteel zichtbaar is de current wordt
				if($(newcurrent).hasClass( "lCarousel_prev" )){
					//$(next).html($(current).html());
					$(current).html($(newcurrent).html());
					fillNext(getNextNr(prevLastItem));
					fillPrev(getPrevNr(prevStartItem));
				}else{
					//$(prev).html($(current).html());
					$(current).html($(newcurrent).html());
					fillPrev(getPrevNr(nextStartItem));
					fillNext(getNextNr(nextLastItem));
				} 
			 }
			 
			 function fillCurrent(startnr){
				 	
				 	currentAantalItems = 0;
					currentStartItem = startnr;
				 	nextNummer = currentStartItem;
					nextelement = getItem(nextNummer);
					$(current).empty();
					var totalwidthItems = 0;
					var viewportsize = self.width();
					while(totalwidthItems<=viewportsize){
						$(current).append($(nextelement));
						
						currentAantalItems++;
						$(nextelement).css("margin-right","5px");
						totalwidthItems +=	$(nextelement).outerWidth("true");
						nextNummer = getNextNr(nextNummer);
						nextelement =getItem(nextNummer);
						
					};
					
					//select last item
					lastitem = $(current).children(":last");
					
					totalwidthItems -= $(lastitem).outerWidth("true");
					$(lastitem).remove();
					currentAantalItems--;
					currentLastItem = getPrevNr(getPrevNr(nextNummer));
					//alert("cur:"+currentAantalItems);
					extraspace = Math.floor(((viewportsize -totalwidthItems)/currentAantalItems)*100)/100;
					
					$(current).children().each(function(){
														
						$(this).css({"margin-left":function(index, value) {
							if(isNaN(value)){value=0};
							mysize =  parseFloat(value,10) ;
							mysize =  mysize + extraspace ;
							return mysize;
						}}
						);	
					
					})
					
					return currentLastItem;
			 }
			 
			 function fillNext(startnr){
				
			 	nextAantalItems = 0;
				nextStartItem = startnr;
				nextNummer = nextStartItem;
				nextelement = getItem(nextNummer);
				$(next).empty();
				var totalwidthItems = 0;
				var viewportsize = self.width();
				while(totalwidthItems<=viewportsize){
					$(next).append($(nextelement));
					
					nextAantalItems++;
					$(nextelement).css("margin-right","5px");
					totalwidthItems +=	$(nextelement).outerWidth("true");
					nextNummer = getNextNr(nextNummer);
					nextelement =getItem(nextNummer);
					
				};
				//select last item
				lastitem = $(next).children(":last");
				totalwidthItems -= $(lastitem).outerWidth("true");
				$(lastitem).remove();
				nextAantalItems--;
				nextLastItem = getPrevNr(getPrevNr(nextNummer));
				
				//alert("cur:"+currentAantalItems);
				extraspace = Math.floor(((viewportsize -totalwidthItems)/nextAantalItems)*100)/100;
				
				$(next).children().each(function(){
					$(this).css({"margin-left":function(index, value) {
														if(isNaN(value)){value=0};
						mysize =  parseFloat(value,10) ;
						mysize =  mysize + extraspace ;
						
						return mysize;
					}}
					);								
				})
				
				return nextLastItem;
				 
			 }
			 
			 function fillPrev(startnr){
				
			 	prevAantalItems = 0;
				prevLastItem = startnr;
				prevNummer = prevLastItem;
				nextelement = getItem(prevNummer);
				$(prev).empty();
				var totalwidthItems = 0;
				var viewportsize = self.width();
				while(totalwidthItems<=viewportsize){
					
				
					$(prev).prepend($(nextelement));
					
					prevAantalItems++;
					$(nextelement).css("margin-right","5px");
					totalwidthItems +=	$(nextelement).outerWidth("true");
					prevNummer = getPrevNr(prevNummer);
					nextelement =getItem(prevNummer);
					
					
				};
				//select last item
				lastitem = $(prev).children(":first");
				totalwidthItems -= $(lastitem).outerWidth("true");
				$(lastitem).remove();
				prevAantalItems--;
				prevStartItem = getNextNr(getNextNr(prevNummer));
	
				//alert("cur:"+currentAantalItems);
				extraspace = Math.floor(((viewportsize -totalwidthItems)/prevAantalItems)*100)/100;
				
				$(prev).children().each(function(){
					$(this).css({"margin-left":function(index, value) {
														if(isNaN(value)){value=0};
						mysize =  parseFloat(value,10) ;
						mysize =  mysize + extraspace ;
						
						return mysize;
					}}
					);								
				})
				
				return prevStartItem;
				 
			 }
	
			 
			 
			 
			 function getItem(nr){
				 return $(items[nr]).clone();
			 }
			 
			 function getNextNr(nr){
				 nextItemnr = nr+1;
				 
				 if(nextItemnr > $(items).length){
					 nextItemnr = 0;
				 }
				 return nextItemnr;
			 }
			 
			 function getPrevNr(nr){
				 prevItemnr = nr-1;
				 if(prevItemnr < 0){
					 prevItemnr = $(items).length-1;
				 }
				 return prevItemnr;
			 }
			 $(window).load(function(){
									 
			 	init();
			});
			 
			 $(opts.nextBtn).bind(opts.nextBtnEvent,function(){						
				if (!isAnimating) {
					isAnimating	= true; 
					$(wrapper).animate(
					{"left":"+="+$(self).width(),"top": 0},
					{"easing":opts.easing,"duration":opts.animation,queue: true,"complete":
						function(){
							isAnimating = false;
							rerange(prev);
							if(opts.nextBtnEventCallback != null){
								opts.nextBtnEventCallback(this);
							}
						}})
				}
			});
			 
			$(opts.prevBtn).bind(opts.prevBtnEvent,function(){
															
				if (!isAnimating) {
					
					isAnimating	= true; 
					$(wrapper).animate(
						{"left":"-="+$(self).width(),"top": 0},
						{"easing":opts.easing,"duration":opts.animation,queue: true,"complete":
						function(){
							isAnimating = false;
							rerange(next);
							if(opts.prevBtnEventCallback != null){
								opts.prevBtnEventCallback(this);
							}
						}})
					
		
					
				}
			});
			 
        });
    };
})(jQuery);
