/****
*
* nAnimator 	: Content slider / fader
*
* Author		: Rajesh Saikhede
* Email			: rajeshsaikhede@gmail.com
* URL			: http://www.technavigators.com 
*
****/

jQuery.fn.nAnimator = function(options){
	
	/* VARIABLE DECLARATION ------------------------------------------------------------------- */
	var defaults = {
		mode			: 'slide',
		speed			: 500,
		auto			: true, 
		pause			: 3000,
		select			: 5000,
		width			: $(this).children('.silderitem').width(), 
		wrapper_class	: 'container'
	}; 
	options = $.extend(defaults, options); 
	var $this = $(this);
	var $parent_width = options.width; 
	var is_working = false;
	var child_count = $this.children('.silderitem').size(); 
    var slidecnt=0;		
	var isbreak=false; 
	var expause=0;
	var selectedslide=-1;
	var hoverhold=false;
	
	
	/* SLIDER -------------------------------------------------------------------------------- */
	function slider(i)
	{	
		is_working = true; 
		$this.animate({'left':'-' + $parent_width * i + 'px'}, options.speed, function(){ 
			slidecnt=i;
			is_working = false; 
	   		$('#thumbcnt li:.active').removeClass('active');
			$('#thumbcnt li:eq('+slidecnt+')').addClass('active');

			if(options.auto && !isbreak)
          	{	
		  		slidecnt++;
           		if(slidecnt==child_count)
            	{
                	idx=0;
            	}
            clearInterval($.t);
	        $.t = setInterval(function(){slider(slidecnt);}, expaused==0 ? options.pause : expause);
	        expause=0;
		  	}	
		});		
	}
	

	/* FADER -------------------------------------------------------------------------------- */
	function fader(slidecnt)
	{  
		is_working = true; 
		$this.children('.silderitem').eq(slidecnt).fadeTo(options.speed, 0, function(){$(this).hide();});
		
		if(selectedslide < 0)
		{
			slidecnt++;
            if(slidecnt==child_count)
            {
				slidecnt=0;
            }
		}
        else
        {
        	slidecnt=selectedslide;
		}
		selectedslide=-1;
       	$('#thumbcnt li:.active').removeClass('active');
		$('#thumbcnt li:eq('+slidecnt+')').addClass('active');
		
		$this.children('.silderitem').eq(slidecnt).show().fadeTo(options.speed, 1, function(){
			is_working = false; 
			if(options.auto && !isbreak)
          	{
				clearInterval($.t);
	         	$.t = setInterval(function(){fader(slidecnt);}, expause==0 ? options.pause : expause);
	         	expause=0;
           	}
		}); 
	}
	
	
	/* THUBNAIL CLICK EVENT ------------------------------------------------------------------------ */
	function clickevents()
	{  
		$('#thumbcnt').children().click(function(){		
			
		var $kids = $('#thumbcnt li').index(this);
		clearInterval($.t);	
		
		if(!is_working)
		{
			if(options.select==0)
			{
				isbreak=true;
			}
			else
			{ 
				expause = options.select;
			}
				
			if(options.mode == 'slide')
			{
				slider($kids); 
			}  
			else
			{
				var $on= $('#thumbcnt li').index($('#thumbcnt li:.active'));
				selectedslide=$kids;
				if($on!=selectedslide)
				{ fader($on); }
			}
		}
		return false;
		});	
	}
	

	/* CREATE CONTENT WRAPPER & SET CSS ----------------------------------------------------------------- */
	$this.wrap('<div class="' + options.wrapper_class + '"></div>');
	 
	if(options.mode == 'slide')
	{	
		$this.parent().css({
			'overflow' 	: 'hidden',
			'position' 	: 'relative',
			'width' 	: options.width + 'px'
		});
			
		$this.css({		
			'width' 	: '999999px',
			'position' 	: 'relative' 			 	
		});
			
		$this.children('.silderitem').css({		
			'float' 	: 'left',
			'width' 	: $parent_width
		});
	}
	else if(options.mode == 'fade')
	{
		$this.parent().css({
			'overflow' 	: 'hidden',
			'position' 	: 'relative',
			'width' 	: options.width + 'px' 
		});
		 
		$this.children('.silderitem').css({		
			'position' 	: 'absolute',
			'width' 	: $parent_width,
			'listStyle'	: 'none',
			'opacity' 	: 0,
			'display' 	: 'none'	
		});
		
		$this.children('.silderitem:first').css({
			'opacity' 	: 1,
			'display' 	: 'block'
		});	
	}
	
	clickevents();
   
	if(options.auto)
   	{ 
		clearInterval($.t);
     	if(options.mode == 'slide')
		{
			$this.animate({'left':'-0px'}, options.speed, function(){ 
			$.t = setInterval(function(){slider(1);},options.speed);
		});
	}
	else
	{
		$.t =setInterval(function(){fader(0);},options.speed*2);
	}
	 
   }
		
}

















