/**
 * jQuery .makeSlider to make a slider outOfTheBox
 * @author Leon Dietsch
 */
(function($){
	$.fn.makeSlider = function(options) {
	
		var elements = this;
	
		var defaults = {
			// css classes
			classSliderNav: 'slideNav',
			classSliderNavLi: 'slideNavNo',
			classSliderNavLiActive: 'slideNavLiActive',
			classSliderFrame: 'sliderFrame',
			
			
			// values
			waitTime: 5000,
			restartTime: 5000,
			scrollTime: 1000,
			scrollOptions: {},
			sliderWidth: 0,
			sliderHeight: 0
			
		}
		
		var options = $.extend(defaults, options);  
		
		var global = {
			
		};
					
		// go to the next slide
		var showNextSlide = function () {

			if(global.posSlider == global.numSlides-1) {
				global.posSlider = 0;
			}else{
				global.posSlider++;
			}

			global.objSliderFrame.scrollTo(global.objSlides[global.posSlider], options.scrollTime,options.scrollToOptions);
			
			highlightSlideNavLi();
			
			global.timer = setTimeout(function(){
				showNextSlide();
			},options.waitTime);
		};
		
		var gotoSlideNo = function (gotoNo) {
			
			global.posSlider = gotoNo;
			
			global.objSliderFrame.stop().scrollTo(global.objSlides[global.posSlider], options.scrollTime,options.scrollToOptions);
			
			highlightSlideNavLi();
			
		}

		var old_createSlideNavigator = function () {
			
			htmlLiNav = ''
			
			var liWidth = Math.round(options.sliderWidth/global.numSlides);
			var checkLiWidth = liWidth;
			var addLiWidth = liWidth;
			for(i = 0;i < global.numSlides;i++) {

				realpos = i+1;

				if((liWidth*realpos) > options.sliderWidth) {
					cutOffPixel = options.sliderWidth - liWidth*realpos;
					addLiWidth = liWidth+cutOffPixel;
				}else{
					addLiWidth = liWidth;
				}
				isActive = (i == 0) ? options.classSliderNavLiActive:'';
				
				htmlLiNav += '<li class="'+options.classSliderNavLi+'-'+realpos+' '+isActive+'" style="width:'+addLiWidth+'px"></li>';
			}
			
			global.objSlider.prepend('<ol class="'+options.classSliderNav+'" style="overflow:hidden;">'+htmlLiNav+'</ol>');
			
		};
		
		var createSlideNavigator = function () {
			
			htmlLiNav = ''
			
			var liWidth = Math.round(options.sliderWidth/global.numSlides);
			var checkLiWidth = liWidth;
			var addLiWidth = liWidth;
			var restartTimer;
			
			var liNavCollection = Array();
			var olNavElm = document.createElement('ol');
			var olNav =  jQuery(olNavElm);
			olNav.addClass(options.classSliderNav);
			
			for(i = 0;i < global.numSlides;i++) {

				realpos = i+1;

				if((liWidth*realpos) > options.sliderWidth) {
					cutOffPixel = options.sliderWidth - liWidth*realpos;
					addLiWidth = liWidth+cutOffPixel;
				}else{
					addLiWidth = liWidth;
				}
				isActive = (i == 0) ? options.classSliderNavLiActive:false;
				
				var liNavElm = document.createElement('li');
				var liNav = jQuery(liNavElm);
				
				liNavElm.slideNo = i;
				liNav.addClass(options.classSliderNavLi+'-'+realpos);
				if(isActive !== false) liNav.addClass(isActive);
				liNav.html(realpos);
				
				liNav.click(function() {
					gotoSlideNo(this.slideNo);
					
					if(global.timer) clearTimeout(global.timer);
					if(restartTimer) clearTimeout(restartTimer);
					
					restartTimer = setTimeout(function() {
						if(restartTimer) clearTimeout(restartTimer);
						if(global.timer) clearTimeout(global.timer);
						showNextSlide();
					},options.restartTime);
				});
				
				olNav.append(liNav);
			}
			
			global.objSlider.prepend(olNav);
			
		};
		
		var highlightSlideNavLi = function () {

			objSliderNavLi = global.objSlider.children('.'+options.classSliderNav).children(); //

			objSliderNavLi.removeClass(options.classSliderNavLiActive);
			objSliderNavLi.eq(global.posSlider).addClass(options.classSliderNavLiActive);
			
		}

		//	main function
		return this.each(function() {
				
			global.objSlider = $(this);

			if(options.sliderWidth == 0) {
				options.sliderWidth = global.objSlider.css('width');
				options.sliderWidth = options.sliderWidth.slice(0,-2);
			}
			if(options.sliderHeight != 0) {
				options.sliderWidth = global.objSlider.css('height',options.sliderHeight+'px');
			}
			
			// width helper
			global.objSlider.wrapInner('<div style="width:1000%"></div>');
			
			// frame to scroll in
			global.objSlider.wrapInner('<div class="'+options.classSliderFrame+'" style="overflow:hidden;"></div>');
			
			global.objSliderFrame = global.objSlider.children();
			
			global.objSlides = global.objSliderFrame.children('div').children();

			global.posSlider = 0; //start at slide 1
			global.numSlides = global.objSlides.length;
			
			//old_createSlideNavigator();
			createSlideNavigator();
			
			global.timer = setTimeout(function(){
				showNextSlide();
			},options.waitTime);
		});
		
	};

})(jQuery);
