(function($) {
	$.fn.cSlider = function(options) {
		var optionObj = $.extend({}, $.fn.cSlider.defaults, options);
		var slider = this;
		var itemWidth = $("." + optionObj.slide).outerWidth();
		var itemHeight = $("." + optionObj.slide).outerHeight();
		var numberOfSlides = 1;
		var currentSlide = 1;
		var oldSlide = 0;
		var timeOutId = "";
		var positionArray = new Array;
		
		var init = function() {
			$("." + optionObj.slide , slider).wrapAll('<div class="cSliderItemHolder"><div class="cSliderItemSpace"></div></div>');
			$(".cSliderItemHolder").css({overflow : "hidden", height: itemHeight + "px"});
			if (!optionObj.itemHolderCustomWidth) {
				$(".cSliderItemHolder").css({width : itemWidth + "px"});
			}
			$(".cSliderItemSpace").find("." + optionObj.slide).each(function(i) {
				$(this).css({float : "left"});
				$(this).attr("id","cSlide" + (i+1));
				$(".cSliderItemSpace").css({width : (itemWidth * (i+1)) + "px"});
				numberOfSlides = i + 1;
			});
			
			if (numberOfSlides == 2) {
				$(".cSliderItemSpace").css({width : (itemWidth * (4)) + "px"});
				$(".cSliderItemSpace").append($(".cSliderItemSpace").html());
			} else if (numberOfSlides == 1) {
				optionObj.autoSlide = false;
				optionObj.slideButtons = false;
				optionObj.showNavigation = false;
				optionObj.pager = false;

			}
			
			if (numberOfSlides > 1) {
				prevStep(0);		// slider goedzetten laatste slider item voor de eerste zetten
			}

			if (optionObj.showNavigation) {
				navigationButtons();
			}

			if (optionObj.pager) {
				sliderPager();
			}
			
			if (optionObj.slideButtons) {
				$("." + optionObj.slideButtonClass + ":first").addClass(optionObj.slideButtonClass + "Active");
				$("." + optionObj.slideButtonClass).bind("click", function(){
					moveToCurrent(this);
				});
			}

			nextSlide();
		}; // einde init

		var navigationButtons = function() {
			$(".cSliderItemHolder").css({position : "relative"});
			$(".cSliderItemHolder").append("<a class=\"" + optionObj.nextBtn + "\"></a>");
			$(".cSliderItemHolder").append("<a class=\"" + optionObj.prevBtn + "\"></a>");
			
			$("." + optionObj.prevBtn)
				.css({position : "absolute", left : "0px", top : "0px", display : "block", height : itemHeight + "px", outline : "none", cursor : "pointer"})
				.bind("click",function() {
					slide(true, "back");
			});

			$("." + optionObj.nextBtn)
				.css({position : "absolute", right : "0px", top : "0px", display : "block", height : itemHeight + "px", outline : "none", cursor : "pointer"})
				.bind("click",function() {
					slide(true, "forward");
			});
		}; // einde navigationButtons

		var sliderPager = function() {
			$(".cSliderItemHolder").css({position : "relative"});
			$(".cSliderItemHolder").append("<div class=\"cSliderPager\"></div>");
			for (var i = 1; i <= numberOfSlides; i++) {
				$(".cSliderPager").append("<a class=\"cSliderPagerItem\" rev=\"" + i + "\">" + (optionObj.pagerNumber ? i:"") + "</a>");
			}
			$(".cSliderPager").css({position : "absolute"});
			$(".cSliderPagerItem").css({cursor : "pointer", display : "block"});
			$(".cSliderPagerItem:first").addClass(optionObj.slideButtonClass + "Active");
			
			$(".cSliderPagerItem").bind("click",function(){
				moveToCurrent(this);
			});
			
		}; // einde sliderPager

		var nextStep = function(x) {
			if (x == -2) {
				$(".cSliderItemSpace").css({marginLeft : -itemWidth + "px"});
				var temp = $(".cSliderItemSpace ." + optionObj.slide + ":first");
				temp.remove();
				$(".cSliderItemSpace").append(temp);
			} else {
				x = 0 - x;
				for (i = 1 ; i < x; i++) {
					$(".cSliderItemSpace").css({marginLeft : -itemWidth + "px"});
					var temp = $(".cSliderItemSpace ." + optionObj.slide + ":first");
					temp.remove();
					$(".cSliderItemSpace").append(temp);
				}
			}
		}; // einde nextStep
		
		var prevStep = function(x) {
			$(".cSliderItemSpace").css({marginLeft : -itemWidth + "px"});
			var temp = $(".cSliderItemSpace ." + optionObj.slide + ":last");
			temp.remove();
			$(".cSliderItemSpace").prepend(temp);
		}; // einde prevStep
		
		var moveToCurrent = function(obj) {
			if ($(".cSliderItemSpace").is(":not(:animated)")) {
				clearTimeout(timeOutId);
				for (var i in positionArray) {
					if (positionArray[i] == "cSlide" + $(obj).attr("rev")) {
						position = i;	
					}
				}
				
				if (position > 1) {
					x = -(position);
					direction = "forward";
				} else {
					x = (position);
					direction = "back";
				}
				currentSlide = $(obj).attr("rev");			
				doAnimate(x, direction);
			}
		};
		
		var changeActive = function() {
			if (optionObj.pager) {
				$(".cSliderPagerItem").each(function() {
					$(this).removeClass("cSliderPagerItemActive");
					if (parseInt($(this).attr("rev")) == currentSlide) {
						$(this).addClass("cSliderPagerItemActive");	
					}
				});
			}

			if (optionObj.slideButtons) {
				$("." + optionObj.slideButtonClass).each(function() {
					$(this).removeClass(optionObj.slideButtonClass + "Active");
					if (parseInt($(this).attr("rev")) == currentSlide) {
						$(this).addClass(optionObj.slideButtonClass + "Active");	
					}
				});
			}
		}; //einde changeActive
		
		var slide = function(clicked, clickDirection) {
			if ($(".cSliderItemSpace").is(":not(:animated)")) {
				oldSlide = currentSlide;
				if (clicked) {
					clearTimeout(timeOutId);
					if (clickDirection == "back") {
						currentSlide--;
						x = 0;
					} else if (clickDirection == "forward") {
						currentSlide++;
						x = -2;
					}
				} else {
					if (optionObj.counterClock) {
						currentSlide--;
						x = 0;
					} else {
						currentSlide++;
						x = -2;
					}
				}

				if (currentSlide > numberOfSlides) {				
					currentSlide = 1;
				} else if (currentSlide < 1) {
					currentSlide = numberOfSlides;
				}
				doAnimate(x, clickDirection);
			}
		}; // einde slide

		var doAnimate = function(x, clickDirection) {
			changeActive();
			$(".cSliderItemSpace").animate({
				marginLeft : (x * itemWidth) + "px"
			}, optionObj.animationSpeed, function() {
				
				if (clickDirection == "back") {
					prevStep(x);	
				} else if (clickDirection == "forward") {
					nextStep(x);
				} else if (optionObj.counterClock) {
					prevStep(x);	
				} else {
					nextStep(x);	
				}
				
				nextSlide();
			});
		}; // einde doAnimate
		
		var nextSlide = function() {
			$("." + optionObj.slide).each(function(i) {
				positionArray[i] = $(this).attr("id");
			});

			if (optionObj.autoSlide) {
				timeOutId = setTimeout(function() {
								slide(false, null);
							},optionObj.showTime);
			}
		};
		
		init();
		return this;
	}; // einde functie cSLider 
})(jQuery);

$.fn.cSlider.defaults = {
		nextBtn :				"cSliderNextBtn",
		prevBtn :				"cSliderPrevBtn",
		slide :					"cSliderItem",
		showNavigation :		true,
		animationSpeed :		2000,
		showTime :				2000,
		autoSlide :				false,
		slideButtons :			false,
		slideButtonClass :		"cSliderButton",
		pager :					false,
		pagerNumber :			false,
		counterClock :			false,
		itemHolderCustomWidth : false
		// hier alle default opties scheiden door een komma	
	};
