// -------------------------------------
// codeSlider.js
// -------------------------------------
// Lightweight and simple content slider
//
// Created by Kasper Mol
// For CodeCreators ©2011
// -------------------------------------
/*
// TODO

- Add support for automatic pager detection
- "Instructions" part has a lot of redundant stuff that could be done with code

// Instructions:
// there needs to be a main div containing the slider ul with at least these styles:

div#slidewrapper {
	
	width:  	[sliderwidth];
	height: 	[sliderheight];
	overflow:	hidden;	
}

// slider needs to be an ul with at least these styles:

ul#slider {
	
	display: 	block; 
	list-style: none; 
	width: 		9999px; 
	padding:	0; 	
	
}

// sliderli needs to be a li within the slider list with at least these styles:

ul#slider li {
	
	float: 		left; (or right) 
	width:  	[sliderwidth]; 
	height: 	[sliderheight]; 
	position: 	relative;	

}
*/

(function($){  
	
	$.fn.codeslide = function(options) {  
  
		var defaults = { 
			
			speed:		500,
			leftarrow:	false,
			rightarrow:	false, 
			type:		'fade',
			autoplay:	true,
			startpage:	1 
			
		};   
				
		var current,
			page,
			timerspeed,
			interval,
			slider   	= $(this),
			sliderli 	= $('li',slider),
			options  	= $.extend(defaults, options),
			busy	 	= false;

		sliderlen   = $(sliderli).size();
		sliderwidth = $(sliderli).width();
		
		if(sliderlen > 1){
		
		    if(options.type == 'slide'){ // Code for sliding
	     
		    	if(options.leftarrow)
		    		$(options.leftarrow).click(function(){ 	codeSlideTo(page-1); });
		    	
		    	if(options.rightarrow)
		    		$(options.rightarrow).click(function(){	codeSlideTo(page+1); });
		    	
		    	if(options.startpage > 0 && options.startpage <= sliderlen){
		    		
		    		if(options.startpage == 'last')
		    			page = sliderlen;
	    			else
	    				page = options.startpage
		    		
		    		$(sliderli).css('left','-'+(sliderwidth*(page-1))+'px');
		    		
		    	}else
		    		page = 1;
		        
		    }else if(options.type == 'fade'){ // Code for fading
	   
		        $(sliderli).css({'position':'absolute','left':0});
		        
		        $(options.leftarrow).click(function(){ 	codeFadeTo(current-1); });
		        
		        $(options.rightarrow).click(function(){ codeFadeTo(current+1);  })
		        
		        if(options.startpage > 0 && options.startpage <= sliderlen){
		            
		            if(page == 'last')
		                page = sliderlen;  
					else
						page = options.startpage;      
		            
		        }else
		            page = 1;
		            
		        $(sliderli).css('z-index',1);
		        $(sliderli).filter(':eq('+(page-1)+')').css('z-index',3);
		                
		    }
		    
		    // Autoplay
		    // --------
		    
		    if(options.autoplay != 'false' && typeof options.autoplay != undefined){
		    	
		    	if(options.autoplay == parseInt(options.autoplay))
		   			timerspeed = parseInt(options.autoplay);
				else
					timerspeed = 5000; // Default 5 seconds
				
				interval = setInterval(function() {
		        
		        	if(options.type == 'slide')
		        		codeSlideTo(page+1);
		       		else if(options.type == 'fade')
		       			codeFadeTo(current+1);
		        
				}, timerspeed);
		    	
		    }
			
			current = page;
			
			// Code for fading
			// ---------------
			
			function codeFadeTo(page){
				
				console.log(timerspeed+':  '+page);
			    
			    $(sliderli).stop(true,true);
			        
			    if(page < 1)
			        page = sliderlen;
			        
			    if(page > sliderlen)
			        page = 1;
			    
			    $(sliderli).filter(':eq('+(page-1)+')').css('z-index',2);
			    $(sliderli).filter(':eq('+(current-1)+')').fadeOut(options.speed,function(){
			        
			        $(sliderli).filter(':eq('+(page-1)+')').css('z-index',3);
			        $(this).css('z-index',1).show();
			        
			    });
			    
			    current = page;
			    
			}
			
			// Code for sliding
			// ----------------
			
			function codeSlideTo(page){
				
				$(function(){
					
					if(busy == false){
						
						busy = true;
						
						if(page == 'last')
							page = sliderlen;
						
						if(page != current)	{	
							
							if(page < current) // Slide to the right				
								if(!$(sliderli).css('left'))						  
									$(sliderli).animate({left:'-'+(sliderwidth * sliderlen)+'px'},options.speed,function(){ busy = false; });					
								else{
									
									var liPos = parseInt($(sliderli).css('left'));
						
									if(liPos < 0)					
										$(sliderli).animate({left:(liPos + sliderwidth) + 'px'},options.speed,function(){ busy = false; });					 
									else					
										$(sliderli).animate({left:'-'+(sliderwidth * (sliderlen-1))+'px'},options.speed,function(){ busy = false; });
										 
								}				
							else // Slide to the left			
								if(!$(sliderli).css('left'))						  
									$(sliderli).animate({left:'-'+sliderwidth+'px'},options.speed,function(){ busy = false; });					
								else{
									
									var liPos = parseInt($(sliderli).css('left'));
						
									if(liPos > -(sliderwidth*(sliderlen-1)))					
										$(sliderli).animate({left:(liPos - sliderwidth) + 'px'},options.speed,function(){ busy = false; });					 
									else					
										$(sliderli).animate({left:0},speed,function(){ busy = false; });
										
								}
							
						}else
							busy = false;
							
					}
				
				});
				
			}
		
		}
 	
 	};
   
})(jQuery);  
