(function($) {
	$.fn.cSlider = function(options) {
		var optionObj = $.extend({}, $.fn.cSlider.defaults, options);
		var slider = this;
		var slidesArray = new Array();
		var navigation = false;
		var numberOfSlides;
		var nosao = (optionObj.ShowNumberOfSlidesAtOnce > 0 && optionObj.ShowNumberOfSlidesAtOnce != "" ? optionObj.ShowNumberOfSlidesAtOnce : 1); //numberOfSlidesAtOnce
		var slideWidth;
		var slideHeight;
		var sliderSpaceId;
		var timeoutId;
		var tliId;
		var ssnId;
		var currentSlide = 0;
		
		var __init = function() {
			slideWidth = $('#' + $(slider).attr('id') + ' .' + optionObj.cSlideItemClass).outerWidth(true);
			slideHeight = $('#' + $(slider).attr('id') + ' .' + optionObj.cSlideItemClass).outerHeight(true);
			$(slider).css({ position: 'relative',
						  	overflow:'hidden',
							height: slideHeight + 'px'
						 });
			$('#' + slider.attr('id') + ' img').css({ position:'static' });
			sliderSpaceId = 'c' + $(slider).attr('id');
			$(slider).wrapInner('<div id="' + sliderSpaceId + '"></div>');
			
			$('#' + sliderSpaceId).css({ position:'absolute',
									     width : (optionObj.cSlideDirection === 0 || optionObj.cSlideDirection === 1 ? (slideWidth * nosao) + slideWidth : slideWidth) + 'px',
										 height : (optionObj.cSlideDirection === 2 || optionObj.cSlideDirection === 3 ? (slideHeight * nosao) + slideHeight : slideHeight) + 'px',
										 left : '0px',
										 top : '0px',
										 marginLeft : '0px',
										 marginTop : '0px',
										 zIndex : 10
									  }
			);

			prepareSlides();
			
			if (nosao > 1) {
				optionObj.cSliderPager = false;
				optionObj.cSliderPageNumber = false;
				optionObj.cSliderNavId = null;
				optionObj.cSliderNavButton = null;
				optionObj.cSliderShowSlideNumber = false;
				if (nosao >= numberOfSlides) {
					optionObj.cSliderAutoSlide = false;	
				}
				
			}
			
			prepareNav();			
			
			if (optionObj.cSliderShowSlideNumber) {
				prepareShowSlideNumbers();
			}
			
			if (optionObj.cSliderTimeLineId != null) {
				prepareTimeLine();	
			}
						
			if (optionObj.cSliderAutoSlide) {
				if (numberOfSlides > 1) {
					doWait(currentSlide);
				}
			}
		};
		
		var prepareSlides = function() {
			numberOfSlides = $('#' + sliderSpaceId + ' .' + optionObj.cSlideItemClass).length;
			
			$('#' + sliderSpaceId + ' .' + optionObj.cSlideItemClass).each(function(i) {
				$(this).css({ float : 'left',
							  display : 'block'
						    }
				).attr({id : i});
				slidesArray[i] = $(this).clone();
				$(this).remove();
			});
			
			for (i = 0; i < nosao; i++) {
				$('#' + sliderSpaceId).append($(slidesArray[i]).clone());
			}
			currentSlide = nosao - 1;
		};
		
		var prepareShowSlideNumbers = function() {
			if (optionObj.cSliderShowSlideNumber === true) {
				ssnId = 'ssn' + $(slider).attr('id');
				$(slider).append('<div class="cSLiderShowSlideNumbers" id="' + ssnId + '"></div>');
				$('#' + ssnId).css({ position : 'absolute',
									 display : 'block',
									 zIndex : 10
								   }
				);
			} else {
				ssnId = optionObj.cSliderShowSlideNumber;	
			}
			$('#' + ssnId).html('1/' + numberOfSlides);
		};
		
		var prepareTimeLine = function() {

			tliId = 'tli' + $(slider).attr('id');
			$('#' + optionObj.cSliderTimeLineId).append('<div class="cSliderTimeLineInner" id="' + tliId + '"></div>');
			$('#' + tliId).css({ width : 0,
							   	 height : $('#' + optionObj.cSliderTimeLineId).height() 
							   }
			);
		};
		
		var prepareNav = function() {
			if (numberOfSlides > 1 && nosao < numberOfSlides) {
				if (optionObj.cSliderPrevButton != null && optionObj.cSliderNextButton != null) {
					navigation = true;
					$('#' + optionObj.cSliderPrevButton).attr({ rev:(numberOfSlides - 1) }).addClass('nb' + $(slider).attr('id'));
					$('#' + optionObj.cSliderNextButton).attr({ rev:(currentSlide) }).addClass('nb' + $(slider).attr('id'));
					
					$('.nb' + $(slider).attr('id')).bind('click',
						function() {
							if ($('#' + sliderSpaceId).is(':not(:animated)') && $(slidesArray[currentSlide]).is(':not(:animated)')){
								clearTimeout(timeoutId);
								prepareSlide($(this).attr('rev'));
								if ($(this).attr('id') == optionObj.cSliderPrevButton) {
									if (optionObj.cSlideDirection == 0 || optionObj.cSlideDirection == 1) {
										doSlide();
									} else if(optionObj.cSlideDirection == 2 || optionObj.cSlideDirection == 3) {
										doSlideTop();
									} else {
										getDirection($(this).attr('rev'));
									}
								} else if ($(this).attr('id') == optionObj.cSliderNextButton) {
									if (optionObj.cSlideDirection == 0 || optionObj.cSlideDirection == 1) {
										doSlideRev();
									} else if(optionObj.cSlideDirection == 2 || optionObj.cSlideDirection == 3) {
										doSlideBottom();
									} else {
										getDirection($(this).attr('rev'));
									}
								}
							}
						}
					);
				}
			}

			if (optionObj.cSliderNavId != null && optionObj.cSliderNavButton != null) {
				navigation = true;
				
				$('#' + optionObj.cSliderNavId + ' .' + optionObj.cSliderNavButton).each(function(i) {
					$(this).addClass('navButton' + i).attr({rev: i});
				});
			
				$('#' + optionObj.cSliderNavId + ' .navButton0').addClass(optionObj.cSliderNavButton + 'Active');
				
				$('#' + optionObj.cSliderNavId + ' .' + optionObj.cSliderNavButton).bind('click',
					function() {
						if (!$(this).hasClass(optionObj.cSliderNavButton + 'Active')) {
							if ($('#' + sliderSpaceId).is(':not(:animated)') && $(slidesArray[currentSlide]).is(':not(:animated)')) {
								clearTimeout(timeoutId);
								prepareSlide($(this).attr('rev'));
								getDirection($(this).attr('rev'));
							}
						}
						return false;
					}
				);
			}
			
			if (optionObj.cSliderPager) {
				navigation = true;
				pagerId = 'p' + $(slider).attr('id');
				
				$(slider).append('<div class="cSliderPager" id="' + pagerId + '"></div>');
				
				$('#' + pagerId).css({ position:'absolute',
									   zIndex:20
									 }
				);
				
				for (i = 0; i < numberOfSlides; i++) {
					$('#' + pagerId).append('<a class="cSliderPagerItem pager'+ i + '" rev="' + i + '">' + (optionObj.cSliderPageNumber ? i + 1 : '&nbsp') + '</a>');
				}
			
				$('#' + pagerId + ' .pager0').addClass('cSliderPagerItemActive');

				$('#' + pagerId + ' .cSliderPagerItem').bind('click',
					function() {
						if (!$(this).hasClass('cSliderPagerItemActive')) {
							if ($('#' + sliderSpaceId).is(':not(:animated)') && $(slidesArray[currentSlide]).is(':not(:animated)')) {
								clearTimeout(timeoutId);
								prepareSlide($(this).attr('rev'));
								getDirection($(this).attr('rev'));
							}
						}
						return false;
					}
				);
			}
		};
		
		var doWait = function(currSlide) {
			timeoutId = setTimeout(function() {
							currSlide++;
							if (currSlide == numberOfSlides) {
								currSlide = 0;
							}
							prepareSlide(currSlide);
							getDirection();
						}, optionObj.showTime);

			if (optionObj.cSliderTimeLineId != null) {
				$('#' + tliId).animate(
					{ width : $('#' + optionObj.cSliderTimeLineId).width() + 'px' },
					optionObj.showTime
				);
			}
		};
		
		var prepareSlide = function(currSlide) {
			currentSlide = parseInt(currSlide);
			if (optionObj.cSliderTimeLineId != null) {
				$('#' + tliId).stop();
			}
			if (navigation) {
				setPrevNextButton(currentSlide);
			}
		};
		
		var getDirection = function(currSlide) {
			if (optionObj.cSLiderCustomFunctionBeforeStart != null) {
				optionObj.cSLiderCustomFunctionBeforeStart($(slidesArray[currSlide]).clone());
			}
			switch (optionObj.cSlideDirection) {
				case 0:							// Slide vanuit rechts
					doSlide(currSlide);
				break;
			
				case 1:							// Slide vanuit links
					doSlideRev(currSlide);
				break;
				
				case 2:							// Slide vanuit boven
					doSlideTop(currSlide);
				break;
				
				case 3:							// Slide vanuit onder
					doSlideBottom(currSlide);
				break;

				case 4:							// Fade
					doFade(currSlide);
				break;

				case 5:							// Blinds
					doBlinds(currSlide);
				break;

				default :
					doSlide(currSlide);
				break;
			}
		};
		
		var doSlideRev = function(slide) {
			if (!slide) {			
				slideNumber = getLastSlideId();
			} else {
				slideNumber = slide;	
			}
			setNavigation(slideNumber);
			$('#' + sliderSpaceId).append($(slidesArray[slideNumber]).clone());
			$('#' + sliderSpaceId).animate(
				{marginLeft : (0 - slideWidth) + "px"},
				optionObj.animationSpeed,
				function() {
					$('#' + sliderSpaceId).find('.' + optionObj.cSlideItemClass + ':first').remove();
					prepareNextSlide(slideNumber);
				}
			);
		};
		
		var doSlide = function(slide) {
			if (!slide) {
				slideNumber = getFirstSlideId();
			} else {
				slideNumber = slide;	
			}
			setNavigation(slideNumber);
			$('#' + sliderSpaceId).prepend($(slidesArray[slideNumber]).clone());
			$('#' + sliderSpaceId).css({marginLeft: '-' + slideWidth + 'px'});
			
			$('#' + sliderSpaceId).animate(
				{marginLeft : "0px"},
				optionObj.animationSpeed,
				function() {
					$('#' + sliderSpaceId).find('.' + optionObj.cSlideItemClass + ':last').remove();
					prepareNextSlide(slideNumber);
				}
			);
		};
		
		var doSlideBottom = function(slide) {
			if (!slide) {
				slideNumber = getLastSlideId();
			} else {
				slideNumber = slide;	
			}
			setNavigation(slideNumber);
			$('#' + sliderSpaceId).append($(slidesArray[slideNumber]).clone());
			$('#' + sliderSpaceId).animate(
				{marginTop : (0 - slideHeight) + "px"},
				optionObj.animationSpeed,
				function() {
					$('#' + sliderSpaceId).find('.' + optionObj.cSlideItemClass + ':first').remove();
					prepareNextSlide(slideNumber);
				}
			);
		};

		var doSlideTop = function(slide) {
			if (!slide) {
				slideNumber = getFirstSlideId();
			} else {
				slideNumber = slide;	
			}
			setNavigation(slideNumber);
			$('#' + sliderSpaceId).prepend($(slidesArray[slideNumber]).clone());
			$('#' + sliderSpaceId).css({marginTop: '-' + slideHeight + 'px'});
			$('#' + sliderSpaceId).animate(
				{marginTop : "0px"},
				optionObj.animationSpeed,
				function() {
					$('#' + sliderSpaceId).find('.' + optionObj.cSlideItemClass + ':last').remove();
					prepareNextSlide(slideNumber);
				}
			);
		};
		
		var doFade = function(slide) {
			if(!slide) {
				slideNumber = getLastSlideId();
			} else {
				slideNumber = slide;	
			}
			setNavigation(slideNumber);
			$('#' + sliderSpaceId).append(slidesArray[slideNumber]);
			$(slidesArray[slideNumber]).css({ position : 'absolute',
											  display : 'block',
											  left : '0px',
											  top : '0px',
											  opacity : 0,
											  zIndex : 500
											}
			).animate(
				{opacity:1},
				optionObj.animationSpeed,
				function() {
					$('#' + sliderSpaceId).find('.' + optionObj.cSlideItemClass + ':first').remove();
					prepareNextSlide(slideNumber);
				}
			);
		};

/****************************
*****************************/
		var doBlinds = function (slide) {
			if(!slide) {
				slideNumber = getLastSlideId();
			} else {
				slideNumber = slide;	
			}
			setNavigation(slideNumber);
			alert($('#' + sliderSpaceId).html());
						
		};
/****************************
*****************************/

		var getLastSlideId = function() {
			slideNumber = parseInt($('#' + sliderSpaceId).find('.' + optionObj.cSlideItemClass + ':last').attr('id')) + 1;
			if (slideNumber >= numberOfSlides) {
				slideNumber = 0;
			}
			return slideNumber;
		};

		var getFirstSlideId = function() {
			slideNumber = parseInt($('#' + sliderSpaceId).find('.' + optionObj.cSlideItemClass + ':first').attr('id')) - 1;
			if (slideNumber < 0) {
				slideNumber = numberOfSlides - 1;
			}
			return slideNumber;
		};

		var setNextNumber = function(number) {
			$('#' + ssnId).html( parseInt(number) + 1 + '/' + numberOfSlides);
		};
		
		var setPrevNextButton = function(slideNumber) {
			if (optionObj.cSliderPrevButton != null && optionObj.cSliderNextButton != null) {
				if (numberOfSlides > 1) {
					var first = parseInt($('#' + sliderSpaceId).find('.' + optionObj.cSlideItemClass + ':first').attr('id'));
					var last = parseInt($('#' + sliderSpaceId).find('.' + optionObj.cSlideItemClass + ':last').attr('id'));
					$('#' + optionObj.cSliderPrevButton).attr({ rev: (first === 0 ? numberOfSlides - 1: first - 1) });
					$('#' + optionObj.cSliderNextButton).attr({ rev: (last === numberOfSlides - 1 ? 0 : last + 1) });
				}
			}
		};
		
		var setNavigation = function(slideNumber) {
			if (optionObj.cSliderShowSlideNumber) {
				setNextNumber(slideNumber);
			}
			
			if (optionObj.cSliderNavId != null && optionObj.cSliderNavButton != null) {
				updateSideNav(slideNumber);	
			}
			
			if (optionObj.cSliderPager) {
				updatePager(slideNumber);
			}
		};
		
		var updateSideNav = function(slideNumber) {
			$('#' + optionObj.cSliderNavId + ' .' + optionObj.cSliderNavButton + 'Active').removeClass(optionObj.cSliderNavButton + 'Active');
			$('#' + optionObj.cSliderNavId + ' .navButton' + slideNumber).addClass(optionObj.cSliderNavButton + 'Active');
		};
		
		var updatePager = function(slideNumber) {
			$('#p' + $(slider).attr('id') + ' .cSliderPagerItemActive').removeClass('cSliderPagerItemActive');
			$('#p' + $(slider).attr('id') + ' .pager' + slideNumber).addClass('cSliderPagerItemActive');
		};

		var prepareNextSlide = function(slideNumber) {
			$('#' + sliderSpaceId).css({marginLeft: '0px'});
			$('#' + sliderSpaceId).css({marginTop: '0px'});
			if (optionObj.cSLiderCustomFunctionOnReady != null) {
				optionObj.cSLiderCustomFunctionOnReady($(slidesArray[slideNumber]).clone());
			}
			if (optionObj.cSliderTimeLineId != null) {
				$('#' + tliId).css({ width : '0px'});
			}

			if (optionObj.cSliderAutoSlide) {
				doWait(slideNumber);
			}
		};
		
		__init();
		return this;
	};
})(jQuery);

$.fn.cSlider.defaults = {
	cSlideItemClass					: 'cSliderItem',
	animationSpeed					: 1000,
	showTime						: 3000,
	ShowNumberOfSlidesAtOnce		: 1,
	cSliderAutoSlide				: true,
	cSliderPager					: false,
	cSliderPageNumber				: false,
	cSliderShowSlideNumber			: false,		// true maakt slider een extra div. geef je een id dan wordt de html van de Id overschreven met de slide nummer(s)
	cSlideDirection					: 1,			// 0 is naar links sliden 1 is naar recht sliden 2 is boven naar onder 3 is onder naar boven
	cSLiderTimeLineId				: null,
	cSliderNavId					: null,
	cSliderNavButton				: null,
	cSliderNextButton				: null,
	cSliderPrevButton				: null,
	cSLiderCustomFunctionBeforeStart: null,	
	cSLiderCustomFunctionOnReady	: null
};
