//jQuery.noConflict(); // Así podemos convivir con otras librerías JS como Prototype o Motools (y las que utilicen $) sin ningún conflicto


function Slides ($config) {
 this.nombre = $config.caja;   // id del contenedor de los destacados
 this.caja = '#'+$config.caja;   // id del contenedor de los destacados
 this.slide = '.slide_item'; // destacado
 this.numero = $config.item_numero; // Número de destacados que se muestran
 this.tiempo = $config.time; // Segundos entre cambio de destacado
 this.milisegundos = this.tiempo*1000; // No editar
 this.velocidadMostrar = 'fast';
 this.isPaginado = $config.paginado

 this.inicia = function () {

  numDestacados = jQuery(this.caja+' '+this.slide).length; // Número de destacados

  i=this.numero;
  k=0;

  // Se activa la primera tanda de destacados
  while (k<this.numero) {
   jQuery(this.caja+' '+this.slide).eq(k).addClass('activo');
   k++;
  }
  while (i<numDestacados) {
   jQuery(this.caja+' '+this.slide).eq(i).hide();
   i++;
  }

  // Se da ID a los destacados
  j=0;
  while (j<numDestacados) {
   jQuery(this.caja+' '+this.slide).eq(j).attr('id','slide-'+(j+1));
   j++;
  }

  this.paginacion(); // Se generan los controles de pausa y paginación

  // Se inicia el slideshow
  var that = this;
  this.intervalo = setInterval(function(){that.cambiar();}, this.milisegundos);

  // Al clicar una página se detiene el proceso y se va a la página
  jQuery('#'+this.nombre+'paginado li a').click(function () {
   clearInterval(that.intervalo);
   that.controlPausar();
   that.irPagina(parseInt(jQuery(this).parent().attr('id').split('-')[1]));
   jQuery('#'+this.nombre+'paginado li').removeClass('activo');
   jQuery(this).parent().addClass('activo');
   return false;
  });

  // Al clicar el botón de pausar/continuar se alterna detener/continuar el proceso
  jQuery('#'+this.nombre+'Pausa a').eq(0).click(function () {
   if (jQuery(this).hasClass('moviendo')) {
    that.controlPausar();
   } else {
    that.intervalo = setInterval(function(){that.cambiar();}, that.milisegundos);
    that.controlContinuar();
   }
   return false;
  });

 }

 // Modificar botón de pausar/reanudar
 this.controlPausar = function () {
  clearInterval(this.intervalo);
  jQuery('#'+this.nombre+'Pausa a').eq(0).removeClass('moviendo');
 }
 this.controlContinuar = function () {
  jQuery('#'+this.nombre+'Pausa a').eq(0).addClass('moviendo');
 }

 // Cambiar de slide
 this.irPagina = function (pagina) {
  elUltimo = pagina*this.numero;
  el = (elUltimo)-this.numero;
  jQuery(this.caja+' '+this.slide).removeClass('activo');
  while (el<elUltimo) {
   jQuery(this.caja+' '+this.slide).eq(el).addClass('activo');
   jQuery(this.caja+' '+this.slide).eq(el).addClass('activo activoPausa');
   el++;
  }

  jQuery(this.caja+' '+this.slide+':not(.activo)').hide();
  jQuery(this.caja+' '+this.slide+'.activo').fadeIn(this.velocidadMostrar);

 }

 // Cambio automático de slide
 this.cambiar = function () {
  activos = jQuery(this.caja+' '+this.slide+'.activo').length-1;
  ultimoActivo = jQuery(this.caja+' '+this.slide+'.activo').eq(activos);
  numeroUltimoActivo = parseInt(jQuery(this.caja+' '+this.slide+'.activo').eq(activos).attr('id').split('-')[1])+this.numero;
  proximaPagina = (numeroUltimoActivo/this.numero)-1;
  numDestacados = jQuery(this.caja+' '+this.slide).length;

  if (numeroUltimoActivo>numDestacados) {proximoActivo=jQuery(this.caja+' '+this.slide).eq(0);proximaPagina=0;} else {proximoActivo = ultimoActivo.next(this.slide);}
  jQuery(this.caja+' '+this.slide+'.activo').removeClass('activo');
  i=0;
  while (i<this.numero) {
   proximoActivo.addClass('activo');
   proximoActivo = proximoActivo.next();
   i++;
  }
  jQuery(this.caja+' '+this.slide+':not(.activo)').hide();
  jQuery('#'+this.nombre+'paginado li').removeClass('activo');
  jQuery('#'+this.nombre+'paginado li').eq(proximaPagina).addClass('activo');
  jQuery(this.caja+' '+this.slide+'.activo').fadeIn(this.velocidadMostrar);
 }

 this.paginacion = function () {
  if(!this.isPaginado)
    return;
  numPaginas = Math.ceil((jQuery(this.caja+' '+this.slide).length)/this.numero);
  jQuery(this.caja).after('<div id="'+this.nombre+'Controler"><ul class="'+this.nombre+'paginado" id="'+this.nombre+'paginado"></ul></div>'); // Se crea el contenedor de paginación
  jQuery('<li id="'+this.nombre+'Pausa"><a href="#" class="moviendo">&bull;</a></li>').appendTo('#'+this.nombre+'paginado'); // Se crea el párrafo para el botón de detener/continuar en su estado predeterminado (Pausar)
//paginadorSlide
  i=0;j=1;
  while (i<numPaginas) {
   jQuery('#'+this.nombre+'paginado').append('<li id="'+this.nombre+'pagina-'+j+'"><a href="#">'+j+'</a></li>');
   i++; j++;
  }
  jQuery('#'+this.nombre+'paginado li').eq(0).addClass('activo');
 }

}

