/*
 * 	loopedSlider 0.5.6 - jQuery plugin
 *	written by Nathan Searles	
 *	http://nathansearles.com/loopedslider/
 *
 *	Copyright (c) 2009 Nathan Searles (http://nathansearles.com/)
 *	Dual licensed under the MIT (MIT-LICENSE.txt)
 *	and GPL (GPL-LICENSE.txt) licenses.
 *
 *	Built for jQuery library
 *	http://jquery.com
 *	Compatible with jQuery 1.3.2+
 *
 */

/*
 *	markup example for $("#loopedSlider").loopedSlider();
 *
 *	<div id="loopedSlider">	
 *		<div class="container">
 *			<div class="slides">
 *				<div><img src="01.jpg" alt="" /></div>
 *				<div><img src="02.jpg" alt="" /></div>
 *				<div><img src="03.jpg" alt="" /></div>
 *				<div><img src="04.jpg" alt="" /></div>
 *			</div>
 *		</div>
 *		<a href="#" class="previous">previous</a>
 *		<a href="#" class="next">next</a>	
 *	</div>
 *
 * Adapted by Mariola Moreno Gonzalez
*/



if(typeof jQuery != 'undefined') {
	jQuery(function($) {
		$.fn.extend({
			loopedSlider: function(options) {
				var settings = $.extend({}, $.fn.loopedSlider.defaults, options);
				
				return this.each(
					function() {
					if($.fn.jquery < '1.3.2') {return;}
					var $t = $(this);
					var o = $.metadata ? $.extend({}, settings, $t.metadata()) : settings;
					var distance = 0;
					var times = 1;
					var slides = $(o.slides,$t).children().size();
					var width = $(o.slides,$t).children().outerWidth();
					var position = 0;
					var active = false;
					var number = 0;
					var interval = 0;
					var restart = 0;
					var pagination = $("."+o.pagination+" li a",$t);
					var random = o.random;
					var slidesRandom = Math.floor(Math.random()*slides);
					//alert("random:"+random+"addPagination:"+o.addPagination);
					
					// CARGA PROGRESIVA DE IMAGENES -------------------------------------------------
				
					var imagen = $('.slides img', $t);
					//var urlMosca="http://resizer.abc.es/resizer/marcasagua/boton_player_def.png";
					var urlMosca="http://estaticos1.abc.es/imag/boton_player_def.png";
					var urlMoscapequena="http://estaticos1.abc.es/imag/boton_player_col_b.png"
					var urlTwenti="/img/tuentishare_button22_ca.png";
					var urlImgPubliVideo="--102x30";
					var urlImgPubliPixelContador="sz=1x1";
					//Eliminamos del array de imagenes las correspondientes a la mosca del player
					imagen = jQuery.grep(imagen, function (a) { 
						return a.src != urlMosca; 
					});
					imagen = jQuery.grep(imagen, function (a) { 
						return a.src != urlMoscapequena; 
					});					
					//Eliminamos del array de imagenes las correspondientes al compartir del twenti de la capa de video
					imagen = jQuery.grep(imagen, function (a) { 
						return a.src.indexOf(urlTwenti)==-1; 
					});
					
					//Eliminamos las imagenes del patrocinio de los videos del array de imagenes
					imagen = jQuery.grep(imagen, function (a) { 
						return a.src.indexOf(urlImgPubliVideo)==-1; 
					});
					
					//Eliminamos las imagenes del pixelContador
					imagen = jQuery.grep(imagen, function (a) { 
						return a.src.indexOf(urlImgPubliPixelContador)==-1; 
					});

					var pixel = "/img/1x1_pixel.gif"; //ruta del pixel vacio que cargará en lugar de la imagen;
					var atributo = "longdesc";
					var $z ;
					
					/*
					var contador =0;
					$('.slides img', $t).each(function(){
						rutaOriginal=$(this).attr("src");
						$(this).attr(atributo,rutaOriginal);
												
						if (contador>=o.numitems){
							$(this).attr("src", pixel);
						}
						contador++;
					});
					*/
					var contador =0;
					$('.slides img', $t).each(function(){
						
						$z = $(this);	
						if ( ( ($z.attr("src")==pixel)  || ($z.attr("src")=='') ) && contador<o.numitems){
							//alert ('init '+$z.attr(atributo) );								
							$(this).attr("src", $z.attr(atributo));
						}
						contador++;
					});
					// función llamada desde los botones delante y atrás y la paginación para la precarga de la imagen a mostar
					function cargaImagen (num){
						var position1=0;
						if (o.numitems>slides){
							o.numitems=slides;
						}
						//Las imagenes que queremos que se muestren tendran left=position=0, left=width, left=2width,.. hasta left=(numItems a mostrar -1)width
						for (i=0;i<o.numitems; i++) {
							var numImagen=(i+(num-1))%slides;
							$z = imagen[numImagen];
							//En caso de que el src de la imagen se corresponda con 1x1 px lo sustituimos por lo cargado en el atributo longDesc  
							if ($z!=null && ($z.src.indexOf (pixel)!=-1  || ($z.src=='') ) ) {
								$z.src=imagen[i+(num-1)].longDesc;
							}
								$(o.slides,$t).children(":eq("+(numImagen)+")").css({left:(position1)});
								position1=position1+width;
						}
						
					//Las imagenes que queremos que no se muestren tendran left=(numItems a mostrar)width hasta left=slides.width
						for(j=o.numitems;j<slides;j++){
							var numImagen2=(j+(num-1))%slides;
							$(o.slides,$t).children(":eq("+(numImagen2)+")").css({left:(position1)});
							position1=position1+width;
							if ($(o.slides,$t).children(":eq("+(numImagen2)+")").attr("class")=="photo-alt1"){
								if($(o.slides,$t).children(":eq("+(numImagen2)+")").find(".unvideo").children("object").length>0){
									$(o.slides,$t).children(":eq("+(numImagen2)+")").find(".unvideo").children("object").css("display","none");
								}
								
								if($(o.slides,$t).children(":eq("+(numImagen2)+")").find(".unvideo").children("iframe").length>0){
									$(o.slides,$t).children(":eq("+(numImagen2)+")").find(".unvideo").children("iframe").css("display","none");
								}
								if($(o.slides,$t).children(":eq("+(numImagen2)+")").find(".unvideo").children(".alto").length>0){
									$(o.slides,$t).children(":eq("+(numImagen2)+")").find(".unvideo").children(".alto").css("display","block");
								}
								if($(o.slides,$t).children(":eq("+(numImagen2)+")").find(".unvideo").children(".mosca-player").length>0){
									$(o.slides,$t).children(":eq("+(numImagen2)+")").find(".unvideo").children(".mosca-player").children('img').css("display","block");
								}
							}
						}
			
					}
					// ----------------------------------------------------------------------------------
					var numcapas =0;
					$('.slides', $t).children("div").each(function(){
						numcapas++;
					});
					if(o.addPagination && !$(pagination).length && numcapas>o.numitems){
						var buttons = slides;
						$($t).append("<div class='paginacion'><ul class="+o.pagination+">");
						$(o.slides,$t).children().each(function(){
							if (number<buttons) {
								if (number == 0 ){
									$("."+o.pagination,$t).append("<li class='active'><a rel="+(number+1)+" href=\"#\" >"+(number+1)+"</a></li>");
								}else {
									$("."+o.pagination,$t).append("<li><a rel="+(number+1)+" href=\"#\" >"+(number+1)+"</a></li>")
								}
								number = number+1;
							} else {
								number = 0;
								return false;
							}
							$("."+o.pagination+" li a:eq(0)",$t).parent().addClass("");
						});
						pagination = $("."+o.pagination+" li a",$t);
						
					
					} else {
						$(pagination,$t).each(function(){
							number=number+1;
							$(this).attr("rel",number);
							$(pagination.eq(0),$t).parent().addClass("active");
						});
					}
					
					$(".paginacion",$t).append("<div class='numpag'><span class='actual'>"+times+"</span> de "+slides);
					
					if(!random){
						if (slides===1) {
							$(o.slides,$t).children().css({position:"absolute",left:position,display:"block"});
							return;
						}
					}

					$(o.slides,$t).css({width:(slides*width)});

					$(o.slides,$t).children().each(function(){
						$(this).css({position:"absolute",left:position,display:"block"});
						position=position+width;
					});

					$(o.slides,$t).children(":eq("+(slides)+")").css({position:"absolute",left:-width});

				/*if (slides>3) {
						$(o.slides,$t).children(":eq("+(slides-1)+")").css({position:"absolute",left:-width});
					}*/

					if(o.autoHeight){autoHeight(times);}

					$(".siguiente",$t).click(function(){
						
						if(active===false) {
							animate("siguiente", true);
							if(o.autoStart){
								if (o.restart) {autoStart();}
								else {clearInterval(sliderIntervalID);}
							}
						} return false;
					});

					$(".anterior",$t).click(function(){
						if(active===false) {	
							animate("anterior",true);
							if(o.autoStart){
								if (o.restart) {autoStart();}
								else {clearInterval(sliderIntervalID);}
							}
						} return false;
					});

					if (o.containerClick) {
						$(o.container,$t).click(function(){
							if(active===false) {
								animate("siguiente",true);
								if(o.autoStart){
									if (o.restart) {autoStart();}
									else {clearInterval(sliderIntervalID);}
								}
							} return false;
						});
					}
					
				

					$(pagination,$t).click(function(){
						if ($(this).parent().hasClass("active")) {return false;}
						else {
							times = $(this).attr("rel");
							$(pagination,$t).parent().siblings().removeClass("active");
							$(this).parent().addClass("active");
							animate("fade",times);
							if(o.autoStart){
								if (o.restart) {autoStart();}
								else {clearInterval(sliderIntervalID);}
							}
						} return false;
					});

					if (o.autoStart) {
						sliderIntervalID = setInterval(function(){
							if(active===false) {animate("siguiente",true);}
						},o.autoStart);
						function autoStart() {
							if (o.restart) {
							clearInterval(sliderIntervalID,interval);
							clearTimeout(restart);
								restart = setTimeout(function() {
									interval = setInterval(	function(){
										animate("siguiente",true);
									},o.autoStart);
								},o.restart);
							} else {
								sliderIntervalID = setInterval(function(){
									if(active===false) {animate("siguiente",true);}
								},o.autoStart);
							}
						};
					}
					
					//si hay random tiene que cargar uno de los destacados (y no necesariamente elprimero de la lista)
					var randomContador =0
					if(random){
						$('.slides img', $t).each(function(){
							//alert("randomContador:"+randomContador+"---slidesRandom:"+slidesRandom);
							if(randomContador==slidesRandom){
								times = slidesRandom;
								if ($(this).parent().hasClass("active")) {return false;}
								else {
									times = $(this).attr("rel");
									times = slidesRandom + 1;
									$(pagination,$t).parent().siblings().removeClass("active");
									$(this).parent().addClass("active");
									animate("fade",times);
									if(o.autoStart){
										if (o.restart) {autoStart();}
										else {clearInterval(sliderIntervalID);}
									}
								} return false;
							}
							randomContador++;
						});
					}
					
					
					function pagActual(num){
						var paginaActual = $(".actual", $t);
						paginaActual.empty();
						$(".actual", $t).html(num);
					}
					
					function current(times) {
						if(times===slides+1){times = 1;}
						if(times===0){times = slides;}
						$(pagination,$t).parent().siblings().removeClass("active");
						$(pagination+"[rel='" + (times) + "']",$t).parent().addClass("active");
					};

					function autoHeight(times) {
						if(times===slides+1){times=1;}
						if(times===0){times=slides;}	
						var getHeight = $(o.slides,$t).children(":eq("+(times-1)+")",$t).outerHeight();
						$(o.container,$t).animate({height: getHeight},o.autoHeight);					
					};		

					function animate(dir,clicked){	
						active = true;	
						switch(dir){
							case "siguiente":
								/* PASA A LA SIGUIENTE FOTO POR SLIDE.............................................
								times = times+1;
								distance = (-(times*width-width));
								current(times);
								pagActual(times);
								
								if(o.autoHeight){autoHeight(times);}
								if(slides<3){
									if (times===3){$(o.slides,$t).children(":eq(0)").css({left:(slides*width)});}
									if (times===2){$(o.slides,$t).children(":eq("+(slides-1)+")").css({position:"absolute",left:width});}
								}
								$(o.slides,$t).animate({left: distance}, o.slidespeed,function(){
									if (times===slides+1) {
										times = 1;
										$(o.slides,$t).css({left:0},function(){$(o.slides,$t).animate({left:distance})});							
										$(o.slides,$t).children(":eq(0)").css({left:0});
										$(o.slides,$t).children(":eq("+(slides-1)+")").css({ position:"absolute",left:-width});				
									}
									if (times===slides) $(o.slides,$t).children(":eq(0)").css({left:(slides*width)});
									if (times===slides-1) $(o.slides,$t).children(":eq("+(slides-1)+")").css({left:(slides*width-width)});
									active = false;
								});					
								break;
								*/
								// PASA A LA SIGUIENTE FOTO POR FADE................................................
								if (times < slides ){
									times = times+1;
									distance = (-(times*width-width));
									current(times);
									cargaImagen(times);
									pagActual(times);
								
								}else {
									times = 1;
									distance = (-(times*width-width));
									current(times);
									cargaImagen(times);
									pagActual(times);
								}
								if(o.autoHeight){autoHeight(times);}
								$(o.slides,$t).children().fadeOut(o.fadespeed, function(){
									//$(o.slides,$t).css({left: distance});
									//$(o.slides,$t).children(":eq("+(slides)+")").css({left:slides*width-width});
									//$(o.slides,$t).children(":eq(0)").css({left:0});
									//if(times===1){$(o.slides,$t).children(":eq("+(slides)+")").css({ position:"absolute",left:-width});}
									$(o.slides,$t).css({left: 0});
									$(o.slides,$t).children().removeClass('highlight');
									$(o.slides,$t).children().fadeIn(o.fadespeed);
									active = false;
								});
								break; 
								
							case "anterior":
								// PASA A LA FOTO ANTERIOR POR SLIDE..........................................
								
								/*if (times != 1 ){
									times = times-1;
									distance = (-(times*width-width));
									current(times);
									pagActual(times);
								}else{
									times=slides;
									distance = (-(times*width-width));
									current(times);
									pagActual(times);
								}
								
								if(o.autoHeight){autoHeight(times);}
								if (slides<3){
									if(times===0){$(o.slides,$t).children(":eq("+(slides-1)+")").css({position:"absolute",left:(-width)});}
									if(times===1){$(o.slides,$t).children(":eq(0)").css({position:"absolute",left:0});}
								}
								$(o.slides,$t).animate({left: distance}, o.slidespeed,function(){
									if (times===0) {
										times = slides;
										$(o.slides,$t).children(":eq("+(slides-1)+")").css({position:"absolute",left:(slides*width-width)});
										$(o.slides,$t).css({left: -(slides*width-width)});
										$(o.slides,$t).children(":eq(0)").css({left:(slides*width)});
									}
									if (times===2 ) $(o.slides,$t).children(":eq(0)").css({position:"absolute",left:0});
									if (times===1) $(o.slides,$t).children(":eq("+ (slides-1) +")").css({position:"absolute",left:-width});
									active = false;
								});
								break;
								
								*/
								// PASA A LA FOTO ANTERIOR POR FADE................................................
								if (times != 1 ){
									times = times-1;
									distance = (-(times*width-width));
									current(times);
									cargaImagen(times);
									pagActual(times);
								}else{
									times=slides;
									distance = (-(times*width-width));
									current(times);
									cargaImagen(times);
									pagActual(times);
								}
								if(o.autoHeight){autoHeight(times);}
								$(o.slides,$t).children().fadeOut(o.fadespeed, function(){
									$(o.slides,$t).css({left: 0});
									//$(o.slides,$t).children(":eq("+(slides)+")").css({left:slides*width-width});
									//$(o.slides,$t).children(":eq(0)").css({left:0});
									//if(times===1){$(o.slides,$t).children(":eq("+(slides)+")").css({ position:"absolute",left:-width});}
									$(o.slides,$t).children().removeClass('highlight');
									$(o.slides,$t).children().fadeIn(o.fadespeed);
									active = false;
								});
								break; 
								
							case "fade":
								times = [times]*1;
								timesAux = (times>(slides-o.numitems))?(slides-o.numitems+1):times;
								distance = (-(timesAux*width-width));
								current(times);
								cargaImagen(times);
								pagActual(times);
								if(o.autoHeight){autoHeight(times);}
								$(o.slides,$t).children().fadeOut(o.fadespeed, function(){
									$(o.slides,$t).css({left: 0});
									//$(o.slides,$t).children(":eq("+(slides)+")").css({left:slides*width-width});
									//$(o.slides,$t).children(":eq(0)").css({left:0});
									//if(times===slides){$(o.slides,$t).children(":eq(0)").css({left:(slides*width)});}
									//if(times===1){$(o.slides,$t).children(":eq("+(slides)+")").css({ position:"absolute",left:-width});}
									$(o.slides,$t).children().removeClass('highlight');
									if (o.numitems!=1){
										$(o.slides,$t).children(":eq("+(times-1)+")").addClass('highlight');
									}
									$(o.slides,$t).children().fadeIn(o.fadespeed);
									active = false;
								});
								break; 
							default:
								break;
							}					
						};
					}
				);
			}
		});
		$.fn.loopedSlider.defaults = {
			container: ".container", //Class/id of main container. You can use "#container" for an id.
			slides: ".slides", //Class/id of slide container. You can use "#slides" for an id.
			pagination: "pagination", //Class name of parent ul for numbered links. Don't add a "." here.
			containerClick: false, //Click slider to goto next slide? true/false
			autoStart: 0, //Set to positive number for true. This number will be the time between transitions.
			restart: 0, //Set to positive number for true. Sets time until autoStart is restarted.
			slidespeed: 0, //Speed of slide animation, 1000 = 1second.
			fadespeed: 0, //Speed of fade animation, 1000 = 1second.
			autoHeight: 0, //Set to positive number for true. This number will be the speed of the animation.
			addPagination: true , //Add pagination links based on content? true/false
			random: false , //Set the order of slide? true/false
			numitems :1 
		};
	});
}
