var mouseIsOverSM = false;
;(function($) {
	var moveDiv		= 0;
	var lastDiv		= 0;
	var timer		= 0;
	var totalDivs	= 0;
	var params		= Array();
	var divs		= Array();
	var elementPrev = '';
	var elementNext = '';

	function timerInterval() {
		timer = setInterval(function(){
			if(params.pause) {
				if (mouseIsOverSM == true) {
					return;
				}
			}
			stopNavigation();
			sliderLeft();
		}, params.delay);
	}

	function sliderLeft() {
		for(var i = 0; i <= totalDivs; i++) {
			var idElement	= divs[i];
			var left		= $('#'+idElement).width();
			var marginLeft	= $('#'+idElement).css('margin-left');
			var marginRight	= $('#'+idElement).css('margin-right');
			var displacement;
			displacement = parseInt(left) + parseInt(marginLeft) + parseInt(marginRight);
			if(i == totalDivs) {
				$('#' + idElement).animate({'left' : '+=-'+displacement},{
					duration:params.duration, 
					queue:true, 
					complete: function() {
						for(var h = 0; h < divs.length; h++) {
							$('#' + divs[h]).css('left', '0px');
						}
						$('#' + divs[moveDiv]).insertAfter($('#' + divs[lastDiv]));
						lastDiv = moveDiv;
						if(moveDiv < totalDivs) {
							moveDiv++;
						} else {
							moveDiv = 0;
						}
						resumeNavigation();
					}
				});
			} else {
				$('#' + idElement).animate({'left' : '+=-'+displacement},{duration:params.duration, queue:true});
			}
		}
	}

	function sliderRight() {
		for(var i = 0; i <= totalDivs; i++) {
			var idElement	= divs[i];
			var right		= $('#'+idElement).width();
			var marginLeft	= $('#'+idElement).css('margin-left');
			var marginRight	= $('#'+idElement).css('margin-right');
			var displacement;
			displacement = parseInt(right) + parseInt(marginLeft) + parseInt(marginRight);

			if(i == totalDivs) {
				$('#' + idElement).animate({'left' : '+='+displacement},{
					duration:params.duration, 
					queue:true,
					complete: function() {
						for(var h = 0; h < divs.length; h++) {
							$('#' + divs[h]).css('left', '0px');
						}
						$('#' + divs[lastDiv]).insertBefore($('#' + divs[moveDiv]));
						moveDiv = lastDiv;
						if(lastDiv > 0) {
							lastDiv--;
						} else {
							lastDiv = totalDivs;
						}
						resumeNavigation();
					}
				});
			} else {
				$('#' + idElement).animate({'left' : '+='+displacement},{duration:params.duration, queue:true});
			}
		}
	}

	function sliderMediaNext() {
		$(elementNext).click(function() {
			clearInterval(timer);
			stopNavigation();
			sliderLeft();
			timerInterval();
		});
	}

	function sliderMediaPrev() {
		$(elementPrev).click(function() {
			clearInterval(timer);
			stopNavigation();
			sliderRight();
			timerInterval();
		});
	}

	function stopNavigation() {
		$(elementPrev).unbind('click');
		$(elementNext).unbind('click');
	}

	function resumeNavigation() {
		sliderMediaPrev();
		sliderMediaNext();
	}

	$.fn.sliderMedia = function(options) {
		optionsDefault = {
			pause	: false,
			delay	: 5000,
			duration: 1000
		}
		opts = options || {};
		this.attr('onmouseover',"mouseIsOverSM = true;");
		this.attr('onmouseout',"mouseIsOverSM = false;");
		this.css('position','relative');
		var first = true;
		//Numero de hijos o capas que contiene el padre
		totalDivs = this.children().length - 1;
		lastDiv = totalDivs;
		for(var j = 0; j < totalDivs; j++) {
			if(this.children()[j].id == '') {
				if(first) {
					this.children()[totalDivs].id = 'client_' + j;
					divs.push(this.children()[totalDivs].id);
					this.children()[j].id = 'client_' + (parseInt(j)+1);
					first = false;
				} else {
					this.children()[j].id = 'client_' + (parseInt(j)+1);
				}
			}
			divs.push(this.children()[j].id);
		}

		$('#' + divs[0]).insertBefore($('#' + divs[1]));

		var right		= $('#' + divs[0]).width();
		var marginLeft	= $('#' + divs[0]).css('margin-left');
		var marginRight	= $('#' + divs[0]).css('margin-right');
		var displacement;

		displacement = parseInt(right) + parseInt(marginLeft) + parseInt(marginRight);
		leftParent = this.css('left');
		leftParent = leftParent.replace('px','');
		if(!isNaN(this.css('left'))) {
			leftParent = '-'+(parseInt(leftParent) + displacement)+'px';
		} else {
			leftParent = '-'+displacement+'px';
		}
		this.css("left",leftParent);
		params.delay	= (opts.delay) ? opts.delay : optionsDefault.delay;
		params.duration	= (opts.duration) ? opts.duration : optionsDefault.duration;
		params.pause	= (opts.pause) ? opts.pause : optionsDefault.pause;
		elementPrev		= opts.btnPrev;
		elementNext		= opts.btnNext;
		sliderMediaPrev();
		sliderMediaNext();
		timerInterval();
	}
})(jQuery);
