// -------------------------------------
// 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(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' && 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){
			
		    $(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);  
