function Left(str, n){
	if (n <= 0)
	    return "";
	else if (n > String(str).length)
	    return str;
	else
	    return String(str).substring(0,n);
}

function Right(str, n){
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str;
    else {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}


var reproductor = {
  // Lista ordenada por orden de inserción
  __lista: new Array(),
  // Hashtable con el id por clave
  __listaPorIds: new Array(),
  // Página actual
  __pagina: 0,
  // Número total de elementos
  __cuenta: 0,
  // Número de elementos por página
  __elementosPorPagina: 6,
  // Elemento reproduciendo
  __actual: 0,

  // Lista de categorías por orden de inserción
  __listaDeCategorias: new Array(),
  // Hashtable con el id por clave
  __listaDeCategoriasPorIds: new Array(),

  // Reinicia el objeto, eliminando las listas de objetos cargados
  reiniciar: function() {
  	this.__cuenta = 0;
  	this.__pagina = 0;
  	this.__lista = new Array();
  	this.__listaPorIds = new Array();
  	this.__listaDeCategorias = new Array();
  	this.__listaDeCategoriasPorIds = new Array();
  	this.__elementosPorPagina = 6;
    this.vaciar();
  },

  __vaciaHijos: function(elemento) {
    elemento.innerHTML = '';
  },

  // Vacía la lista de contenidos
  vaciar: function() {
  	this.__vaciaHijos($('categorias'))

    this.__vaciaHijos($('lista'));

    this.__vaciaHijos($('paginacion'));
  },

  // Añade un nuevo objeto a las lista y, si está dentro de la página actual, se pinta
  nuevoObjeto: function(objeto) {
    this.__lista[this.__cuenta++] = objeto;
    this.__listaPorIds[objeto.id] = objeto;

    // Si hay uno destacado, caben más elementos en la página
    if(objeto.Destacado) this.__elementosPorPagina++;

    if(this.__cuenta <= this.__elementosPorPagina) {
      this.pintaElemento(objeto, this.__cuenta);
    }

    if(objeto.Auto == true) {
      this.reproducir(objeto.id, true);
    }
  },

  // Añade una nueva categoría a las listas y la añade como pestaña
  nuevaCategoria:function(objeto) {
    this.__listaDeCategorias[this.__cuentaDeCategorias++] = objeto;
    this.__listaDeCategoriasPorIds[objeto.id] = objeto;

    this.pintaCategoria(objeto, this.__cuentaDeCategorias == 1);
  },

  // Pinta una categoría
  pintaCategoria:function(objeto, activa) {
    var id = objeto.id;

    var categorias = $('categorias');

    var siguiente;
    for(var i = 0, hijos = categorias.getElementsByTagName('li'); i < hijos.length; i++) {
      if(hijos[i].orden > objeto.Orden) {
        siguiente = hijos[i];
        break;
      }
    }

    var li = document.createElement('li');
    li.className = activa ? 'activa' : '';
    li.id = 'categoria' + id;
    li.nid = id;
    li.onclick = cambiaCategoria;
    li.orden = objeto.Orden;
    if(siguiente != null) {
      categorias.insertBefore(li, siguiente);
    } else {
      categorias.appendChild(li);
    }

    var div = document.createElement('div');
    li.appendChild(div);

    var span = document.createElement('span');
    div.appendChild(span);

    var a = document.createElement('a');
    span.appendChild(a);
    a.href = 'javascript: void(0)';
    a.appendChild(document.createTextNode(objeto.nombre));
  },

  // Cambia de categoría. Desmarca la activa y marca la nueva.
  // Lee los contenidos de la categoría del XML cargado para la sección actual y crea los objetos que necesita la función
  // de reproducir.
  cambiaCategoria:function(id, reproducir) {
    var activas = $('categorias').getElementsByClassName('activa');
    for(var i = 0, maximo = activas.length; i < maximo; i++) {
      if(activas[i].id == 'categoria' + id) {
        return;
      }

      activas[i].className = '';
    }

    $('categoria' + id).className = 'activa';

    var lista = $('lista');
    this.__vaciaHijos(lista);

    this.__lista = new Array();
    this.__listaPorIds = new Array();
    this.__cuenta = 0;
    this.__pagina = 0;

    var categorias = this.__xml.getElementsByTagName('categoria');
    if(categorias.length > 0) {
      for(var i = 0; i < categorias.length; i++) {
        var cat = categorias[i];
        if(cat.getAttribute("id") == id) {
          var elementos = cat.getElementsByTagName('elemento');
          for(var j = 0; j < elementos.length; j++) {
            this.nuevoObjeto(this.__rellenaObjeto(elementos[j], reproducir && j == 0));
          }

          this.pintaPaginacion();

          break;
        }
      }
    }
  },

  // Rellena un objeto Javascript a partir de los datos de un elemento XML del documento de categorías.
  __rellenaObjeto: function(elemento, reproducir) {
    var contenido = elemento.getElementsByTagName('contenido')[0].firstChild;

    var hijos = contenido.childNodes;
    var objeto = { id: elemento.getAttribute('id'), Auto: reproducir == true };
    objeto.Tipo = contenido.nodeName.substring(2);
    for(var i = 0; i < hijos.length; i++) {
      if(hijos[i].firstChild) {
        if(hijos[i].firstChild.nodeName == '#cdata-section') {
          if(objeto[hijos[i].nodeName] != undefined) {
            objeto[hijos[i].nodeName] += "," + hijos[i].firstChild.data;
          } else {
            objeto[hijos[i].nodeName] = hijos[i].firstChild.data;
          }
        } else {
          switch(hijos[i].nodeName) {
          	case 'Imágenes':
              objeto.Imágenes = [];
              var hijos2 = hijos[i].childNodes;
              for(var j = 0, k = 0; j < hijos2.length; j++) {
                if(hijos2[j].nodeName != "#text" && hijos2[j].firstChild != null) {
                  if(hijos2[j].firstChild.firstChild) {
                    objeto[hijos[i].nodeName][k++] = { pequena: hijos2[j].firstChild.firstChild.data };
                  } else {
                  	if(hijos2[j].firstChild.childNodes.length == 3) {
                      objeto[hijos[i].nodeName][k++] = { pequena: hijos2[j].firstChild.childNodes[1].data };
                  	}
                  }
                }
              }
          	  break;
            case 'teléfono902':
              if(hijos[i].firstChild) {
                if(hijos[i].firstChild.firstChild) {
                  objeto.Telefono902 = [ { etiqueta: 'Código', valor: hijos[i].firstChild.firstChild.data } ];
                } else {
                  if(hijos[i].childNodes.length == 3) {
                    objeto.Telefono902 = [ { etiqueta: 'Código', valor: hijos[i].childNodes[1].firstChild.data } ];
                  }
                }
              }
              break;
            case 'Descargas':
              objeto.Descargas = [];
              var hijos2 = hijos[i].childNodes;
              for(var j = 0, k = 0; j < hijos2.length; j++) {
                if(hijos2[j].nodeName != "#text" && hijos2[j].firstChild != null) {
                  if(hijos2[j].firstChild.firstChild) {
                    if(hijos2[j].firstChild.firstChild.data != '') {
                      objeto[hijos[i].nodeName][k++] = { etiqueta: hijos2[j].firstChild.firstChild.data,
                        valor: '<a href="' + hijos2[j].childNodes[1].firstChild.data + '" target="_blank">Descargar</a>' };
                    }
                  } else {
                  	if(hijos2[j].firstChild.childNodes.length == 3) {
                      objeto[hijos[i].nodeName][k++] = { etiqueta: hijos2[j].firstChild.childNodes[1].data,
                  	    valor: '<a href="' + hijos2[j].childNodes[1].firstChild.data + '" target="_blank">Descargar</a>' };
                  	}
                  }
                }
              }
              break;
            default:
              objeto[hijos[i].nodeName] = new Array();
              var hijos2 = hijos[i].childNodes;
              for(var j = 0, k = 0; j < hijos2.length; j++) {
                if(hijos2[j].nodeName != "#text") {
				  var etiqueta = hijos2[j].nodeName.hyphenate().replace(/-/, ' ');
				  etiqueta = etiqueta.charAt(0).toUpperCase() + etiqueta.substr(1, 10000);
                  objeto[hijos[i].nodeName][k++] = { etiqueta: etiqueta, valor: hijos2[j].firstChild.data };
                }
              }
          }
        }
      }
    }

    return objeto;
  },

  // Crea los enlaces de paginación en el div "paginacion"
  pintaPaginacion: function() {
    var paginacion = $('paginacion');
    this.__vaciaHijos(paginacion);

  	var paginas = this.__paginas();

  	if(paginas != 1) {
  	  var ul = document.createElement('ul');
  	  ul.id = 'listaPaginas';
      $('paginacion').appendChild(ul);

      // Ponemos los 5 enlaces correspondientes con el actual en el centro.
  	  var primero = Math.max(Math.min(Math.max(1, this.__pagina - 1), paginas - 4), 1);
  	  var ultimo = Math.min(primero + 5, paginas + 1);

  	  for(var i = primero; i < ultimo; i++) {
  	  	var li = new Element('li');
  	  	li.className = i == this.__pagina + 1 ? 'activo' : '';
  	  	ul.appendChild(li);

        var a = document.createElement('a');
        li.appendChild(a);
        a.href = 'javascript:void(0)';
        a.pagina = i - 1;
        a.onclick = cambiaPagina;
        a.appendChild(document.createTextNode(i));
  	  }

      // Puntos suspensivos y enlace a la última página. Sólo si esta no aparece ya en el listado.
      if(ultimo < paginas) {
        var li = document.createElement('li');
        ul.appendChild(li);
        var span = document.createElement('span');
        li.appendChild(span);
        span.appendChild(document.createTextNode('...'));

        var li = document.createElement('li');
        ul.appendChild(li);

        var a = document.createElement('a');
        li.appendChild(a);
        a.href = 'javascript:void(0)';
        a.pagina = paginas - 1;
        a.onclick = cambiaPagina;
        a.appendChild(document.createTextNode(paginas));
      }

      // Cajita de acceso directo a página
      var cajita = document.createElement('li');
      ul.appendChild(cajita);
      cajita.id = 'irAPagina';
      var input = document.createElement('input');
      cajita.appendChild(input);
      input.size = 2;
      input.type = 'text';
      var a = document.createElement('a');
      cajita.appendChild(a);
      a.href = 'javascript:void(0)';
      a.onclick = cambiaPaginaDirecta;
      a.appendChild(document.createTextNode('Ir a página >>'));

      paginacion.style.display = 'block';
    }

    var posicionLista = $('listado').getPosition();
    paginacion.style.position = "absolute";
    paginacion.style.left = (posicionLista.x + 5) + 'px';
    paginacion.style.top = (posicionLista.y + 585) + 'px';
  },

  // Reproduce el objeto, actualizando también los datos de debajo del reproductor
  reproducir: function(objeto, pausado) {
    if(!isNaN(objeto)) {
      objeto = this.__listaPorIds[objeto];
    }

    this.__actual = objeto.id;

	var extension;
	var youtube;
	
	if(objeto.Ruta) {
		extension = objeto.Ruta.substring(objeto.Ruta.length - 3);
	} else {
		extension = 'jpg';
	}
	youtube=Left(objeto.Ruta,18);
	
	var so = null;

    var repro = $('repro');
    $$('#repro a').each(
    	function(a) {
    		if(a.interval) {
    			clearInterval(a.interval);
    		}
    	}
   	);

    repro.innerHTML = '';

	switch(extension) {
	  case 'flv':
	  case 'mp3':
	    so = new SWFObject('/resources/flash/' + extension + '.swf', 'pelicula', 400, 335, 1);
	    so.addParam("wmode", "transparent");
	    so.addParam("FlashVars", "archivo=" + objeto.Ruta + "&auto=" + !pausado);
	    //so.write("repro");

		$('repro').innerHTML = '<embed type="application/x-shockwave-flash" src="/resources/flash/' + extension + '.swf" style="" id="pelicula" name="pelicula" quality="high" wmode="transparent" flashvars="archivo=' + objeto.Ruta + '&auto=' + !pausado + '" height="335" width="400">';          
       	//$('repro').innerHTML='<object width="405" height="330"><param name="movie" value="'+objeto.Ruta+'&hl=es&fs=1&rel=0&color1=0xe1600f&color2=0xfebd01"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="'+objeto.Ruta+'&hl=es&fs=1&rel=0&color1=0xe1600f&color2=0xfebd01" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="405" height="330"></embed></object>';

         break;
	  
case 'jpg':
	  case 'gif':
	    var div = new Element('div', { 'id': 'myGallery' }).injectInside(repro);

	    var imagenes = objeto.Imágenes;

	    for(var i = 0, max = imagenes.length; i < max; i++) {
	      var imagen = new Element('div', { 'class': 'imageElement' }).injectInside(div);

	      var h3 = new Element('h3').injectInside(imagen);
	      h3.appendText('Imagen ' + (i + 1));

	      var a = new Element('a', { 'href': imagenes[i].pequena, 'title': 'Abrir imagen', 'class': 'open' }).injectInside(imagen);
	      new Element('img', { 'src': imagenes[i].pequena, 'class': 'full' }).injectInside(imagen);
	    }


	    var galeria = new gallery($('myGallery'), { showCarousel: false, showInfopane: false });
	    $$('#myGallery .left, #myGallery .right').each(function(a) {
	    	a.addEvents({
	    		mouseenter: function() {
	    			a.setOpacity(0.8);
	    		},
	    		mouseleave: function() {
	    			a.setOpacity(0.2);
	    		}
	    	});
	    });

	    $$('#myGallery .open').each(function(a) {
	    	a.addEvent('click', function() {
	    		window.open(this.href);
	    		return false;
	    	});
	    });
	  	break;
      case 'swf':
	    var ancho = 700;
	    var alto = 600;
	    var imagen = 'resources/i/NoDisponibleAudio.jpg';

	    if(objeto.abrirEnVentana && objeto.abrirEnVentana[0]) {
    	  ancho = objeto.abrirEnVentana[0].valor;
	    }

	    if(objeto.abrirEnVentana && objeto.abrirEnVentana[1]) {
	  	  alto = objeto.abrirEnVentana[1].valor;
	    }

	    if(objeto.abrirEnVentana && objeto.abrirEnVentana[2]) {
    	  imagen = objeto.abrirEnVentana[2].valor;
	    }

        new Element('img', { src: imagen, width: 400, height: 310 }).injectInside(repro);

		var play = new Element('a', { href: 'javascript: void(0)', id: 'play',
			'events': {
				click: function() {
					abreFlash(objeto.Ruta, ancho, alto);
				}
			}
        }).injectInside(repro);

        play.efecto = $(play).effect('opacity', {duration: 500, wait: false});
        play.efecto.start('0.8').chain(function() { play.efecto.start('1') });
        play.interval =
        	setInterval(
        		function() {
        			play.efecto.start('0.8').chain(function() { play.efecto.start('1') });;
        		}, 1000);

        a = new Element('a', { href: 'javascript: void(0)', id: 'abrir',
        	events: {
        		click: function() {
          			abreFlash(objeto.Ruta, ancho, alto);
          		}
          	}
        }).injectInside(repro);
        a.appendText('Reproducir animación');
        break;
      default:
    }

if (youtube=='http://www.youtube')
{
$('repro').innerHTML='<object width="405" height="330"><param name="movie" value="http://www.youtube.com/v/rL9blMBJa54&hl=es&fs=1&rel=0&color1=0xe1600f&color2=0xfebd01"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/rL9blMBJa54&hl=es&fs=1&rel=0&color1=0xe1600f&color2=0xfebd01" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="405" height="330"></embed></object>';
}

    this.__rellenaDatos(objeto);

    var enlace = $('enlace');
    this.__vaciaHijos(enlace);
    enlace.appendChild(document.createTextNode('Enlace permanente: '));
    var input = enlace.appendChild(new Element('input'));
    input.type = 'text';
    input.size = 35;
    input.value = 'http://' + document.location.hostname + '/?item=' + this.__actual + '&' + objeto.Descripción.replace(/ /g, '');
    this.__vaciaHijos(enlace);

    input.onfocus = selecciona;

    var titulo = $('tituloMedia');
    this.__vaciaHijos(titulo);

    titulo.appendText(objeto.Descripción);

    $$('#lista .activo').each(function(elemento) {
    	elemento.className = '';
    });

    $$('#lista .destacadoactivo').each(function(elemento) {
    	elemento.className = 'destacado';
    });

    var li = $('li' + objeto.id);
    if(li != null) {
      li.className = objeto.Destacado ? 'destacadoactivo' : 'activo';
    }
  },

  __rellenaDatos:function(objeto) {
    var datos = $('datos');
    this.__vaciaHijos(datos);

    var pestanas = $('pestanas');
    this.__vaciaHijos(pestanas);

    // Creamos la lista de definición de datos de información
    var dl = datos.appendChild(new Element('dl'));
    dl.id = "listaInformación";
    if(objeto.Información && objeto.Información.length > 0) {
      for(var i = 0; i < objeto.Información.length; i++) {
        if(objeto.Información[i].valor != '') {
          var dt = document.createElement('dt');
          dl.appendChild(dt);
          dt.appendChild(document.createTextNode(objeto.Información[i].etiqueta + ": "));
          var dd = document.createElement('dd');
          dl.appendChild(dd);
		  dd.innerHTML = objeto.Información[i].valor.replace(/&amp;/g, '&');
        }
      }
    }

    // Si no había información, añadimos "Información no disponible"
    if(dl.childNodes.length == 0) {
      var dt = document.createElement('dt');
      dl.appendChild(dt);
      dt.appendChild(document.createTextNode('Información'));
      var dd = document.createElement('dd');
      dl.appendChild(dd);
      dd.appendChild(document.createTextNode('No disponible'));
    }

    var li = document.createElement('li');
    pestanas.appendChild(li);
    li.appendChild(document.createTextNode('Información'));
    li.className = 'activa';
    li.lista = 'listaInformación';
    li.onclick = activaDatos;

    // Creamos la lista de definición de datos de información
    dl = datos.appendChild(new Element('dl'));
    dl.id = "listaTeléfono902";
    dl.style.display = 'none';
    if(objeto.Telefono902 && objeto.Telefono902.length > 0) {
      for(var i = 0; i < objeto.Telefono902.length; i++) {
        if(objeto.Telefono902[i].valor != '') {
          var dt = document.createElement('dt');
          dl.appendChild(dt);
          dt.appendChild(document.createTextNode(objeto.Telefono902[i].etiqueta + ": "));
          var dd = document.createElement('dd');
          dl.appendChild(dd);
		  dd.innerHTML = objeto.Telefono902[i].valor.replace(/&amp;/g, '&');
        }
      }
    }

    // Si hay información, añadimos la pestaña
    if(dl.childNodes.length != 0) {
      li = document.createElement('li');
      pestanas.appendChild(li);
      li.appendChild(document.createTextNode('Teléfono 902'));
      li.lista = 'listaTeléfono902';
      li.onclick = activaDatos;
    } else {
      dl.parentNode.removeChild(dl);
	}

    // Creamos la lista de definición de datos de descargas
    dl = datos.appendChild(new Element('dl'));
    dl.id = "listaDescargas";
    dl.style.display = 'none';
    if(objeto.Descargas && objeto.Descargas.length > 0) {
      for(var i = 0; i < objeto.Descargas.length; i++) {
        if(objeto.Descargas[i].etiqueta != '') {
          var dt = document.createElement('dt');
          dl.appendChild(dt);
          dt.appendChild(document.createTextNode(objeto.Descargas[i].etiqueta + ": "));
          var dd = document.createElement('dd');
          dl.appendChild(dd);
		  dd.innerHTML = objeto.Descargas[i].valor.replace(/&amp;/g, '&');
        }
      }
    }

    // Si hay información, añadimos la pestaña
    if(dl.childNodes.length != 0) {
      li = document.createElement('li');
      pestanas.appendChild(li);
      li.appendChild(document.createTextNode('Descargas'));
      li.lista = 'listaDescargas';
      li.onclick = activaDatos;
    } else {
      dl.parentNode.removeChild(dl);
	}

	if(objeto.Tipo == 'Móvil') {
      var div = $('listaInformación');
	  var dd = div.getElementsByTagName('dd')[0];
	  var codigo = dd.innerHTML;
	  div.innerHTML = '<p>Envía un SMS al 7505 con la palabra clave REALG seguida de un espacio y el código ' + codigo + ', para descargar el elemento seleccionado.:</p><p><strong>REALG (espacio) ' + codigo + '</strong> al 7505</p><ul><li>El coste por mensaje es de 0,90 &euro; más IVA.</li><li>Es necesario un solo mensaje.</li><li>Servicio válido sólo para móviles MMS con conexión GPRS o WAP activada.</li><li>Sonidos reales válidos sólo para móviles compatibles con el formato AMR o MP3.</li></ul>';

	  var dl = new Element('dl').injectInside(datos);
	  dl.id = 'ayuda';
	  dl.style.display = 'none';
	  var dt = new Element('dt').injectInside(dl);
	  dt.appendText('Ayuda: ')
	  var dd = new Element('dd').injectInside(dl);
	  var ol = new Element('ol').injectInside(dd);
	  var li = new Element('li').injectInside(ol);
	  li.appendText('¿Cómo se configura tu móvil para el acceso WAP? Si no sabes cómo configurar tu terminal para el acceso WAP/GPRS envía CONFIGURAR seguido de tu operadora al 7505. Ejemplo:')
	  var ul = new Element('ul').injectInside(li);
	  li = new Element('li').injectInside(ul);
	  li.appendText('CONFIGURAR MOVISTAR al 7505');
	  li = new Element('li').injectInside(ul);
	  li.appendText('CONFIGURAR VODAFONE al 7505');
	  li = new Element('li').injectInside(ul);
	  li.appendText('CONFIGURAR AMENA al 7505');
	  li = new Element('li').injectInside(ol);
	  li.appendText('¿Quieres ');
	  var a = new Element('a', { href: '#'} ).injectInside(li);
	  a.appendText('probar si tu móvil es compatible');
	  a.onclick = function() {
	  	window.open('http://www.miramimovil.com/popcompat.php','Reclamaciones','width=205,height=409,top=50,left=50');
	  }
	  li.appendText('?');
	  li = new Element('li').injectInside(ol);
	  li.appendText('¿Quieres ');
	  a = new Element('a', { href: '#'}).injectInside(li);
	  a.appendText('hacer una reclamación');
	  a.onclick = function() {
	  	window.open('http://www.miramimovil.com/reclamacion.php','Reclamaciones','width=400,height=310,top=50,left=50');
	  }
	  li.appendText('?');

      li = document.createElement('li');
      pestanas.appendChild(li);
      li.appendChild(document.createTextNode('Ayuda'));
      li.lista = 'ayuda';
      li.onclick = activaDatos;
	}
  },

  // Va a la página anterior
  paginaAnterior: function() {
    if(this.__pagina != 0) {
      this.cambiaPagina(this.__pagina - 1);
    }
  },

  // Va a la página siguiente
  paginaSiguiente: function() {
    this.cambiaPagina(this.__pagina + 1);
  },

  // Cambia a la página indicada
  cambiaPagina: function(pagina) {
  	if(isNaN(pagina)) return;

  	var paginas = this.__paginas();
  	pagina = Math.min(Math.max(0, pagina), paginas - 1);

    this.__vaciaHijos($('lista'));

    this.__pagina = pagina;

    var ultimo = Math.min(pagina * this.__elementosPorPagina + this.__elementosPorPagina, this.__cuenta);

    for(var i = pagina * this.__elementosPorPagina, cuenta = 0; i < ultimo; i++, cuenta++) {
      this.pintaElemento(this.__lista[i], cuenta);
    }

    this.pintaPaginacion();
  },

  // Pinta un elemento con el formato:
  // <li [class="destacado|activo|destacadoactivo"] id="liID" nid="ID" onclick="reproducir" onmouseover="mouseOverElemento" onmouseout="mouseOutElemento">
  //  <a href="javascript:void(0)" onclick="reproducir"><img src="miniatura" width="155" height="80" alt="descripción" /></a>
  //  <div>
  //   <a href="javascript:void(0)" onclick="reproducir">descripción</a>
  //  </div>
  // </li>
  pintaElemento: function(objeto, pos) {
    var id = objeto.id;

    var li = document.createElement('li');
    $('lista').appendChild(li);
    li.id = 'li' + id;
    li.nid = id;
    li.onclick = reproducir;
    li.onmouseover = mouseOverElemento;
    li.onmouseout = mouseOutElemento;
    li.className = objeto.Destacado ? 'destacado' : '';
    if(id == this.__actual) {
      if(li.className.substring(0, 3) == 'des') {
      	li.className = 'destacadoactivo';
      } else {
      	li.className = 'activo';
      }
    }

    var a = document.createElement('a');
    //li.appendChild(a);
    a.href = 'javascript: void(0)';
    a.onclick = reproducir;

    var span = new Element('span').injectInside(li);
    span.setStyles( { display: 'block', width: 155, height: 80 } );

    if(objeto.Miniatura == null || objeto.Miniatura == '') {
	objeto.Miniatura = '/resources/i/miniatura_' + objeto.Tipo + '.jpg';
    }

    span.setStyle('background', 'url(' + objeto.Miniatura + ') top left no-repeat');

    if(!window.ie) {
      span.style.marginBottom = '5px';
    }

/*    var img = document.createElement('img');
    li.appendChild(img);
    img.src = objeto.Miniatura;
    img.width = 155;
    img.height = 80;
    img.alt = objeto.Descripción;*/

    var div = document.createElement('div');
    li.appendChild(div);

    a = document.createElement('a');
    div.appendChild(a);
    a.href = 'javascript: void(0)';
    a.onclick = reproducir;
    a.appendChild(document.createTextNode(objeto.Descripción));

    var img = document.createElement('img');
    li.appendChild(img);
    img.src = '/resources/i/ico_media_' + objeto.Tipo + '.gif';
    img.className = 'icono';
    img.width = 21;
    img.height = 21;
    img.alt = '';

	$(li).setOpacity(0);
	(function() { $(li).effect('opacity', { duration: 500 }).start('1') }).delay(150 * pos);

    //li.style.display = 'none';
    //setTimeout('new Effect.Appear(\'li' + id + '\', { duration: 0.5 })', 150 * pos);
  },

  // Cambia de sección, cargando los datos de la dirección /proveedor{seccion} que devuelve los datos con el formato:
  // <?xml version="1.0" encoding="iso-8859-1"?>
  // <datos>
  //  <dato>
  //   reproductor.nuevoObjeto( { id: id,
  //                              miniatura: 'miniatura',
  //                              descripcion: 'descripcion',
  //                              anuncio: 'anuncio',
  //                              tipo: 'tipo',
  //                              informacion: 'informacion' } );
  //  </dato>
  // </datos>
  //
  // Se recorren todos los nodos <dato> y se ejecuta la instrucción javascript que contienen.
  cambiaSeccion:function(seccion) {
  	this.reiniciar();

    $('categorias').style.display = 'none';

    $('titulo').style.background = 'url(/resources/i/cabecera_' + seccion + '.jpg)';

    reproductor.__seccion = seccion;

  	var xhr = new XHR({method: 'get', encoding: 'iso-8859-1',
  		onSuccess: seccionCargada,
  		onFailure: errorCargando,
  		onRequest: cargando
  	});
  	xhr.send('proveedor' + seccion, 'rnd=' + Math.random());
   },

  // Carga el archivo XML de categorías de cada árbol, lo recorre y va pidiendo los XML de los contenidos de cada una
  cargaConCategorias:function(seccion, reproducir) {
  	$('categorias').style.display = 'block';
    var id;
    switch(seccion) {
      case "Vídeos":
        id = 1;
        break;
      case "Audios":
        id = 8;
        break;
      case "Animaciones":
        id = 9;
        break;
      case "Fotos":
        id = 14;
        break;
      case "Móviles":
        id = 17;
        break;
    }

    reproductor.__auto = reproducir;

	var xhr = new XHR({ method: 'get', encoding: 'iso-8859-1',
      onSuccess:categoriaCargada,
      onFailure:errorCargando
	});
	xhr.send('/default.asp?tipo=categoria', 'id=' + id + '&rnd=' + Math.random());
  },

  // Muestra un mensaje de error
  error: function() {
    this.mensaje('Error cargando datos', true);
  },

  mensaje:function(texto, error) {
    $('mensajes').style.display = 'none';

  	var mensajes = $('mensajes');
  	mensajes.className = error ? 'error' : '';
  	mensajes.firstChild.data = texto;

    $('mensajes').style.display = 'block';
    //new Effect.Appear('mensajes', { duration: 0.5 });
  },

  quitarMensaje:function() {
  	$('mensajes').style.display = 'none';
  },

  __paginas:function() {
    return Math.ceil(this.__cuenta / this.__elementosPorPagina);
  }
}

// Llamado cuando se termina de cargar una categoría.
// Crea las pestañas para cada
function categoriaCargada(transport) {
  var xml = this.transport.responseXML;
  if(xml.documentElement == null) {
  	errorCargando();
  	return;
  }

  var categoria = xml.documentElement;
  reproductor.__xml = categoria;

  var categorias = categoria.getElementsByTagName('categoria');
  if(categorias == null || categorias.length > 0) {
    for(var i = 0; i < categorias.length; i++) {
      var cat = categorias[i];
      if(cat.getAttribute("estado") != "2") {
        reproductor.nuevaCategoria( { id: cat.getAttribute("id"), nombre: cat.firstChild.firstChild.data, Orden: cat.getAttribute("orden") } );
      }
    }

    categoria = categoria.getElementsByTagName('categoria')[0];
    reproductor.cambiaCategoria(categoria.getAttribute("id"), reproductor.__auto);
  }

  setTimeout('reproductor.quitarMensaje()', 500);
  reproductor.quitarMensaje();

  var primerEnlace = $('categorias').getElementsByTagName('a')[0];
  if(primerEnlace != null) {
    primerEnlace.focus();
  }
};

function cargando() {
  reproductor.mensaje('Cargando datos');
};

function seccionCargada(transport) {
  $('mensajes').style.display = 'none';

  var xml = this.transport.responseXML;
  if((xml && xml.documentElement) != null) {
    var datos = xml.documentElement;
    for(var i = 0, longitud = datos.childNodes.length; i < longitud; i++) {
      var dato = datos.childNodes[i];
      if(dato.nodeName == 'dato') {
        eval(copiaXml(dato));
      }
    }
  } else {
      reproductor.cargaConCategorias(reproductor.__seccion);
  }
  reproductor.pintaPaginacion();
};

function copiaXml(dato) {
  var s = "";
  for(var i = 0, maximo = dato.childNodes.length; i < maximo; i++) {
    var nodo = dato.childNodes[i];
    if(nodo.nodeName == '#text') {
      s += nodo.data;
    } else {
      s += "<" + nodo.nodeName;
      for(var j = 0; j < nodo.attributes.length; j++) {
        s += " " + nodo.attributes[j].name + '="' + nodo.attributes[j].value + '"';
      }

      var hijos = copiaXml(nodo);
      if(hijos != '') {
        s += ">" + hijos + "</" + nodo.nodeName + ">";
      } else {
        s += "/>";
      }
    }
  }

  return s;
};

function errorCargando(transport) {
  setTimeout('reproductor.error()', 500);
};

function cambiaCategoria() {
  reproductor.cambiaCategoria(this.nid);
};

function cambiaPagina() {
  reproductor.cambiaPagina(this.pagina);
};

function cambiaPaginaDirecta() {
  reproductor.cambiaPagina(this.previousSibling.value - 1);
};

function reproducir() {
  var objeto = this;
  while(objeto != null && objeto.nid == undefined) {
    objeto = objeto.parentNode;
  }
  reproductor.reproducir(objeto.nid);
  this.anterior = this.className;
};

function mouseOverElemento() {
  this.anterior = this.className;
  if(this.className.substring(0, 3) == 'des') {
    this.className = 'destacadoactivo';
  } else {
    this.className = 'activo';
  }
};

function mouseOutElemento() {
  this.className = this.anterior;
};

function selecciona() {
  this.select();
};

function activaDatos() {
  var listas = $('datos').getElementsByTagName('dl');
  for(var i = 0, maximo = listas.length; i < maximo; i++) {
    var lista = listas[i];
    lista.style.display = (lista.id == this.lista) ? 'block' : 'none';
  }

  var pestanas = $('pestanas').getElementsByTagName('li');
  for(var i = 0, maximo = pestanas.length; i < maximo; i++) {
    var pestana = pestanas[i];
    pestana.className = (pestana == this) ? 'activa' : '';
  }
};

function inicializaReproductor() {
  colocaMensaje();

  var trozos = window.location.search.substring(1).split('&');
  for(var i = 0, max = trozos.length; i < max; i++) {
    var trozos2 = trozos[i].split('=');
    if(trozos2[0] == 'item') {
      var id = trozos2[1];
      var xhr = new XHR({ method: 'get', encoding: 'iso-8859-1',
        onSuccess:function(transport) {
          var objeto = reproductor.__rellenaObjeto(this.transport.responseXML.documentElement, true);
          reproductor.reproducir(objeto);
        },
        onFailure:errorCargando
      });
      xhr.send('/default.asp?tipo=contenido&id=' + id + '&random=' + Math.random());
    }
  }
};

function colocaMensaje() {
  var pos = $('listado').getPosition();
  var mensajes = $('mensajes');
  mensajes.style.left = (pos.x + 10) + 'px';
  mensajes.style.top = (pos.y + 100) + 'px';
};


function abreFlash(ruta, ancho, alto) {
	var fondo = new Element('div', { id: 'fondo' }).injectInside($('contenedor'));
	fondo.style.height = $(document.body).getSize().size.y + 'px';
	fondo.style.width = window.getWidth() + 'px';
	fondo.setStyles( {
		'position': 'absolute',
		'background': '#000',
		'top': 0,
		'left': 0,
		'z-index': 10
	} );

	fondo.setOpacity(0.5);

	var div = document.getElementById('reproductorFlash');
	if(div != null) {
		div.innerHTML = '';
		div.parentNode.removeChild(div);
	}

	var div = new Element('div');
	div.id = 'reproductorFlash';
	div.style.border = '10px solid black';
	div.style.width = Number(ancho);
	div.style.height = Number(alto) + 20 + 'px';
	div.style.position = 'absolute';
	div.style.backgroundColor = 'black';
	div.style.left = (document.documentElement.clientWidth - ancho) / 2 + 'px';
	div.style.top = (document.documentElement.clientHeight - alto) / 2 + 'px';
	div.style.textAlign = 'right';
	div.setStyle('z-index', 15);

	var enlace = document.createElement('a');
	enlace.onclick = fondo.onclick = function() {
		var div = document.getElementById('reproductorFlash');
		div.innerHTML = '';
		div.parentNode.removeChild(div);

		$('fondo').remove();
	}
	enlace.appendChild(document.createTextNode('Cerrar'));
	enlace.href = "javascript: void(0)";
	div.appendChild(enlace);

	var divFlash = document.createElement('div');
	divFlash.id = 'flash';
	div.appendChild(divFlash);

	$('contenido').appendChild(div);

	var so = new SWFObject(ruta, ruta, ancho, alto, 2, "#00000");
	so.addParam("wmode", "transparent");
	so.write("flash");
};

parpadeo = function() {
	$(a).effect('color', { duration: 500 }).start('#f60').chain(function() { $(a).effect('color', {duration: 500}).start('#d0e4a7') })
};

window.addEvent('load', inicializaReproductor);
window.addEvent('resize', colocaMensaje);