/**
 * Copyright © 2011 Ruslan Derepko
 * Licensed under the MIT and GNU/GPL licenses (mit.txt and gpl.txt)
 * http://www.dlelovers.com/
 *
**/

(function($) {
	
	$.fn.dlelRotator = function(settings) {
		
		var def = {
			prevBtId:	'rotate_prev',
			nextBtId:	'rotate_next',
			speedW:		700,
			speed:		800,
			pause:		5000
		}
		
		var settings = $.extend(def, settings);
		
		return this.each(function() {
			
			var windowItems = $('#dlelrwindow li').length;
			var windowItemWidth = 564;
			var frameItems = $('#dlelrframes li').length;
			var frameItemWidth = 84; // width + margin
			var frameAmount = 4;
			var fc = frameItems-1;
			var curr = 0;
			var frameCurrent = frameAmount-1;
			
			function dlelRotateFrames( act, section ) {
				
				$('#dlelrframes').stop();				
				
				if( act == 'next' ) {
					
					var nextFrame = $('#dlelrframes li.active').next();
					dlelRotateContent( nextFrame.prevAll().length, nextFrame, section );
					if( nextFrame.prevAll().length == fc ) {
						
						dlelRotateContent( 0, $('#dlelrframes li:eq(0)'), section );
						$('#dlelrframes').animate({marginLeft:0},settings.speed);
						frameCurrent = 2;
						
					} else {
						
						dlelRotateContent( nextFrame.prevAll().length, nextFrame, section );
						
					}
					
					if( frameCurrent+1 == curr ) {
						
						$('#dlelrframes').animate({marginLeft:(frameCurrent-2)*frameItemWidth*-1},settings.speed);
						frameCurrent = frameCurrent+1;
						
					}
					
				} else {
					
					var prevFrame = $('#dlelrframes li.active').prev();
					dlelRotateContent( prevFrame.prevAll().length, prevFrame, section );
					
					if( frameCurrent-frameAmount == curr ) {
						
						$('#dlelrframes').animate({marginLeft:(frameCurrent-frameAmount)*frameItemWidth*-1},settings.speed);
						frameCurrent = frameCurrent-1;
						
					}
					
				}
				
			}
			
			function dlelRotateContent( contendId, frameId, section ) {
				
				if( frameId.hasClass('active') ) return;
				
				$('#dlelrwindow').stop();
				
				$('#dlelrframes li').removeClass('active');
				
				frameId.addClass('active');
				
				curr = frameId.prevAll().length;				
				
				$('#dlelrwindow').animate({marginLeft:curr*windowItemWidth*-1},settings.speedW);
				$('#rotator_text').fadeOut();
				$('#rotator_text').fadeIn().html($('#dlelrwindow li:eq('+contendId+')').find('span.text').html());
				
				
				if ( curr >= fc ) {
					
					$('#'+settings.nextBtId).removeClass('active_next').stop(true, true);
					$('#'+settings.prevBtId).addClass('active_prev');
					
				} else {
					
					$('#'+settings.nextBtId).addClass('active_next');
					
					if( section == 'rotator' ) {
						timeout = setTimeout(function(){dlelRotateFrames('next','rotator');},settings.pause);
					}
					
				}
				
				if ( curr <= 0 ) {
					
					$('#'+settings.nextBtId).addClass('active_next');
					$('#'+settings.prevBtId).removeClass('active_prev').stop(true, true);
					
				} else {
					
					$('#'+settings.prevBtId).addClass('active_prev');
					
				}
				
			}
			
			$('#dlelrwindow').css('width',windowItems*windowItemWidth);
			$('#dlelrframes').css('width',frameItems*frameItemWidth);
			
			$('#'+settings.prevBtId+',#'+settings.nextBtId).click(function(e){
				
				if( ! $(this).hasClass('active_next') && ! $(this).hasClass('active_prev') ) return false;
				
				if( $(this).attr('rel') == 'next' ) {
					dlelRotateFrames( 'next' );
					$('#'+settings.prevBtId).fadeIn();
				} else {
					dlelRotateFrames( 'prev' );
					$('#'+settings.nextBtId).fadeIn();
				}
				e.preventDefault();
			});
			
			$('#dlelrframes li').click(function(){
				
				dlelRotateContent( $(this).prevAll().length, $(this) );				
				return false;
			});
			
			$('#rotator').bind({
				'mouseover': function(){
					clearTimeout(timeout);
				},
				'mouseout': function(){
					if( curr < fc ) {
						timeout = setTimeout(function(){dlelRotateFrames('next','rotator');},settings.pause);
					}
				}
			});
			
			if( frameItems > 1 ) {
				$('#dlelrframes li:first').addClass('active');
				$('#rotator_text').fadeIn().html($('#dlelrwindow li:first').find('span.text').html());
				$('#'+settings.nextBtId).fadeIn().addClass('active_next');
				
				// init auto slide
				var timeout;
				timeout = setTimeout(function(){dlelRotateFrames('next','rotator');},settings.pause);
			}
			
		});
		
	}
	
})(jQuery);
