(function($) {
/* Plugin Name:		
	 * Biber Slider
	 * Programmed by:	Bircan Tuner
	 * Programmed for:	biber Ltd. of Istanbul, Turkiye.
	 * Licensed under:	GPL
	 * 
	 * version:			1.0
	 * 
	 * 
	 * http://www.biberltd.com
	 */
	 
$.fn.bbr_slider = function(options){
	var defaults = {
		fx:					'scroll',
		continuous: 		false,
		timeout:			5000,
		speed:				1000,
		control:			true,
		control_location:	'bottom',
		player:				true,
		shadow:				false,
		start:				0,
		width:				870,
		height:				380
	};
	
	var options = $.extend(defaults, options);
	
	$inAnimation = false;
	
	return this.each(function() {
		var slider = $(this);
		create(slider, options);
	}); 
	
	function create(slider,options) {
		
		slider.addClass('bbr-slider');
		
		// Create Slides
		var i = 1;
		
		var height = 0;
		var width= 0;
		
		slider.children().hide().each(function(){
			$(this).wrap('<li id="slide-' + i++ + '-detail"></li>')
		});
		
		slider.wrapInner('<ul class="slides"></ul>');
		
		slider.find('.slides').css({
			width : options.width,
			height : options.height	
		});
		
		slider.find('.slides li').css('z-index','3').children().show();
		
		// Add Shadow to the frame
		if(options.shadow) {
			slider.prepend('<div class="slider-shadow-top"></div><div class="slider-shadow-left"></div><div class="slider-shadow-right"></div><div class="slider-shadow-bottom"></div>');	
		}
		
		// Add Slider Control
		if(options.control) {
			
			var control = '';
			
			for(i = 1; i <= slider.find('.slides li').length; i++){
				control += '<li><a id="slide-' + i + '" href="#"></a></li>';	
			}
			
			
			if(options.control_location == 'bottom') {
				
				slider.append('<ul class="slider-control bottom">' + control + '</ul>');
				
				if(options.player) {
					slider.append('<ul class="slider-player bottom"><li><a class="play" href="#"></a></li><li><a class="pause" href="#"></a></li></ul>');
				}		
				
				slider.append('<div class="clear"></div>');	
			}
			
			else if(options.control_location == 'top') {
				
				slider.prepend('<div class="clear"></div>');
				
				if(options.player) {
					slider.prepend('<ul class="slider-player top"><li><a class="play" href="#"></a></li><li><a class="pause" href="#"></a></li></ul>');
				}
				
				slider.prepend('<ul class="slider-control top">' + control + '</ul>');
				
			}
			
		}
		
		setup(slider, options);
	}
	
	function setup(slider, options)	{
		
		
		if(options.fx == 'scroll') {
			var left = 0;
			slider.find('.slides li').each(function(){
				$(this).css('left', left);
				left += slider.width();
			});
			
			slider.find('.slides').css('left', -(options.start * slider.width()));
		}
		
		// Show Start Slide
		slider.find('.slides li:nth-child(' + (options.start + 1) + ')').css('z-index','4').addClass('visible');
		slider.find('.slider-control li:nth-child(' + (options.start + 1) + ') a').addClass('on');
		
		// Add click functions to the controller
		slider.find('.slider-control a').click(function(event){
			event.preventDefault();
			
			if(auto){
				slider.find('.slider-player .pause').trigger('click');		
			}
			
			showSlide(slider, options, $(this).parent('li').index());
		});
		
		var auto = null;
		// Add click functions to the play button
		slider.find('.slider-player .play').click(function(event) {
			event.preventDefault();
			play($(this), slider, options);
			
		});
		
		// Add click functions to the pause button
		slider.find('.slider-player .pause').click(function(event) {
			event.preventDefault();
			pause($(this));

		});
		
		// Autoslide setup
		if(options.continuous) {
			play(slider.find('.slider-player .play'), slider, options);
		}
		
		else {
			pause(slider.find('.slider-player .pause'));
		}
		
		function play(playButton, slider, options) {
		
			playButton.parents('.slider-player').find('.pause').removeClass('on');
			playButton.addClass('on');			
			auto = setInterval(function(){
					      autoSlide(slider, options);
					   }, options.timeout);
		}
		
		function pause(pauseButton) {
			
			pauseButton.parents('.slider-player').find('.play').removeClass('on');
			pauseButton.addClass('on');
			
			clearInterval ( auto );	
			
		}
	}
	
	
	
	function showSlide(slider, options, n) {
		
		if(options.fx == 'scroll') {
			scrollNext(slider, options, n);
		}
		
		if(options.fx == 'fade') {
			fadeNext(slider, options, n);
		}
	}
	
	function fadeNext(slider, options, n) {
		
		if(slider.find('.slides li.visible').index() != n) {
			
			if(!$inAnimation) {
				
				$inAnimation = true;
					
					slider.find('.slides li.visible').fadeOut(options.speed);
					slider.find('.slides li:eq(' + n + ')').fadeIn(options.speed, function(){
						$(this).parents('.slides').find('li').removeClass('visible');
						$(this).parents('.slides').find('li:eq(' + n + ')').addClass('visible');
						
						$inAnimation = false;
					});
				
				slider.find('.slider-control a').removeClass('on');
				slider.find('.slider-control a#slide-' + (n + 1)).addClass('on');	
			}	
		}
	}
	
	function scrollNext(slider, options, n) {
		if(slider.find('.slides li.visible').index() != n) {
			
			if(!$inAnimation) {
				
				$inAnimation = true;
					
					slider.find('.slides').animate({
						left: -(n * slider.width())
					}, {
						duration : options.speed ,
						easing	 : 'easeInOutQuart',
						complete : function() {
							$(this).find('li').removeClass('visible');
							$(this).find('li:eq(' + n + ')').addClass('visible');
							
							$inAnimation = false;	
						} 
					});
				
				slider.find('.slider-control a').removeClass('on');
				slider.find('.slider-control a#slide-' + (n + 1)).addClass('on');	
			}	
		}
	}
	
	function autoSlide(slider, options) {
		
		var moveTo = slider.find('.slides .visible').index() + 1;
		if(moveTo == slider.find('.slides li').length){
			moveTo = 0;
		}
		
		if(options.fx == 'scroll') {
			scrollNext(slider, options, moveTo);	
		}
		
		else if(options.fx == 'fade') {
			fadeNext(slider, options, moveTo);	
		}
	}
}
	 
})(jQuery);
