Guest User

Untitled

a guest
Jun 19th, 2011
213
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var url_ajax_musica='widgets/musica/ajax.php?ajax=1';
  2.  
  3.  
  4.  
  5. // Con esta funcion controlamos la carga que llevamos hecha del widget
  6. function controlCargaWidgetMusica(idWid){
  7. // 1. Se carga el inicio
  8. // 2. Busquedas
  9. // 3. Listas propias
  10. // 4. Listas Compartidas
  11.  
  12. if($("#"+idWid+" .todo_musica").css("opacity") == "0"){
  13. var divPrecarga = $("#"+idWid+" .precargaWidget");
  14.  
  15. if(divPrecarga.attr("carga") == divPrecarga.attr("max")){
  16. // Se ha cargado el widget, mostramos el widget y ocultamos el div de precarga del widget
  17. proporcionInterfazMusica(idWid);
  18. divPrecarga.hide();
  19. $("#"+idWid+" .musica").addClass("cristal").find(".todo_musica").css("opacity", "1");
  20. }else{
  21. // Aumentamos un paso el proceso de carga
  22. var n = parseInt(divPrecarga.attr("carga")) + 1;
  23. divPrecarga.attr("carga", n);
  24. divPrecarga.find(".infoPrecarga .num").text( (n * 20) + "%");
  25. }
  26. }
  27. }
  28.  
  29.  
  30.  
  31. function ejecutaCancionEnCola(cancionEnCola){
  32. // Recojemos el ID y lo mandamos
  33. aLaConsola(cancionEnCola.text());
  34. var partes = cancionEnCola.text().split("|"),
  35. idWid = partes[0],
  36. cancion = partes[1],
  37. nombreCancion = partes[2],
  38. duracion = partes[3],
  39. nombreUsuario = partes[4],
  40. imgUsuario = partes[5];
  41.  
  42. // ID_VIDEO_YT||NOMBRE CANCION||DURACCION||NOMBRE_USUARIO||IMG_PERFIL::
  43. cadena = cancion + "||" + nombreCancion + "||" + duracion + "||" + nombreUsuario + "||" + imgUsuario+ "::";
  44. // Lista temporal
  45. listaTemporalMusica(idWid, cadena, cancion);
  46.  
  47. // Vaciamos el input de cancion en cola por si acaso se da el caso que vuelve a llamarse a esta funcion indeseadamente
  48. cancionEnCola.text("");
  49. }
  50.  
  51.  
  52. function iniciarWidgetMusica(id_wid){
  53. var wid = $("#"+id_wid),
  54. centro = $("#centro_musica_"+ id_wid+" .inicioActual"),
  55. player = wid.find("div.musica div.player"),
  56. cancionEnCola = wid.find(".cancionEnCola"),
  57. ytplayer = document.getElementById("myytplayer"+id_wid);
  58.  
  59. // Lo ponemos lo alto de la pantalla
  60. wid.find(".musica").height($(window).height()-$("#cabeza").height()-$("#status_bar_widgets").height()-60);
  61.  
  62. // Aumentamos un paso
  63. controlCargaWidgetMusica(id_wid);
  64.  
  65. // Capa de cargando
  66. capaCargando(id_wid);
  67.  
  68. // Movemos la barra arriba por si acaso
  69. centro.scrollTop(0);
  70.  
  71.  
  72. // Los paneles laterales
  73. UltimasBusquedasMusica(id_wid);
  74. listaFavoritosMusica(id_wid, 1);
  75. listaFavoritosMusica(id_wid, 2);
  76.  
  77. // Cargamos el inicio
  78. $.post(url_ajax_musica+'&s=1',{idWid:id_wid}, function(data){
  79. centro.html(data);
  80.  
  81. // Aumentamos un paso
  82. controlCargaWidgetMusica(id_wid);
  83.  
  84. // Si hay una cancion en cola
  85. if(cancionEnCola.text().length > 0){
  86. if(ytplayer){
  87. ejecutaCancionEnCola(cancionEnCola);
  88. }
  89. }else{
  90. // Borramos la capa cargando
  91. wid.find(".capaCargando").remove();
  92. }
  93.  
  94. });
  95.  
  96. // Hacemos el widget redimensionable
  97. musicaRedimensionable();
  98.  
  99. // SLIDER BARRA REPRODUCCION
  100. player.find(".barraReproduccion" ).slider({
  101. orientation: "horizontal",
  102. range: "min",
  103. max: 100,
  104. value: 0,
  105. start: function(event, ui) {
  106. // Al empezar. Añadimos al slider un atributo = 1 de que se está deslizando
  107. $(this).attr("deslizando", "1");
  108. },
  109. slide: function(event, ui) {
  110. // Movemos los segundos
  111. ytplayer = document.getElementById("myytplayer"+id_wid);
  112.  
  113. var duracion = ytplayer.getDuration(),
  114. valor = ui.value,
  115. total=(valor*duracion)/100;
  116.  
  117. player.find(".time" ).text(pasaSegundos(total));
  118. },
  119. stop: function(event, ui) {
  120. $(this).attr("deslizando", "0");
  121. ytplayer = document.getElementById("myytplayer"+id_wid);
  122.  
  123. // Desplazariamos la cancion hasta ahi
  124. var duracion = ytplayer.getDuration(),
  125. valor = ui.value,
  126.  
  127. total=(valor*duracion)/100,
  128. total=total.toFixed(0);
  129.  
  130.  
  131. ytplayer.seekTo(total, true);
  132.  
  133. // Movemos el div de barra cargado para que empieze desde ese punto
  134. var total = (100 - ui.value);
  135. player.find(".barraCargado").width("0%").parent().css({"padding-left": ui.value +"%"});
  136. }
  137. });
  138.  
  139. // La desabilitamos por el momento
  140. player.find(".barraReproduccion").slider("disable");
  141.  
  142. // Ponemos dentro de barraReproduccion una barra que refleje lo cargado
  143. player.find(".barraReproduccion").append("<div class='contenedorBarraCargando'><div class='barraCargado tooltip' tooltip=''></div></div>");
  144.  
  145. // SLIDER VOLUMEN
  146. // Le aplicamos el efecto slider a la barra del volumen
  147. player.find("div.acciones div.cajaVolumen div.barraVolumen").slider({
  148. orientation: "vertical",
  149. range: "min",
  150. min: 0,
  151. max: 100,
  152. value: 100,
  153.  
  154. slide: function( event, ui ) {
  155. var vol = ui.value,
  156. div = $(this).parents("div.btnVolumen");
  157.  
  158. actualizaVolumen(vol, div, id_wid);
  159. }
  160. });
  161.  
  162. // SLIDER TAMAÑO VIDEO
  163. // Le aplicamos el efecto slider a la barra del volumen
  164. player.find("div.controlVideo div.cajaDimensionVideo div.barraDimensionVideo").slider({
  165. orientation: "vertical",
  166. range: "min",
  167. min: 130,
  168. max: 380,
  169. value: 130,
  170.  
  171. slide: function( event, ui ) {
  172. // Actualizamos el tamaño del video
  173. actualizaTamVideo($(this), ui.value);
  174. }
  175. });
  176.  
  177. }
  178.  
  179.  
  180. function actualizaTamVideo(div, tam){
  181. var idWid = div.parents(".widget").attr("id"),
  182. video = $("#myytplayer"+ idWid),
  183. left = video.parents(".uispoty-left"),
  184. height = video.height(),
  185. width = video.width(),
  186. hNuevo = tam;
  187.  
  188.  
  189. if(hNuevo >= 130 && hNuevo <= 380){
  190. // Sacamos el width proporcional
  191. var wNuevo = (width * hNuevo) / height;
  192.  
  193. left.css({"width": wNuevo + "px", "max-width": wNuevo + "px"});
  194. video.height(hNuevo).width(wNuevo);
  195. proporcionInterfazMusica(idWid);
  196. }
  197. }
  198.  
  199.  
  200.  
  201. function actualizaVolumen(vol, div, id_wid){
  202. if(vol <= 100 && vol >=0){
  203. if(vol == 0){
  204. div.find(".volumen").addClass("volumenMute");
  205. div.find(".volumenSilenciando").hide();
  206. }else{
  207. div.find(".volumen").removeClass("volumenMute");
  208. div.find(".volumenSilenciando").show();
  209.  
  210. div.find(".volumenSilenciando").height( (100 - vol) + "%");
  211. }
  212.  
  213. div.attr("tooltip", vol)
  214. $("#tooltip").text(vol);
  215. ytplayer = document.getElementById("myytplayer"+id_wid);
  216. ytplayer.setVolume(vol);
  217. }
  218. }
  219.  
  220.  
  221. // Funcion que sirve para habilitar que se pueda redimensionar el widget de videojuegos
  222. function musicaRedimensionable(){
  223. var musica = $(".musica");
  224.  
  225. musica.resizable("destroy");
  226. musica.resizable({
  227. maxHeight: maximo_top_ver_escritorio - 30,
  228. maxWidth: maximo_left_ver_escritorio - 30,
  229. minHeight: 300,
  230. minWidth: 300,
  231.  
  232. autoHide:true,
  233. helper: "ui-resizable-helper",
  234.  
  235.  
  236.  
  237. // MIentras se va redimensionando. Otros eventos: Start, stop.
  238. stop: function(event, ui) {
  239. id_wid=$(this).parent().attr('id');
  240. proporcionInterfazMusica(id_wid);
  241. $("#"+id_wid+" .supermaximizar").text('');
  242. }
  243. });
  244. }
  245.  
  246.  
  247.  
  248. // Sirve para proporcionar el widget de videojuegos a medida que se amplia o disminuye
  249. function proporcionInterfazMusica(id_widget){
  250. var w_wid = $("#"+id_widget+" .uispoty"),
  251. w_head = w_wid.find(".uispoty-head"),
  252. w_content = w_wid.find(".uispoty-content"),
  253. w_left = w_wid.find(".uispoty-left")
  254. w_todosBloques = w_left.find(".todosBloques"),
  255. w_centro = w_wid.find(".uispoty-centro"),
  256. w_listadoCanciones = w_centro.find(".uispoty-content .listadoCanciones"),
  257.  
  258.  
  259. w_player = w_wid.find(".player"),
  260. w_controles = w_player.find(".controles"),
  261. w_controlVideo = w_player.find(".controlVideo"),
  262. w_estado = w_player.find(".estado"),
  263. w_acciones = w_player.find(".acciones"),
  264.  
  265. divCapaCargando = w_wid.find(".capaCargando"),
  266.  
  267. // La medida del height
  268. h = w_wid.height()-(w_head.outerHeight(true) + w_player.outerHeight(true) + 8), // 7 es para que quede bien visualmente
  269.  
  270. // Ancho del centro
  271. w = w_head.outerWidth(true) - w_left.outerWidth(true); // Sacamos el ancho del panel central
  272. w_centro.width(w-2); // Margen izquierdo gris claro del centro_juegos
  273.  
  274. // Left
  275. w_left.height(h);
  276.  
  277. // Div con bloques del left
  278. w_repActual=w_left.find(".repActual").outerHeight(true);
  279. w_todosBloques.height(h-w_repActual+2);
  280.  
  281.  
  282. // El centro
  283. w_centro.height(h);
  284.  
  285. // Existe un listado de canciones en alguno de los divs
  286. w_listadoCanciones.each(function(){
  287. var div = $(this),
  288. h_listado = h - div.parents(".uispoty-content").find(".cabezaLista").actual("outerHeight");
  289.  
  290. div.height(h_listado);
  291. })
  292.  
  293.  
  294. // Barra del player
  295. w_estado.width( w_wid.width() - (w_controles.width() + w_controlVideo.width() + w_acciones.width()) - 30);
  296. w_estado.find(".barraReproduccion").width( w_estado.width() - (w_estado.find(".time").width() + w_estado.find(".time2").width() + 22) );
  297.  
  298. // Si existe el div de loading lo adaptamos
  299. if(divCapaCargando.length > 0){
  300. var wCentro = w_centro.width(),
  301. hCentro = w_centro.height();
  302. divCapaCargando.find(".bgCapaCargando, .iconoCapaCargando").width(wCentro).height(hCentro);
  303. }
  304.  
  305. // Se llaman de nuevo a crear los scrolls bars: El scroll de los paneles de la izquierda, y el scroll del centro
  306. w_wid.find(".scrollPersonalizado, .listadoCanciones").jScrollPane();
  307. }
  308.  
  309.  
  310.  
  311.  
  312. // Esta funcion hace a las filas droppables para que detecten el drop de otra cancion
  313. // Tb hace a las listas donde tenemos permisos droppables para añadir una cancion a favoritos
  314. function creaDroppablesCancion(){
  315. // Añadir cancion a favoritos
  316. var divs = $("div.widget div.musica div.favoritos li div[p='1'], div.widget div.musica div.favoritos_compartidos li div[p='1']");
  317.  
  318. divs.droppable("destroy");
  319. divs.droppable({
  320. hoverClass: "listaActiva",
  321. accept: ".esCancion",
  322. tolerance: 'pointer',
  323. over: function( event, ui ) {
  324. // Cuando entra en una lista
  325. $(".ghost-x-cancion .img").addClass("dropping");
  326. },
  327. out: function( event, ui ) {
  328. // Cuando sale de la lista
  329. $(".ghost-x-cancion .img").removeClass("dropping");
  330. },
  331. drop: function( event, ui ) {
  332. var cancion = $(ui.draggable).find(".enlaceVideo"),
  333. idLista = $(this).attr("lista"),
  334. idVideo = cancion.attr("video"),
  335. tiempo = cancion.find(".time").text(),
  336. nombre = cancion.find(".nmb").attr("title");
  337.  
  338. $.post(url_ajax_musica+"&s=27",{idVideo:idVideo, idLista:idLista, tiempo:tiempo, nombre:nombre});
  339.  
  340. // Marcamos el corazon
  341. $(ui.draggable).find(".enlaceVideo .fav").addClass("favActivo");
  342. }
  343. });
  344.  
  345. // Ordenar canciones
  346. divs = $("div.widget .listadoCanciones[o!='no'] .esCancion[relacionado != '1']");
  347. divs.droppable("destroy");
  348. divs.droppable({
  349. hoverClass: "reordenarCancion",
  350. accept: ".esCancion[relacionado != '1']",
  351. tolerance: 'pointer',
  352. out: function( event, ui ) {
  353. // Cuando sale de la cancion donde quiere ponerlo despues
  354. $(".ghost-x-cancion .img").removeClass("entremedias");
  355. },
  356. over: function( event, ui ) {
  357. // Cuando entra en la cancion donde quiere ponerlo despues
  358. $(".ghost-x-cancion .img").addClass("entremedias");
  359. },
  360. drop: function( event, ui ) {
  361. var cancionDraggable = $(ui.draggable), //La cancion que está arrastrando
  362. cancionDroppable = $(this),
  363. canciones = '',
  364. divNext = '',
  365. listaCanciones = cancionDroppable.parents(".listadoCanciones");
  366.  
  367. // Añadimos justo debajo la cancion
  368. // Si el div siguiente a cancionDraggable tiene la clase
  369. if(cancionDraggable.next().hasClass("videosRelacionados")){
  370. divNext = cancionDraggable.next();
  371. }
  372. cancionDroppable.after(cancionDraggable);
  373. if(divNext.length > 0){
  374. cancionDraggable.after(divNext);
  375. }
  376.  
  377. // Array y lo mandamos por ajax
  378. listaCanciones.find("div.esCancion div.enlaceVideo").each(function(){
  379. var div = $(this),
  380. idCancion = div.attr("video");
  381. canciones += idCancion + "||";
  382. });
  383.  
  384. // Mandamos el post
  385. $.post(url_ajax_musica+'&s=11',{idLista:listaCanciones.attr("idLista"), canciones:canciones});
  386.  
  387. // Recoloreamos
  388. recolorea($(this).parents(".uispoty-centro").attr("id_widget"));
  389.  
  390. // Copiamos el html al div oculto si las listas que estamos viendo son las
  391. // determinamos que capa es la de ahora
  392. var centro = listaCanciones.parents(".uispoty-centro"),
  393. content = centro.find(".uispoty-content:visible"),
  394. capa;
  395. if(centro.find(".listaActual div[idUnico]").attr("idUnico") == centro.find(".busquedaActual div[idUnico]").attr("idUnico")){
  396. if(content.hasClass("listaActual")){
  397. capa = centro.find(".busquedaActual");
  398. }else{
  399. capa = centro.find(".listaActual");
  400. }
  401.  
  402. capa.html(content.html()).find(".videoSeleccionado").removeClass("videoSeleccionado");
  403. // Como estaba draggando se keda la clase fila draggando y el tooltip por que como el draggable tiene reverse aun no ha vuelto cuando hacemos el drop.
  404. capa.find(".filaDraggando").removeClass("filaDraggando");
  405. capa.find(".ghost-x-cancion").remove();
  406. creaDroppablesCancion();
  407. }
  408. }
  409. });
  410. }
  411.  
  412.  
  413.  
  414.  
  415. // Funcion de busqueda de musica
  416. function buscaMusica(txt, id_wid, ejecutar_ultimas_palabras, pag){
  417. var wid = $("#"+id_wid),
  418. centro = wid.find(".uispoty-centro"),
  419. busqueda = centro.find(".busquedaActual"),
  420. left = wid.find(".uispoty-left");
  421.  
  422.  
  423. if(pag==1){
  424. // Mostramos la capa de cargando
  425. capaCargando(id_wid);
  426. }
  427.  
  428. left.find(".bloqueSpoty div").removeClass('activo');
  429.  
  430.  
  431.  
  432. //wid.find(".viendoRepActual").text('0');
  433. left.find(".fijos .enlaceBusquedaActual").addClass("activo");
  434.  
  435. if(ejecutar_ultimas_palabras==1){
  436. var ampliar="&ultimas=1";
  437. }else{
  438. var ampliar='';
  439. }
  440.  
  441. if(pag==1){
  442. var i = 0;
  443. }else{
  444. var i = busqueda.find(".esCancion:last").find(".enlaceVideo").attr('num');
  445. }
  446.  
  447. $.post(url_ajax_musica+'&s=2'+ampliar,{palabra:txt, id_wid:id_wid, pag:pag, i:i}, function(data){
  448.  
  449. // Ocultamos los uispoty-contents y mostramos solo el busquedaActual
  450. centro.find(".uispoty-content").hide();
  451. busqueda.show();
  452.  
  453. // Si la pagina es uno es que está haciendo una nueva busqueda, no tiene que añadir contenido a la busqueda anterior
  454. if(pag==1){
  455. busqueda.html(data);
  456. busqueda.find(".listadoCanciones").scrollTop(0);
  457. }else{
  458. busqueda.find(".loadMusica").remove();
  459. busqueda.find(".listadoCanciones .todotodo").append(data);
  460. }
  461.  
  462. // Droppables
  463. creaDroppablesCancion();
  464.  
  465. // Detectamos el evento Scroll
  466. eventoScrollListaMusica();
  467.  
  468. // Coloreamos las filas par y impar
  469. recolorea(id_wid);
  470.  
  471. if(pag==1){
  472. // Borramos la capa cargando
  473. wid.find(".capaCargando").remove();
  474. }
  475.  
  476. // Le adaptamos el scrollbar mejorado
  477. wid.find(".listadoCanciones:visible").jScrollPane();
  478.  
  479.  
  480. });
  481.  
  482. }
  483.  
  484.  
  485.  
  486.  
  487. // Reproducir cancion
  488. // cambiar sirve para indicarle si cambia y copia la lista que va a reproducir o no
  489. function cargaCancion(id_wid, idVideo, nombreVideo, cambiar){
  490. ytplayer = document.getElementById("myytplayer"+id_wid); // No se por que con jquery no lo recupera bien
  491.  
  492. while(!ytplayer){
  493. ytplayer = document.getElementById("myytplayer"+id_wid); // No se por que con jquery no lo recupera bien
  494. }
  495.  
  496. // Cachemos los objetos
  497. var wid = $("#"+id_wid),
  498. centro = wid.find(".uispoty-centro"),
  499. content = centro.find(".uispoty-content:visible"),
  500. left = wid.find(".uispoty-left"),
  501. repActual = centro.find(".reproduccionActual")
  502. estado = wid.find(".player .estado");
  503.  
  504.  
  505. wid.find(".scrollPersonalizado").jScrollPane();
  506.  
  507. // Ponemos en el input la cancion actual que reproduce ese player
  508. wid.find(".idCancionActual").val(idVideo);
  509.  
  510. // cargamos la cancion
  511. ytplayer.cueVideoById(idVideo);
  512. ytplayer.playVideo();
  513.  
  514.  
  515. // Si la lista que hay en reproduccion actual no es la misma que la que vamos a reproducir
  516. // Copiamos el html de la lista actual al div de reproduccion actual, y cambiamos a esa lista
  517. if(cambiar == 1 && repActual.is(":visible") == false ){
  518.  
  519. repActual.html(content.find(".cabezaLista")).append(content.find(".listadoCanciones")).show();
  520. centro.find(".uispoty-content:not(.reproduccionActual)").hide();
  521. wid.find(".scrollPersonalizado").jScrollPane();
  522. // Desmarcamos lo anterior y marcamos el enlace de reproduccion actual
  523. left.find("li div").removeClass("activo");
  524. left.find("li div.enlaceRepActual").addClass('activo');
  525. // intentamos posicionar la lista a la altura de la cancion actual
  526. posicionaCancion(wid);
  527. }
  528.  
  529. // Marcamos la cancion que va a reproducirse, y desmarcamos la anterior
  530. repActual.find(".videoActivo").removeClass("videoActivo videoSeleccionado"); // Borramos la anterior
  531. repActual.find("div[video='"+idVideo+"']").parent().addClass("videoActivo");
  532.  
  533.  
  534.  
  535. // Ponemos el nombre de la cancion a la marquee y le aplicamos el efecto
  536. left.find(".nombreActual li").attr("title", nombreVideo).text(nombreVideo);
  537. /*
  538. var m = left.find("#marquee");
  539. if(m.length > 0){
  540. m.marquee();
  541. }
  542. */
  543.  
  544. wid.find(".reproduciendo").text(''); // Lo vaciamos para despues saber cuando se ha empezado a reproducir la cancion por si se para y luego sigue no seguir ejecutando acciones.
  545.  
  546.  
  547.  
  548.  
  549.  
  550. // Ponemos la interfaz en las dimensiones correctas
  551. //proporcionInterfazMusica(id_wid);
  552.  
  553. // Habilitamos el slider de nuevo
  554. estado.find(".barraReproduccion").slider("enable");
  555.  
  556. // Establecemos las infos visuales a 0
  557. estado.find(".barraReproduccion" ).addClass("loadMusica").slider("value", 0);
  558. estado.find(".time, .time2").text('0:00');
  559. estado.find(".cargado .kbTotal").text("-"); // Le ponemos los KB que tiene la cancion
  560. estado.find(".cargado .kbCargado, .estado .cargado .porcentaje .numero").text("-"); // Ponemos el porcentaje y los KB cargados a cero
  561.  
  562. // Ponemos la barraCargado a 0
  563. estado.find(".barraReproduccion .barraCargado").width("0%").attr("tooltip","").parent().css({"padding-left":"0%"});
  564. }
  565.  
  566.  
  567.  
  568.  
  569. // Sacamos de lastfm la caratula de la cancion
  570. function buscaCaratula(nombre){
  571. $.post(url_ajax_musica+'&s=4',{nombre:nombre}, function(data){
  572. $("#"+ id_wid+" .caratulaCancion").html(data);
  573. $("#loading_musica_"+ id_wid).hide();
  574. });
  575. }
  576.  
  577. // Ultimas busquedas
  578. // Si le pasamos un id para borrar borrará el termino
  579. function UltimasBusquedasMusica(id_widget, borrar){
  580. var idBorrar;
  581.  
  582. if(borrar){
  583. idBorrar = borrar;
  584. }
  585.  
  586. $.post(url_ajax_musica+'&s=5',{borrar:idBorrar, idWid:id_widget},function(data){
  587. $("#"+id_widget+" .busquedas").html(data);
  588. // Aumentamos un paso
  589. controlCargaWidgetMusica(id_widget);
  590. });
  591. }
  592.  
  593.  
  594. // Listas favoritos
  595. // Cargamos las listas de favoritos
  596. function listaFavoritosMusica(id_wid, tipo, lista){
  597. var left = $("#"+id_wid+" .uispoty-left");
  598.  
  599. $.post(url_ajax_musica+'&s=6', {tipo:tipo, idWid:id_wid, tipoAccion:1}, function(data){
  600. if(tipo == 1){
  601. left.find(".favoritos").html(data);
  602. left.find(".favoritos li div[lista='"+lista+"']").addClass('activo');
  603. }else{
  604. left.find(".favoritos_compartidos").html(data);
  605. left.find(".favoritos_compartidos li div[lista='"+lista+"']").addClass('activo');
  606. }
  607.  
  608. // Aumentamos un paso
  609. controlCargaWidgetMusica(id_wid);
  610.  
  611. // Droppables
  612. creaDroppablesCancion();
  613.  
  614. // Creamos el sortable para las listas
  615. left.find(".favoritos_compartidos ul, .favoritos ul").sortable({
  616. containment: 'parent',
  617. tolerance: 'pointer',
  618. placeholder: "ui-state-highlight",
  619. axis:"y",
  620. update: function( event, ui ) {
  621. /*
  622. // Recorremos todas las listas
  623. var n = 0,
  624. todasListas = '',
  625. idLista = ui.item.find("div[lista]").attr("lista");
  626.  
  627.  
  628. $(this).parents(".bloqueSpoty").find("li div[lista]").each(function(){
  629. // El ID de la lista que está arrastrando
  630. if($(this).attr("lista") == idLista || $(this).attr("peso") == '255'){
  631. todasListas += $(this).attr("lista") + ":" + n + "::";
  632. $(this).attr("peso", n);
  633. }
  634. n++;
  635. });
  636. */
  637.  
  638. var todasListas = '';
  639. $(this).parents(".bloqueSpoty").find("li div[lista]").each(function(){
  640. todasListas += $(this).attr("lista") + "::";
  641. });
  642.  
  643. $.post(url_ajax_musica+'&s=36', {listas:todasListas});
  644.  
  645. }
  646. });
  647. });
  648. }
  649.  
  650.  
  651.  
  652. // Guardamos la lista creada
  653. function guardarListaMusica(id_wid, txt){
  654. var left = $("#"+id_wid+" .uispoty-left"),
  655. bloque = left.find(".bloqueSpoty"),
  656. input = bloque.find(".input_lista_nueva"),
  657.  
  658. scroll = left.find(".scrollPersonalizado");
  659.  
  660.  
  661.  
  662. input.attr("disabled", true);
  663. if(txt.length > 0 && input.attr("hint") != txt){
  664. $.post(url_ajax_musica+'&s=6', {nombre:txt, idWid:id_wid, tipoAccion:3}, function(data){
  665. if(left.find(".favoritos ul").length > 0){
  666. left.find(".favoritos ul").append(data);
  667. }else{
  668. left.find(".favoritos").html('').append("<ul>" + data + "</ul>");
  669. }
  670.  
  671. // Actualizamos scroll
  672. scroll.jScrollPane();
  673. var api = scroll.data('jsp');
  674. api.scrollTo(0, left.find(".todosBloques").outerHeight(true) + 300);
  675. });
  676. }
  677. bloque.find(".form_lista_nueva").hide();
  678. bloque.find(".boton_lista_nueva").show();
  679. // Actualizamos scroll
  680. scroll.jScrollPane();
  681. var api = scroll.data('jsp');
  682. api.scrollTo(0, left.find(".todosBloques").outerHeight(true) + 300);
  683. }
  684.  
  685.  
  686.  
  687.  
  688. // Funcion para cuando quiere modificar una lista
  689. function ModificarListaMusica(id_wid, txt, lista){
  690. var bloque = $("#"+id_wid+" .uispoty-left .bloqueSpoty"),
  691. divLista = bloque.find('li div[lista="'+lista+'"]'),
  692. nombreOriginal = divLista.attr("nOriginal"),
  693. listaMarcada = 0;
  694.  
  695. if(nombreOriginal != txt && txt.length>0){
  696. divLista.html('<img src="img/uispoty/load.gif">').find(".modLista").hide(); // Ocultamos el input del mod y ponemos el load...
  697.  
  698. // Post para modificar la lista
  699. $.post(url_ajax_musica+'&s=6', {idWid:id_wid, nombre:txt, idLista:lista, tipoAccion:2}, function(data){
  700.  
  701. // Estaba marcada
  702. if(divLista.hasClass("activo")){
  703. listaMarcada = 1;
  704. }
  705.  
  706. // Añadimos un li nuevo, borramos el li anterior
  707. divLista.parent().after(data);
  708. divLista.parent().remove();
  709.  
  710. // Marcamos de nuevo la lista
  711. if(listaMarcada == 1){
  712. bloque.find("li div[lista='"+lista+"']").addClass("activo");
  713. }
  714.  
  715. });
  716. }else{
  717. // No ha modificado el nombre, lo ha dejado igual o no ha puesto nada
  718. divLista.parent().find("div[lista]").show().parent().find(".modLista").remove();
  719. }
  720. }
  721.  
  722.  
  723.  
  724. // Sirve para crear una lista temporal con una cadena de canciones que se le pasa en la variable canciones con el siguiente formato:
  725. // ID_VIDEO_YT||NOMBRE CANCION||DURACCION||NOMBRE_USUARIO||IMG_PERFIL::
  726. // Si se le pasa la variable cancion
  727. function listaTemporalMusica(idWid, canciones, cancion){
  728. var wid = $("#"+idWid),
  729. listaActual = wid.find(".listaActual");
  730.  
  731. $.post(url_ajax_musica+'&s=30',{idWid:idWid, canciones:canciones}, function(data){
  732.  
  733. // Desmarcamos las posibles li marcadas del lateral
  734. wid.find(".uispoty-left li div").removeClass("activo");
  735.  
  736. // Ponemos lo recibido en el div, Ocultamos las capas uispoty-content
  737. wid.find(".uispoty-content").hide();
  738. listaActual.html(data).show();
  739.  
  740. // Hacemos el div de las canciones del tamaño adecuado
  741. proporcionInterfazMusica(idWid);
  742.  
  743. // Droppables de ordenar y guardar lista
  744. creaDroppablesCancion();
  745.  
  746. // Sacamos la suma de tiempo de las canciones
  747. listaActual.find(".timeLista").prepend(tiempoLista(idWid));
  748.  
  749. // Borramos la capa cargando
  750. listaActual.find(".capaCargando").remove();
  751.  
  752. // Subimos el scroll
  753. listaActual.find(".listadoCanciones").scrollTop(0);
  754.  
  755. // Damos formato a las filas
  756. recolorea(idWid);
  757.  
  758. // Si le hemos pasado una cancion la reproducimos
  759. var fila = listaActual.find(".listadoCanciones .enlaceVideo[video='"+cancion+"']");
  760.  
  761. if(cancion != undefined && fila.length > 0){
  762. cargaCancion(idWid, cancion, fila.find(".nmb").attr("title"), 1);
  763. }
  764.  
  765. });
  766. }
  767.  
  768.  
  769.  
  770.  
  771.  
  772.  
  773.  
  774.  
  775.  
  776.  
  777.  
  778. // De bytes a Kb
  779. function bytes2kb(bytes){
  780. return (bytes / 1024).toFixed(0);
  781. }
  782.  
  783.  
  784.  
  785. // Pasamos segundos a minutos:segundos
  786. function pasaSegundos(segundos){
  787.  
  788.  
  789. var minutos = Math.floor(segundos/60);
  790. segundos = segundos % 60;
  791. if(segundos<10) segundos = "0" + segundos;
  792. segundos=segundos.toString().split(".");
  793. return minutos+ ":" + segundos[0];
  794.  
  795.  
  796. }
  797.  
  798.  
  799.  
  800. // CONTROLES REPRODUCTOR
  801.  
  802. function onYouTubePlayerReady(playerId) {
  803. ytplayer = document.getElementById("myytplayer"+playerId);
  804. ytplayer.addEventListener("onStateChange", "function(e){ytCambioEstado(e, '"+playerId+"');}"); // Este evento detecta cuando el estado del video cambia y llama a la funcion
  805. ytplayer.addEventListener("onError", "function(e){ytError(e, '"+playerId+"');}"); // Si ocurre algun error llamamos a la funcion onPlayerError
  806.  
  807. // Al cargarse el player establecemos a 100 el volumen
  808. ytplayer.setVolume(100);
  809.  
  810. // Cuando cargamos una cancion desde el muro, tiene que esperar a que esté el player listo. Ponemos una cancion en espera y luego la coje
  811. var wid = $("#"+playerId),
  812. cancionEnCola = wid.find(".cancionEnCola");
  813.  
  814.  
  815. if(cancionEnCola.length > 0){
  816. ejecutaCancionEnCola(cancionEnCola);
  817. }
  818. }
  819.  
  820.  
  821.  
  822. function ytError(e, idWid){
  823.  
  824. switch(e){
  825. case 100: case 101: case 150:
  826. // El video ya no puede reproducirse
  827. // bora el video automaticamente por ajax de la lista y por JS visualmente.
  828. // Sigue reproduciendo la cancion siguiente.
  829. // Saca un panel con info sobre la cancion borrada.
  830. var wid = $("#"+idWid),
  831. idCancion = wid.find(".idCancionActual").val(),
  832. filaCancion = wid.find(".uispoty-content .listadoCanciones .esCancion .enlaceVideo[video='"+idCancion+"']"),
  833. idLista = filaCancion.parents(".listadoCanciones").attr("idLista"),
  834. nombreCancionAntigua = filaCancion.find(".nmb").attr("title");
  835.  
  836. // Pasamos a la cancion siguiente
  837. var capa = wid.find(".cancionSiguiente"),
  838. nuevaCancion = cancionSiguiente(capa, idCancion),
  839. nombreVideo = nuevaCancion.find(".nmb").attr("title");
  840.  
  841. cargaCancion(idWid, nuevaCancion.attr('video'), nombreVideo);
  842.  
  843. // Borramos la fila.
  844. filaCancion.parent().remove();
  845.  
  846. // Mandamos por post para que borre la cancion de la lista
  847. mensajeCentro(cargando);
  848. $.post(url_ajax_musica+'&s=35',{idLista:idLista, idCancion:idCancion, nombreCancion:nombreCancionAntigua, idWid:idWid}, function(data){
  849. $("body").append(data);
  850. centrarDiv($("#YTerror"));
  851. ocultaMensajeCentro();
  852. });
  853. break;
  854.  
  855. default:
  856. alert("Ha ocurrido un error con este video");
  857. }
  858. }
  859.  
  860.  
  861. // Cuando se cambia de estado, http://code.google.com/intl/es-ES/apis/youtube/js_api_reference.html#Events
  862. function ytCambioEstado(e, playerId){
  863. ytplayer = document.getElementById("myytplayer"+playerId);
  864. var wid = $("#"+playerId),
  865. player = wid.find(".player"),
  866. loading = $("#loading_musica_"+playerId);
  867.  
  868.  
  869. switch(e){
  870. case -1:
  871. // Cuando ha pinchado en el logo de youtube: Quita el icono de pause
  872. player.find(".play-pause").removeClass("pause");
  873. wid.find(".reproduciendo").text("0");
  874. break;
  875.  
  876. case 1:
  877. // Reproduciendose
  878. var hecho = wid.find(".reproduciendo").text();
  879. player.find(".play-pause").addClass("pause");
  880.  
  881.  
  882.  
  883. if(player.find(".barraReproduccion").hasClass("loadMusica") == true){
  884. player.find(".barraReproduccion").removeClass("loadMusica"); // Quitamos la clase que marca que está cargando la cancion
  885. }
  886.  
  887. if(hecho != 1){
  888. // Empieza a reproducirse
  889. // Activamos el timeout
  890. $.doTimeout(1000, function(){
  891. updateytplayerInfo(playerId);
  892. });
  893.  
  894.  
  895. loading.hide(); // Ocultamos cargando
  896. wid.find(".reproduciendo").text('1');
  897. player.find(".estado .time2").text(pasaSegundos(ytplayer.getDuration()));
  898.  
  899. proporcionInterfazMusica(playerId);
  900.  
  901.  
  902. var divCargado = player.find(".estado .cargado");
  903. divCargado.find(".kbTotal").text(bytes2kb(ytplayer.getVideoBytesTotal())); // Le ponemos los KB que tiene la cancion
  904. divCargado.find(".kbCargado, .porcentaje .numero").text("0"); // Ponemos el porcentaje y los KB cargados a cero
  905. }else{
  906. // Ya se estaba empezando a reproducir, quita la barra de tiempo parpadeando
  907. //aLaConsola("Ya estaba");
  908. }
  909. // Busca en
  910. break;
  911.  
  912.  
  913. case 2:
  914. // Pause
  915. player.find(".play-pause").removeClass("pause");
  916. player.find(".barraReproduccion").removeClass("loadMusica");
  917. break;
  918.  
  919.  
  920. case 3: // Almacenando en el buffer
  921. // Podriamos poner la barra del time line a cargar cambiandole el background para que parece que carga
  922. player.find(".barraReproduccion").addClass("loadMusica");
  923. break;
  924.  
  925. case 5:
  926. // En cola, no es pausado, si no que está ahi preparado, por ejemplo cuando pinchamos en el logo de youtube.
  927. player.find(".play-pause").removeClass("pause");
  928. break;
  929.  
  930. case 0: // Ha finalizado el video
  931. // Cambia a la siguiente cancion
  932. // Si el reproductor no tiene la opcion de repetir cambia.
  933. wid.find(".reproduciendo").text("0");
  934. var repetir=player.find(".estadoRepetir").text(),
  935. cancionActual=wid.find(".idCancionActual").val(),
  936. idVideoNuevo,
  937. nuevaCancion,
  938. nombreVideo;
  939.  
  940. // Si tiene la reproduccion aleatoria
  941. if(player.find(".repAleatoria").attr("aleatoria") == 1){
  942. var canciones = (player.find(".repAleatoria input").val()).split("||"),
  943. posicionCancion = 0;
  944. // Sacamos la posicion de la cancion actual
  945. for(i=0;i<canciones.length;i++) {
  946. if(canciones[i] == cancionActual) {
  947. posicionCancion = i;
  948. break;
  949. }
  950. }
  951.  
  952.  
  953.  
  954. // Si ha reproducido toda la lista aleatoria crea otra
  955. if((posicionCancion+1) == canciones.length){ // Se le suma 1 a i por que empieza desde 0
  956. // Creamos de nuevo el array
  957. var listadoCanciones = wid.find(".uispoty-centro .uispoty-content:visible .listadoCanciones");
  958. player.find(".repAleatoria input").val(cancionesAleatorias(listadoCanciones));
  959. /*
  960. Para que no se de el caso de que pueda repetirse la ultima cancion que se ha reproducido al resetear el array por ke se pone la primera,
  961. lo que hacemos es coger el id de la cancion actual y borrarlo de la cadena despues colocarselo al principio y empezamos desde el segundo valor (1).
  962. */
  963. idVideoNuevo = canciones[posicionCancion];
  964.  
  965.  
  966. canciones = player.find(".repAleatoria input").val();
  967. canciones = canciones.replace(idVideoNuevo +"||", "");
  968. canciones = canciones.replace(idVideoNuevo, ""); // Por si estaba al final
  969. canciones = idVideoNuevo + "||" + canciones;
  970. canciones = (player.find(".repAleatoria input").val()).split("||"),
  971. posicionCancion = 0;
  972. }else{
  973. posicionCancion = posicionCancion + 1;
  974. }
  975.  
  976. // Sacamos la cancion siguiente
  977. idVideoNuevo = canciones[posicionCancion];
  978.  
  979. // Cargamos la cancion
  980. nuevaCancion = wid.find(".listaActual div[video='"+ idVideoNuevo +"']");
  981. nombreVideo = nuevaCancion.find(".nmb").attr("title");
  982. cargaCancion(playerId, idVideoNuevo, nombreVideo);
  983. break;
  984. }
  985.  
  986. // Si tiene marcado repetir cancion
  987. if(repetir > 0){
  988. ytplayer.seekTo(0, true);
  989. break;
  990. }
  991.  
  992. // En caso de que tenga que pasar a la siguiente linea
  993. player.find(".play-pause").removeClass("pause");
  994. var capa = wid.find(".reproduccionActual");
  995.  
  996. nuevaCancion = cancionSiguiente(capa, cancionActual);
  997.  
  998. nombreVideo = nuevaCancion.find(".nmb").attr("title");
  999. cargaCancion(playerId, nuevaCancion.attr('video'), nombreVideo);
  1000. break;
  1001. }
  1002. }
  1003.  
  1004.  
  1005.  
  1006. function cancionSiguiente(capa, cancionActual){
  1007. // El siguiente div es videosRelacionados?
  1008. var nuevaCancion;
  1009.  
  1010. if(capa.find("div[video='"+cancionActual+"']").parent().next().hasClass("videosRelacionados")){
  1011. // Si
  1012. nuevaCancion = capa.find("div[video='"+cancionActual+"']").parent().next().find(".esCancion:not(.filaOculta):first").find('div[video]');
  1013. }else{
  1014. // No
  1015. nuevaCancion=capa.find("div[video='"+cancionActual+"']").parent().nextAll(".esCancion:not(.filaOculta):first").find('div[video]');
  1016.  
  1017. // se ha llegado al final del div?
  1018. if(nuevaCancion.length==0){
  1019. // Si
  1020. // Era el final del div de videos relacionados? o del listadoCanciones?
  1021. if(capa.find("div[video='"+cancionActual+"']").parent().parent().hasClass("videosRelacionados")){
  1022. // Si, sale del div de videos relacionados y busca la siguiente cancion
  1023. nuevaCancion = capa.find("div[video='"+cancionActual+"']").parent().parent().nextAll(".esCancion:not(.filaOculta):first").find('div[video]');
  1024. }else{
  1025. // Era el final del listadoCanciones, ponemos la primera
  1026. nuevaCancion = capa.find("div[video]:first");
  1027. }
  1028. }
  1029. }
  1030. return nuevaCancion;
  1031. }
  1032.  
  1033. function cancionAnterior(capa, cancionActual){
  1034. // El div anterior es videosRelacionados
  1035. if(capa.find("div[video='"+cancionActual+"']").parent().prev().hasClass("videosRelacionados")){
  1036. // Si
  1037. nuevaCancion = capa.find("div[video='"+cancionActual+"']").parent().prev().find(".esCancion:not(.filaOculta):last").find('div[video]');
  1038. }else{
  1039. // No
  1040. nuevaCancion=capa.find("div[video='"+cancionActual+"']").parent().prevAll(".esCancion:not(.filaOculta):first").find('div[video]');
  1041. // se ha llegado al principio del div?
  1042. if(nuevaCancion.length==0){
  1043. // Si
  1044. // Era el principio del div de videos relacionados? o del listadoCanciones?
  1045. if(capa.find("div[video='"+cancionActual+"']").parent().parent().hasClass("videosRelacionados")){
  1046. // Si, sale del div de videos relacionados y busca la cancion anterior
  1047. nuevaCancion = capa.find("div[video='"+cancionActual+"']").parent().parent().prevAll(".esCancion:not(.filaOculta):first").find('div[video]');
  1048. }else{
  1049. // Era el principio del listadoCanciones, ponemos la ultima
  1050. nuevaCancion = capa.find("div[video]:last");
  1051. }
  1052. }
  1053. }
  1054. return nuevaCancion;
  1055. }
  1056.  
  1057.  
  1058. // Funcion que saca el estado de transcurrido y cargado del video
  1059. // Cada segundo se ejecuta esta funcion
  1060. function updateytplayerInfo(playerId) {
  1061. ytplayer = document.getElementById("myytplayer"+playerId);
  1062. if(ytplayer){
  1063. var wid = $("#"+playerId),
  1064. estadoReproductor = ytplayer.getPlayerState(),
  1065. estado = wid.find(".estado"),
  1066. deslizandoSlide = estado.find(".barraReproduccion").attr("deslizando");
  1067.  
  1068. // Estados: 1 - reproduciendose, 2 - Pause, 3 - Esperando Buffer
  1069. if(estadoReproductor == 1 || estadoReproductor == 2 || estadoReproductor == 3){
  1070. // Actualizamos los minutos y segundos.
  1071.  
  1072. // Si no está en pause actualizamos el time y el slider
  1073. if(estadoReproductor != 2 && deslizandoSlide != 1){
  1074. var duracion = ytplayer.getDuration(),
  1075. actual = ytplayer.getCurrentTime(),
  1076.  
  1077. total=(actual*100)/duracion;
  1078.  
  1079. estado.find(".barraReproduccion").slider("value", total);
  1080. estado.find(".time").text(pasaSegundos(ytplayer.getCurrentTime()));
  1081. }
  1082.  
  1083. // Sacamos cuanto lleva cargado
  1084. var kbsCargado = bytes2kb(ytplayer.getVideoBytesLoaded()),
  1085. kbsTotales = bytes2kb(ytplayer.getVideoBytesTotal()),
  1086. porcentajeCargado = ((kbsCargado * 100) / kbsTotales).toFixed(1),
  1087. divCargado = estado.find(".cargado");
  1088.  
  1089. divCargado.find(".kbCargado").text(kbsCargado);
  1090. divCargado.find(".porcentaje .numero").text(porcentajeCargado);
  1091. estado.find(".barraReproduccion .barraCargado").width(porcentajeCargado + "%").attr("tooltip", cargado + ": " + porcentajeCargado + "% - " + kbsCargado + "/" + kbsTotales + " KB");
  1092.  
  1093. // Volvemos a llamar a la funcion
  1094. $.doTimeout(1000, function(){
  1095. updateytplayerInfo(playerId);
  1096. });
  1097.  
  1098. }
  1099. }
  1100. }
  1101.  
  1102.  
  1103.  
  1104.  
  1105.  
  1106.  
  1107.  
  1108.  
  1109.  
  1110. // Funcion que sirve para recolorear
  1111. // Tb aprovechamos para ponerle un numero a la fila
  1112. function recolorea(idWid){
  1113. var color1 = "par",
  1114. color2 = "impar",
  1115. color=color1,
  1116. esCancion = $("#"+idWid+" .uispoty-content:visible .esCancion:not(.filaOculta)"),
  1117. num = 1;
  1118.  
  1119. esCancion.removeClass("par impar");
  1120.  
  1121. esCancion.each(function() {
  1122. if(color==color1){
  1123. color=color2;
  1124. }else{
  1125. color=color1;
  1126. }
  1127.  
  1128. $(this).addClass(color).attr("num", num);
  1129. num++;
  1130. });
  1131. }
  1132.  
  1133.  
  1134.  
  1135. // Filtrar canciones: Cuando presionas en ver videos relacionados tiene ver que los videos no estubiesen en la lista
  1136. function filtrarCanciones(divListado, cancionesNuevas){
  1137. var cancion,
  1138. idCancion,
  1139. todasCanciones = "",
  1140. htmlOrigen = cancionesNuevas,
  1141. lasCanciones = $(cancionesNuevas);
  1142.  
  1143. // Cada una de las nuevas canciones
  1144. lasCanciones.find(".enlaceVideo").each(function(){
  1145.  
  1146. cancion = $(this),
  1147. idCancion = cancion.attr("video");
  1148.  
  1149. // Estaba en la lista?
  1150. if(divListado.find(".enlaceVideo[video='" + idCancion + "']").length > 0){
  1151. cancion.parent().remove();
  1152. }
  1153.  
  1154. });
  1155.  
  1156. return lasCanciones;
  1157. }
  1158.  
  1159.  
  1160.  
  1161. // Funcion que sirve para calcular los minutos de una cancion.
  1162. function tiempoLista(idWid){
  1163. var segundosFinales = 0;
  1164.  
  1165. $('#'+idWid+' .busquedaActual .listadoCanciones .enlaceVideo').each(function(){
  1166. var time = $(this).find('.time').text(),
  1167. timePartes =time.split(':'),
  1168. timeMin = parseInt(timePartes[0]) * 60,
  1169. timeSec = parseInt(timePartes[1]);
  1170.  
  1171. segundosFinales = segundosFinales + (timeMin + timeSec);
  1172. });
  1173.  
  1174. return pasaSegundos(segundosFinales);
  1175. }
  1176.  
  1177.  
  1178.  
  1179.  
  1180.  
  1181.  
  1182.  
  1183.  
  1184. // Funcion para filtrar las listas cuando queremos ver el panel de listas colaborativas, cuando queremos mostrar un grupo o personas, si ya estában en la lista las tacha
  1185. function filtroLista(listaColaborativa){
  1186. listaColaborativa.find(".listaAmigos .filaAmigo").each(function() {
  1187. var idAmigo = $(this).attr("idAmigo");
  1188. if(listaColaborativa.find(".listaAnadidos .filaAmigo[idAmigo='"+idAmigo+"']").length > 0){
  1189. $(this).addClass("tachar");
  1190. }
  1191. });
  1192. }
  1193.  
  1194.  
  1195.  
  1196. function posicionaCancion(wid){
  1197. var actual = wid.find(".idCancionActual").val();
  1198.  
  1199. if(actual.length>0){
  1200. var zona = wid.find(".reproduccionActual .listadoCanciones"),
  1201. altoFila = zona.find(".esCancion:first").outerHeight(true),
  1202. num = ((parseInt(zona.find("div[video='"+actual+"']").parent().attr('num')) - 1) * altoFila);
  1203.  
  1204. // Si el num es mayor que lo que mide + el scroll hecho
  1205. if(num >= zona.scrollTop() + zona.height()){
  1206. zona.scrollTop(num);
  1207. }else{
  1208. if(num <= zona.scrollTop()){
  1209. zona.scrollTop(num - zona.height() + altoFila);
  1210. }
  1211. }
  1212. }
  1213. }
  1214.  
  1215.  
  1216.  
  1217.  
  1218.  
  1219. // Funcion para cargar playlist que alguien publicó en el muro. Esta playlist debe ser una playlist que el otro usuario ha publicado en un movimiento (es decir publica) informando a todos o un grupo especifico.
  1220. function cargaPlaylist(idWid, idLista, cancion, publica, primeraCancion){
  1221. var wid = $("#"+idWid),
  1222. left = wid.find(".uispoty-left"),
  1223. listaActual = wid.find(".listaActual"),
  1224. cancionActual = wid.find(".idCancionActual").val(),
  1225. valorPublica = 0;
  1226.  
  1227. // Capa cargando
  1228. capaCargando(idWid);
  1229. // Marcamos la lista en el left
  1230. left.find("li div").removeClass("activo");
  1231. left.find("li div[lista='"+idLista+"']").addClass('activo');
  1232.  
  1233. // Si se quiere reproducir una lista publica
  1234. if(publica == 1){
  1235. valorPublica = 1;
  1236. }
  1237.  
  1238. // Cargamos el contenido del playlist
  1239. $.post(url_ajax_musica+'&s=10',{lista:idLista, idWid:idWid, p:valorPublica}, function(data){ // p:1 es Publica
  1240.  
  1241. // Ocultamos los uispoty-content
  1242. wid.find(".uispoty-content").hide();
  1243. listaActual.html(data).show().find(".listadoCanciones").scrollTop(0);
  1244.  
  1245. // Le sacamos la suma de todas las canciones
  1246. listaActual.find(".timeLista").prepend(tiempoLista(idWid));
  1247.  
  1248. // Droppables
  1249. creaDroppablesCancion();
  1250.  
  1251. // Borramos la capa cargando
  1252. wid.find(".capaCargando").remove();
  1253.  
  1254. // Recoloreamos
  1255. recolorea(idWid);
  1256.  
  1257. // Si fuera la playlist que está reproduciendose le aplicamos el color de activa a la cancion que se está reproduciendo
  1258. //listaActual.find(".enlaceVideo[video='"+cancionActual+"']").parent().addClass("videoActivo");
  1259.  
  1260. // Si queria que se reprodujese la primera cancion
  1261. if(primeraCancion == 1){
  1262. var cancionDeseada = listaActual.find(".enlaceVideo:first");
  1263. if(cancionDeseada.length > 0){
  1264. cancionDeseada.parent().addClass("videoActivo");
  1265. nombreCancion = cancionDeseada.find(".nmb").attr("title");
  1266. cargaCancion(idWid, cancion, nombreCancion, 1);
  1267. }
  1268. }
  1269.  
  1270. // Si quiere reproducirse una cancion que le pasamos que va a estar en la lista
  1271. var cancionDeseada = listaActual.find(".enlaceVideo[video='"+cancion+"']");
  1272. if(cancionDeseada.length > 0){
  1273. cancionDeseada.parent().addClass("videoActivo");
  1274. nombreCancion = cancionDeseada.find(".nmb").attr("title");
  1275. cargaCancion(idWid, cancion, nombreCancion, 1);
  1276. }
  1277.  
  1278.  
  1279.  
  1280. // Hacemos el div de las canciones del tamaño adecuado
  1281. // En esa funcion tb se llama al scrollPane
  1282. proporcionInterfazMusica(idWid);
  1283.  
  1284. });
  1285. }
  1286.  
  1287.  
  1288.  
  1289.  
  1290.  
  1291.  
  1292.  
  1293.  
  1294. // Funcion que carga por ajax las canciones de una lista para el panel de fusionar
  1295. // Tipo: 1. Lista origen, 2. Lista destino
  1296. function cargaListaFusion(idLista, tipo){
  1297. var panel = $("#panelFusionarLista"),
  1298. nombreLista = panel.find(".nombreListaOrigen").val();
  1299.  
  1300. // Donde va a almacenar los datos?
  1301. if(tipo == 1){
  1302. var donde = panel.find(".bloqueIzq .cargaAjax");
  1303. }else{
  1304. var donde = panel.find(".bloqueDer .cargaAjax");
  1305. }
  1306.  
  1307. donde.html(cargando);
  1308.  
  1309. $.post(url_ajax_musica+"&s=25", {idLista:idLista, tipo:tipo, nombreLista:nombreLista}, function(data){
  1310. donde.html(data);
  1311. tacharCancionesFusion();
  1312. });
  1313. }
  1314.  
  1315.  
  1316.  
  1317.  
  1318. // Funcion que tacha las canciones que ya tengamos en la lista de la derecha al cargar una nueva lista
  1319. function tacharCancionesFusion(){
  1320. var panel = $("#panelFusionarLista");
  1321.  
  1322. // Comprobamos cada una de las canciones de la izquierda si está en la derecha
  1323. panel.find(".bloqueIzq .listaAmigos .filaAmigo").each(function(){
  1324. var div = $(this),
  1325. idCancion = div.attr("idCancion");
  1326. if(panel.find(".bloqueDer .cancionesLista .filaAmigo[idCancion='"+idCancion+"']").length > 0){
  1327. div.addClass("tachar").find(".alerta").show();
  1328. }
  1329. });
  1330.  
  1331. // Cuando cambiamos la lista del select
  1332. // Comprobamos en cada una de las canciones que se van a añadir (.nuevasCanciones) si está en el bloque de la izquierda tachado
  1333. // Les ponemos la clase noDisponible para que sigan en realidad en el div, y si vuelve a cambiar de lista las vuelva a activar. ¿Será mas comodo?
  1334. panel.find(".bloqueDer .nuevasCanciones .filaAmigo").each(function(){
  1335. var div = $(this),
  1336. idCancion = div.attr("idCancion");
  1337. if(panel.find(".bloqueIzq .listaAmigos .filaAmigo[idCancion='"+idCancion+"']").hasClass("tachar") == true){
  1338. div.addClass("noDisponible");
  1339. }else{
  1340. div.removeClass("noDisponible");
  1341. }
  1342. });
  1343.  
  1344. if(panel.find(".bloqueDer .nuevasCanciones .filaAmigo:not(.noDisponible)").length > 0){
  1345. panel.find(".botonEnvio").show();
  1346. panel.find(".msg").hide();
  1347. }else{
  1348. panel.find(".botonEnvio").hide();
  1349. panel.find(".msg").show();
  1350. }
  1351. }
  1352.  
  1353.  
  1354. function eventoScrollListaMusica(){
  1355. // Cuando lleguemos a casi el final de los resultados de la busqueda de canciones
  1356. $(".musica .uispoty-centro .listadoCanciones").scroll(function () {
  1357. var listadoCanciones = $(this),
  1358. centro1 = listadoCanciones.parents(".uispoty-centro"),
  1359. idWid = centro1.attr("id_widget"),
  1360. wid = $("#"+idWid),
  1361. centro = wid.find(".uispoty-centro"),
  1362. busqueda = wid.find(".busquedaActual"),
  1363. loading = busqueda.find(".loadMusica"),
  1364. scroll = busqueda.find(".listadoCanciones");
  1365.  
  1366. // Iniciamos la api del scroll bar por que asi podemos saber cuanto llevamos recorrido
  1367. scroll.jScrollPane();
  1368. var api = scroll.data('jsp');
  1369.  
  1370. if(listadoCanciones.height() + api.getContentPositionY() > listadoCanciones.find(".todotodo").height() - 100){
  1371.  
  1372. if(loading.css("display")=='none' && busqueda.css("display")=='block' && busqueda.find(".paginaMusicaResult").length > 0){
  1373. // Está en el resultado de una busqueda, tiene que mostrar la siguiente pagina
  1374. var termino = busqueda.find(".terminoMusicaResult").val(), // Cuando esta variable no tengan nada es por que ya no hay mas resultados por mucho que se busque.
  1375. pagina = busqueda.find(".paginaMusicaResult").val();
  1376.  
  1377. loading.show();
  1378. listadoCanciones.scrollTop(listadoCanciones.find(".todotodo").height());
  1379. busqueda.find(".paginaMusicaResult, .terminoMusicaResult").remove(); // Eliminamos esos inputs para luego volver a recuperar de nuevo los buenos.
  1380.  
  1381. if(termino.length > 0){
  1382. buscaMusica(termino, idWid, 0,pagina);
  1383. }
  1384. }
  1385. }
  1386. });
  1387.  
  1388. }
  1389.  
  1390.  
  1391.  
  1392. // CONFIG DEL HOVER INTENT DEL VOLUMEN
  1393. function dentroVolumen(){
  1394. $(this).find(".cajaVolumen").slideDown();
  1395. }
  1396.  
  1397.  
  1398. function fueraVolumen(){
  1399. $(this).find(".cajaVolumen").slideUp();
  1400. }
  1401.  
  1402. var configHoverVolumenMusica = {
  1403. over: dentroVolumen, // funcion callback cuando nos ponemos encima
  1404. timeout: 250, // milisegundos para cuando sales fuera
  1405. out: fueraVolumen // funcion callback que se ejecuta cuando sales fuera
  1406. };
  1407.  
  1408.  
  1409.  
  1410.  
  1411.  
  1412.  
  1413. // CONFIG DEL HOVER INTENT DEL VOLUMEN
  1414. function dentroDimensionVideo(){
  1415. var div = $(this);
  1416. if(div.find(".teleActivo").attr("tamVideo") == "0"){
  1417. div.find(".cajaDimensionVideo").slideDown();
  1418. }
  1419. }
  1420.  
  1421.  
  1422. function fueraDimensionVideo(){
  1423. var div = $(this);
  1424. if(div.find(".teleActivo").attr("tamVideo") == "0"){
  1425. div.find(".cajaDimensionVideo").slideUp();
  1426. }
  1427. }
  1428.  
  1429. var configHoverDimensionVideoVolumen = {
  1430. over: dentroDimensionVideo, // funcion callback cuando nos ponemos encima
  1431. timeout: 250, // milisegundos para cuando sales fuera
  1432. out: fueraDimensionVideo // funcion callback que se ejecuta cuando sales fuera
  1433. };
  1434.  
  1435.  
  1436.  
  1437. // Esto crea una capa en el centro que indica que está cargando
  1438. function capaCargando(idWid){
  1439. var wid = $("#"+ idWid),
  1440. centro = $("#"+ idWid +" .uispoty-centro"),
  1441. wCentro = centro.width(),
  1442. hCentro = centro.height(),
  1443. html = "<div class='capaCargando'><div class='bgCapaCargando'></div><div class='iconoCapaCargando'></div></div>";
  1444.  
  1445. centro.prepend(html);
  1446. var capa = wid.find(".capaCargando");
  1447. capa.find(".bgCapaCargando, .iconoCapaCargando").width(wCentro).height(hCentro);
  1448. }
  1449.  
  1450.  
  1451.  
  1452. // Sirve para ordenar un array aleatoriamente
  1453. function ordenAleatorioArray(){
  1454. return (Math.round(Math.random())-0.5);
  1455. }
  1456.  
  1457. // Creamos de la lista una cadena de texto con las canciones aleatoriamente
  1458. function cancionesAleatorias(listadoCanciones){
  1459. var canciones = listadoCanciones.find(".esCancion:not(.filaOculta) .enlaceVideo"),
  1460. todosIDs = '';
  1461. // Creamos el array
  1462. canciones.each(function(){
  1463. todosIDs += $(this).attr("video") + "||";
  1464. });
  1465.  
  1466. todosIDs = (todosIDs.substr(0, todosIDs.length - 2)).split("||");
  1467. // Ordenamos aleatoriamente
  1468. todosIDs.sort( ordenAleatorioArray );
  1469. return todosIDs.join("||");
  1470. }
  1471.  
  1472.  
  1473.  
  1474.  
  1475.  
  1476. $(document).ready(function(){
  1477.  
  1478.  
  1479. // Cuando pulsa en el boton de buscar
  1480. $(".musica .uispoty-head .btn_buscador_mac").live("click", function(){
  1481. var div = $(this),
  1482. idWid = div.parents(".widget").attr('id'),
  1483. input = div.parent().find(".buscador_mac"),
  1484. hint = input.attr("hint"),
  1485. texto = input.val();
  1486.  
  1487. if(texto != hint && texto.length>0){
  1488. buscaMusica(texto, idWid, 1, 1);
  1489. }
  1490. });
  1491.  
  1492. // Cuando apreta intro en el input
  1493. $(".musica .uispoty-head .buscador_mac").live("keyup", function(event){
  1494. var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
  1495. if (keyCode == 13) {
  1496. // Modificamos el nombre
  1497. var div = $(this),
  1498. idWid = div.parents(".widget").attr('id'),
  1499. hint = div.attr("hint"),
  1500. texto = div.val();
  1501.  
  1502. if(texto != hint && texto.length>0){
  1503. buscaMusica(texto, idWid, 1, 1);
  1504. }
  1505. }
  1506. });
  1507.  
  1508. // Un click en una cancion
  1509. $(".musica .uispoty-centro .esCancion").live("click", function(){
  1510. $(this).parent().find(".videoSeleccionado").removeClass("videoSeleccionado");
  1511. $(this).addClass("videoSeleccionado");
  1512. });
  1513. // Cuando pulsa en una cancion Doble click, reproduce la cancion
  1514. $(".musica .uispoty-centro .esCancion").live("dblclick", function(){
  1515. var div = $(this).find(".enlaceVideo"),
  1516. idVideo = div.attr("video"),
  1517. id_wid = div.parents(".uispoty-centro").attr("id_widget"),
  1518. nombreVideo = div.find('.nmb').attr("title"),
  1519. player = $("#"+id_wid+" .player");
  1520.  
  1521. // Si se va a reproducir otra cancion que la que estaba pone el repetir a 0
  1522. if(player.find(".estadoRepetir").text() == "1" && $("#"+id_wid+" .idCancionActual").val() != idVideo){
  1523. player.find(".estadoRepetir").text('0'); // Quitamos el repetir
  1524. player.find(".repetir").removeClass("repetirActivo");
  1525. }
  1526.  
  1527. cargaCancion(id_wid, idVideo, nombreVideo, 1);
  1528. });
  1529.  
  1530.  
  1531.  
  1532.  
  1533.  
  1534.  
  1535.  
  1536.  
  1537.  
  1538. // CONTROLES PLAYER
  1539. // Play - Pause
  1540. $(".musica .player .play-pause").live("click", function(){
  1541. var wid = $(this).parents(".widget"),
  1542. id_wid=wid.attr('id'),
  1543. ytplayer = document.getElementById("myytplayer"+id_wid);
  1544. // Si se está reproduciendo una cancion la pausa o la reproduce
  1545. if(wid.find(".reproduciendo").text() == "1"){
  1546. if (ytplayer) {
  1547. switch(ytplayer.getPlayerState()){
  1548.  
  1549. case 2: case 5: case -1:
  1550. // Entonces lo ponemos play
  1551. ytplayer.playVideo();
  1552. break;
  1553.  
  1554. default:
  1555. // Entonces lo ponemos pause
  1556. ytplayer.pauseVideo();
  1557. break;
  1558. }
  1559. }
  1560. }else{
  1561. // No se estaba reproduciendo, comprueba si hay alguna marcada
  1562. var lista = wid.find(".uispoty-content:visible");
  1563.  
  1564. if(lista.find(".videoSeleccionado").length > 0){
  1565. var nuevaCancion = lista.find(".videoSeleccionado .enlaceVideo");
  1566. }else{
  1567. // No estaba ninguna premarcada, ponemos la primera cancion de las que haya a reproducir
  1568. if(lista.find(".esCancion:first .enlaceVideo")){
  1569. var nuevaCancion = lista.find(".esCancion:first .enlaceVideo");
  1570. }
  1571. }
  1572.  
  1573. // Si se ha localizado una cancion la pone a reproducir
  1574. if(nuevaCancion.length>0){
  1575. cargaCancion(id_wid, nuevaCancion.attr('video'), nuevaCancion.find(".nmb").attr("title"));
  1576. }
  1577. }
  1578. });
  1579.  
  1580. // Cancion anterior y cancion siguiente
  1581. $(".musica .player .despues, .musica .player .antes").live("mousedown", function(){
  1582. var div = $(this),
  1583. id_wid = div.parents(".widget").attr('id'),
  1584. ytplayer = document.getElementById("myytplayer"+id_wid);
  1585.  
  1586. if (ytplayer) {
  1587. // Paramos el video
  1588. ytplayer.stopVideo();
  1589. var wid = $("#"+id_wid),
  1590. cancionActual = wid.find(".idCancionActual").val(),
  1591. player = $("#"+id_wid+" .player"),
  1592. capa = wid.find(".reproduccionActual");
  1593.  
  1594.  
  1595. player.find(".estadoRepetir").text('0')// Quitamos el repetir
  1596. player.find(".repetir").removeClass("repetirActivo");
  1597.  
  1598. if(div.hasClass('antes')){
  1599. // Buscamos la cancion de antes
  1600. nuevaCancion = cancionAnterior(capa, cancionActual);
  1601. }else{
  1602. // Buscamos la siguiente cancion
  1603. nuevaCancion = cancionSiguiente(capa, cancionActual);
  1604. }
  1605.  
  1606. if(nuevaCancion.length>0){
  1607. cargaCancion(id_wid, nuevaCancion.attr('video'), nuevaCancion.find(".nmb").attr("title"));
  1608. }
  1609. }
  1610. });
  1611.  
  1612.  
  1613. // Cuando se quiere repetir
  1614. $(".musica .player .repetir").live("mousedown", function(){
  1615. var div = $(this),
  1616. estado = div.find('.estadoRepetir').text();
  1617.  
  1618. if(estado==0){
  1619. // Quiere que se repita
  1620. div.addClass("repetirActivo").find('.estadoRepetir').text('1');
  1621. }else{
  1622. // No quiere que se repita
  1623. div.removeClass("repetirActivo").find('.estadoRepetir').text('0');
  1624. }
  1625. });
  1626.  
  1627.  
  1628.  
  1629.  
  1630.  
  1631. /* REPRODUCCION ALEATORIA */
  1632. // Cuando se pulsa
  1633. $(".musica .player .repAleatoria").live("mousedown", function(){
  1634. var div = $(this),
  1635. input = div.find("input"),
  1636. wid = div.parents(".widget"),
  1637. idWid = wid.attr("id"),
  1638. listadoCanciones = wid.find(".uispoty-centro .uispoty-content:visible .listadoCanciones");
  1639.  
  1640. if(input.val().length == 0){
  1641. // Quiere que se repita aleatoriamente
  1642. // Si hay canciones...
  1643. if(listadoCanciones.find(".esCancion").length > 0){
  1644. div.attr("aleatoria", "1").addClass("repAleatoriaActivo");
  1645. input.val(cancionesAleatorias(listadoCanciones));
  1646.  
  1647. // Reproducimos la primera cancion aleatoria automaticamente
  1648. var idCancion = input.val().split("||"),
  1649. divCancion = listadoCanciones.find(".esCancion .enlaceVideo[video='"+idCancion[0]+"']"),
  1650. nombreCancion = divCancion.find(".nmb").attr("title");
  1651. cargaCancion(idWid, idCancion[0], nombreCancion);
  1652. }
  1653. }else{
  1654. // No quiere que se repita
  1655. div.attr("aleatoria", "0").removeClass("repAleatoriaActivo");
  1656. input.val("");
  1657. }
  1658.  
  1659. });
  1660.  
  1661.  
  1662.  
  1663.  
  1664. // CUando presiona en una palabra del listado de busquedas recientes
  1665. $(".musica .busquedas li div").live("click", function(){
  1666. var div = $(this),
  1667. palabra = div.attr("valor"),
  1668. id_wid = div.parents(".uispoty-left").attr("id_widget");
  1669.  
  1670. buscaMusica(palabra, id_wid,0,1);
  1671. return false;
  1672. });
  1673.  
  1674.  
  1675.  
  1676.  
  1677. // Cuando pulsa en ver la lista de reproduccion actual
  1678. // Enlace de pinchar en ver la busqueda
  1679. $(".musica .enlaceRepActual, .musica .enlaceBusquedaActual").live("click", function(){
  1680. var div = $(this),
  1681. idWid = div.parents(".uispoty-left").attr("id_widget"),
  1682. wid = $("#"+idWid),
  1683. centro = wid.find(".uispoty-centro"),
  1684. left = wid.find(".uispoty-left"),
  1685. capa;
  1686.  
  1687. //wid.find(".viendoRepActual").text('1');
  1688. left.find("li div").removeClass("activo");
  1689. div.addClass("activo");
  1690.  
  1691. posicionaCancion(wid);
  1692. proporcionInterfazMusica(idWid);
  1693.  
  1694. // Vemos que mostrar
  1695. centro.find(".uispoty-content").hide();
  1696. if(div.hasClass("enlaceRepActual")){
  1697. // Mostramos reproduccion actual
  1698. capa = centro.find(".reproduccionActual");
  1699. }else{
  1700. // Mostramos busqueda actual
  1701. capa = centro.find(".busquedaActual");
  1702. }
  1703.  
  1704. capa.show();
  1705. wid.find(".listadoCanciones").jScrollPane();
  1706.  
  1707.  
  1708.  
  1709.  
  1710. });
  1711.  
  1712.  
  1713.  
  1714.  
  1715. // Para el enlace del top exitos
  1716. // Para el enlace de inicio
  1717. $(".musica .enlaceTopExitos, .musica .verInicio").live("click", function(){
  1718. var div = $(this),
  1719. idWid = div.parents(".uispoty-left").attr("id_widget"),
  1720. wid = $("#"+idWid),
  1721. left = wid.find(".uispoty-left"),
  1722. centro = wid.find(".uispoty-centro"),
  1723. busqueda = centro.find(".busquedaActual"),
  1724. listaActual = centro.find(".listaActual"),
  1725. seccion,
  1726. capa;
  1727.  
  1728.  
  1729. // Capa cargando
  1730. capaCargando(idWid);
  1731.  
  1732. // Saber en que ha pulsado
  1733. if(div.hasClass("verInicio")){
  1734. // El inicio
  1735. seccion = 1;
  1736. capa = centro.find(".inicioActual");
  1737. }else{
  1738. seccion = 15;
  1739. capa = centro.find(".listaActual");
  1740. }
  1741.  
  1742.  
  1743. left.find("li div").removeClass("activo");
  1744. div.addClass("activo");
  1745.  
  1746. //wid.find(".viendoRepActual").text('0');
  1747.  
  1748.  
  1749. $.post(url_ajax_musica+'&s='+seccion,{idWid:idWid},function(data){
  1750.  
  1751. // Ocultamos todos los uispoty-content
  1752. centro.find(".uispoty-content").hide();
  1753.  
  1754. // Añadimos el html y mostramos en la capa que toca
  1755. capa.html(data).show();
  1756.  
  1757. // Proporcion del widget
  1758. proporcionInterfazMusica(idWid);
  1759.  
  1760. // Borramos la capa cargando
  1761. wid.find(".capaCargando").remove();
  1762.  
  1763. // Droppables
  1764. creaDroppablesCancion();
  1765.  
  1766. // Recoloreamos
  1767. recolorea(idWid);
  1768.  
  1769. // Posicionamos el scroll a la altura de la cancion
  1770. //posicionaCancion(wid);
  1771.  
  1772.  
  1773. });
  1774.  
  1775.  
  1776. });
  1777.  
  1778.  
  1779.  
  1780.  
  1781.  
  1782.  
  1783. /* CREAR LISTA */
  1784.  
  1785. // Cuando quiere crear una lista, hacemos aparecer el formulario de crear lista.
  1786. $(".musica .uispoty-left .crear_lista").live("click", function(){
  1787. var left = $(this).parents(".uispoty-left"),
  1788. id= left.attr("id_widget"),
  1789. bloque = left.find(".bloqueSpoty");
  1790.  
  1791. left.find("li div").removeClass('activo'); // Quitamos la clase de activo en la lista de listas por si acaso
  1792. bloque.find(".input_lista_nueva").val('').attr("disabled", false);
  1793. bloque.find(".form_lista_nueva").show();
  1794. bloque.find(".input_lista_nueva").focus();
  1795. bloque.find(".boton_lista_nueva").hide();
  1796.  
  1797. // Actualizamos scroll
  1798. var scroll = left.find(".scrollPersonalizado");
  1799. scroll.jScrollPane();
  1800. var api = scroll.data('jsp');
  1801.  
  1802. api.scrollTo(0, left.find(".todosBloques").outerHeight(true) + 300);
  1803. });
  1804.  
  1805.  
  1806. // Cuando apreta intro en el input
  1807. $(".musica .uispoty-left .input_lista_nueva").live("keyup", function(event){
  1808. var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
  1809. if (keyCode == 13) {
  1810. var div = $(this),
  1811. nombreLista = div.val(),
  1812. left = div.parents(".uispoty-left"),
  1813. idWid = left.attr("id_widget");
  1814.  
  1815. guardarListaMusica(idWid, nombreLista);
  1816. div.val('').blur();
  1817.  
  1818. // Actualizamos scroll
  1819. var scroll = left.find(".scrollPersonalizado");
  1820. scroll.jScrollPane();
  1821. var api = scroll.data('jsp');
  1822.  
  1823. api.scrollTo(0, left.find(".todosBloques").outerHeight(true) + 300);
  1824. }
  1825. });
  1826.  
  1827. // Cuando hace blur en el input de la nueva lista
  1828. $(".musica .uispoty-left .input_lista_nueva").live("blur", function(){
  1829. var div = $(this),
  1830. nombreLista = div.val(),
  1831. idWid = div.parents(".uispoty-left").attr("id_widget");
  1832.  
  1833. guardarListaMusica(idWid, nombreLista);
  1834. });
  1835.  
  1836.  
  1837.  
  1838.  
  1839.  
  1840.  
  1841.  
  1842. /*
  1843. // Ver ocultar video
  1844. $(".musica .uispoty-left .caratula .accionesMusica .verVideoclip, .musica .uispoty-left .caratula .accionesMusica .quitarVideoclip").live("click", function(){
  1845. var div = $(this),
  1846. idWid = div.parent().attr('idWid'),
  1847. left = div.parents(".uispoty-left");
  1848.  
  1849. if(div.hasClass("quitarVideoclip")){
  1850. // OCULTAMOS
  1851. div.removeClass("quitarVideoclip");
  1852. left.css({"width": "170px", "max-width": "170px"});
  1853. div.parent(".accionesMusica").find(".accionesVideoVer").hide();
  1854. $("#myytplayer"+idWid).height(1).width(1);
  1855. }else{
  1856. // MOSTRAMOS
  1857. div.addClass("quitarVideoclip");
  1858. div.parent(".accionesMusica").find(".accionesVideoVer").show();
  1859. div.parent(".accionesMusica").find(".videoMenos").hide();
  1860. $("#myytplayer"+idWid).height(130).width("100%");
  1861. }
  1862.  
  1863. proporcionInterfazMusica(idWid);
  1864. });
  1865. */
  1866.  
  1867.  
  1868.  
  1869.  
  1870.  
  1871.  
  1872.  
  1873.  
  1874.  
  1875. // El boton para guardar una cancion en una lista
  1876. $("#favs_musica .botonVerde").live("click", function(){
  1877. var favs = $("#favs_musica"),
  1878. idCancion = favs.find("#idCancion").val(), // ID a modo youtube
  1879. nombreCancion = favs.find("#nombreCancion").val(),
  1880. duracionCancion = favs.find("#duracionCancion").val(),
  1881. todosMusica = $(".musica"),
  1882. content = todosMusica.find(".uispoty-content:visible"),
  1883. grupo = favs.find(".selectGrupos").val();
  1884.  
  1885. valores='';
  1886.  
  1887.  
  1888. favs.find("input:checkbox:checked").each(function() {
  1889. var valor = $(this).val();
  1890. valores=valores+valor+'|';
  1891. });
  1892.  
  1893. // Guardamos la cancion en la lista
  1894. $.post(url_ajax_musica+'&s=9',{cancion:idCancion, nombreCancion:nombreCancion, valores:valores, duracionCancion:duracionCancion, grupo:grupo}, function(data){
  1895. if(data=='0' || data=='1'){
  1896. if(data=='1'){
  1897. //$("#favs_musica #cuadro_favs").html(cancion_anadida_favs);
  1898. favs.remove();
  1899. content.find(".enlaceVideo[video='"+idCancion+"'] .fav").addClass("favActivo");
  1900. }else{
  1901. //$("#favs_musica #cuadro_favs").html(lista_actualizada_favs);
  1902. favs.remove();
  1903. content.find(".enlaceVideo[video='"+idCancion+"'] .fav").removeClass("favActivo");
  1904. }
  1905. }else{
  1906. $("body").append(data); // Por si devuelve error
  1907. }
  1908. });
  1909.  
  1910. // Si se está reproducciendo una lista saca/añade la cancion
  1911. valores=valores.split("|");
  1912. for(var i=0; i< valores.length; i++) {
  1913. var valor = valores[i],
  1914. listasActivas = todosMusica.find('.uispoty-content:visible .listadoCanciones[idUnico="'+valor+'"]');
  1915. aLaConsola(todosMusica.find('.uispoty-content:visible .listadoCanciones[idUnico="'+valor+'"]').html());
  1916.  
  1917. // Actualizamos las listas de los widgets de musica que tengan la lista abierta
  1918. listasActivas.each(function(){
  1919. // Sacamos la lista
  1920. var idWid = $(this).parents(".widget").attr('id'),
  1921. nombreLista = $('.musica .uispoty-left li div[lista="'+valor+'"]').attr("title");
  1922. // Cargamos la playlist
  1923. cargaPlaylist(idWid, valor, 0, 0, 0);
  1924. });
  1925. }
  1926.  
  1927. return false;
  1928. });
  1929.  
  1930.  
  1931.  
  1932.  
  1933. // Las canciones las hacemos draggables
  1934. liveDraggable("div.widget .esCancion", "initCancion",{
  1935. cursorAt: {cursor:"pointer", top:19, left:5},
  1936. scroll: true,
  1937. scrollSensitivity: 100,
  1938. helper: function(){
  1939. var titulo = $(this).addClass("filaDraggando").find("div.nmb").attr("title");
  1940. return $('<div class="ghost-x-cancion"><div class="img"></div>'+ titulo +'</div>').appendTo('body');
  1941. },
  1942. stop: function(){
  1943. $(this).removeClass("filaDraggando");
  1944. }
  1945. });
  1946.  
  1947.  
  1948. /*
  1949. // Creamos el droppable
  1950. liveDroppable("div.widget div.musica div.favoritos li div, div.widget div.musica div.favoritos_compartidos li div", "initDropCancion",{
  1951. hoverClass: "listaActiva",
  1952. accept: ".esCancion",
  1953. tolerance: 'pointer',
  1954. drop: function( event, ui ) {
  1955. var idVideo = $(ui.draggable).find(".enlaceVideo").attr("video"),
  1956. idLista = $(this).attr("lista");
  1957.  
  1958. $.post(url_ajax_musica+"&s=27",{idVideo:idVideo, idLista:idLista});
  1959. }
  1960. });
  1961.  
  1962.  
  1963. liveDroppable("div.widget #favsSortables .esCancion", "initOrdenCancion",{
  1964. hoverClass: "reordenarCancion",
  1965. accept: ".esCancion",
  1966. tolerance: 'pointer',
  1967. drop: function( event, ui ) {
  1968. var idVideoDraggable = $(ui.draggable).find(".enlaceVideo").attr("video"), //La cancion que está arrastrando
  1969. idVideoDroppable = $(this).find(".enlaceVideo").attr("video");
  1970.  
  1971. // Añadimos justo debajo la cancion
  1972. aLaConsola(idVideoDraggable);
  1973. aLaConsola(idVideoDroppable);
  1974.  
  1975. }
  1976. });
  1977. */
  1978.  
  1979.  
  1980. // Cuando pincha en ver una lista
  1981. $(".musica .favoritos li div, .musica .favoritos_compartidos li div").live("click", function(){
  1982. var div = $(this),
  1983. lista = div.attr("lista"),
  1984. idWid = div.parents(".uispoty-left").attr("id_widget");
  1985.  
  1986. if(div.parent().find(".modLista").length == 0){
  1987. // Cargamos la playlist
  1988. cargaPlaylist(idWid, lista, 0, 0, 0);
  1989. }
  1990. return false;
  1991. });
  1992.  
  1993.  
  1994.  
  1995.  
  1996. // Cuando apreta intro en el input de modificar el nombre de una lista
  1997. $(".musica .uispoty-left .favoritos li div .nombreLista").live("keyup", function(event){
  1998. var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
  1999. if (keyCode == 13) {
  2000. // Modificamos el nombre
  2001. var div = $(this),
  2002. idLista=div.parent().find(".idLista").val(),
  2003. nuevoNombre = div.val(),
  2004. idWid = div.parents(".uispoty-left").attr("id_widget");
  2005. ModificarListaMusica(idWid, nuevoNombre, idLista);
  2006. }
  2007. });
  2008.  
  2009.  
  2010.  
  2011.  
  2012. // MENU CONTEXTUAL LISTAS
  2013. // Cuando quiere borrar una lista de la musica.
  2014. $(".musica .favoritos li div, .musica .favoritos_compartidos li div").live("contextmenu", function(e){
  2015. // Sacamos el menu contextual
  2016. creaContextual($(this).attr("menucontextual"), e);
  2017. return false;
  2018. });
  2019.  
  2020. // Cuando pincha en un boton del menu contextual
  2021. $("#menu_contextual .widgetMusicaListas li").live("click", function(){
  2022. var div = $(this),
  2023. idLista = div.attr('idLista'),
  2024. accion = div.attr('class'),
  2025. tipo = div.attr('tipoFav'),
  2026. idWid = div.attr('idWid');
  2027.  
  2028. switch(accion){
  2029. // Borrar la lista
  2030. case 'borrarLista':
  2031. $("#borrarListaMusica").remove();
  2032. mensajeCentro(cargando);
  2033.  
  2034. // Primero tenemos que mostrar un
  2035. $.post(url_ajax_musica+"&s=32", {idLista:idLista, tipo:tipo}, function(data){
  2036.  
  2037. // Ponemos el panel
  2038. $("body").append(data);
  2039. centrarDiv($("#borrarListaMusica"));
  2040. ocultaMensajeCentro();
  2041.  
  2042.  
  2043.  
  2044. /*
  2045. PONER CUANDO TENGA QUE PROCESAR EL BORRADO
  2046. // Si se estaba viendo esa lista en alguno de los widgets de juegos la cambia y pone el inicio
  2047. $(".musica").each(function() {
  2048. var div=$(this),
  2049. idWid=div.parent().attr('id');
  2050.  
  2051.  
  2052. // Si se estaba viendo esa lista en alguno de los widgets de musica la cambia y pone el inicio
  2053. if(div.find(".uispoty-left li div[lista='"+idLista+"']").hasClass("activo")==true){
  2054.  
  2055. $.post(url_ajax_musica+'&s=1',{id_widget:idWid}, function(data){
  2056. div.find(".uispoty-centro .busquedaActual").html(data);
  2057. });
  2058.  
  2059. }
  2060. });
  2061.  
  2062. // Quitamos la lista por JS
  2063. var bloque = $(".musica .uispoty-left li div[lista='"+idLista+"']").parents(".bloqueSpoty");
  2064. $(".musica .uispoty-left li div[lista='"+idLista+"']").parent().remove();
  2065. if(bloque.find("li").length == 0){
  2066. bloque.html("<ul>"+bloque.attr("txtTipo")+"</ul>");
  2067. }
  2068. */
  2069. });
  2070. break;
  2071.  
  2072.  
  2073. // Cambiar el nombre de la lista
  2074. case 'cambiarNombre':
  2075. var laLista = $("#"+idWid+" .uispoty-left li div[lista='"+idLista+"']"),
  2076. nombre_lista = laLista.attr('nOriginal');
  2077.  
  2078. laLista.css("display", "none");
  2079. laLista.parent().append("<div class='modLista'><input type='hidden' value='"+idLista+"' class='idLista'><input type='text' class='nombreLista' value='"+nombre_lista+"' onblur='ModificarListaMusica(\""+idWid+"\",$(this).val(), \""+idLista+"\"); '></div>");
  2080. laLista.parent().find(".nombreLista").focus().select();
  2081.  
  2082. // Actualizamos scroll
  2083. $("#"+idWid+" .scrollPersonalizado").jScrollPane();
  2084. break;
  2085.  
  2086. // Cargamos la playlist
  2087. case "abrirLista":
  2088. cargaPlaylist(idWid, idLista, 0, 0, 0);
  2089. break;
  2090. }
  2091. $('.menu_contextual').css("display", "none");
  2092. });
  2093.  
  2094.  
  2095.  
  2096. // MENU CONTEXTUAL CANCION
  2097. // Cuando quiere borrar una cancion
  2098. $(".musica .listadoCanciones .esCancion").live("contextmenu", function(e){
  2099. var div = $(this);
  2100.  
  2101. // Premarcamos
  2102. div.parents(".listadoCanciones").find(".videoSeleccionado").removeClass("videoSeleccionado");
  2103. div.addClass("videoSeleccionado");
  2104.  
  2105. // Sacamos el menu contextual
  2106. creaContextual(div.attr("menucontextual"), e);
  2107. });
  2108.  
  2109.  
  2110. // Cuando pincha en un boton del menu contextual de la cancion
  2111. $("#menu_contextual .widgetMusica li").live("click", function(){
  2112. var div = $(this),
  2113. idLista = div.attr('idLista'),
  2114. accion = div.attr('class'),
  2115. idWid = div.attr('idWid'),
  2116. idCancion = div.attr('idCancion');
  2117.  
  2118. switch(accion){
  2119. // Borrar la lista
  2120. case 'borrarCancion':
  2121. $.post(url_ajax_musica+"&s=12", {idLista:idLista, idCancion:idCancion}, function(data){
  2122.  
  2123. if(data=='1'){
  2124. // Borramos visualmente la cancion de la lista
  2125. $(".musica").each(function(){
  2126. var musica = $(this),
  2127. cabeza = musica.find(".uispoty-content:visible .cabezaLista"),
  2128. listado = musica.find(".listadoCanciones");
  2129.  
  2130.  
  2131.  
  2132. listado.find(".enlaceVideo[video='"+idCancion+"']").parent().remove(); // La cancion
  2133. listado.find(".videosRelacionados[idCancion='"+idCancion+"']").remove(); // El posible div con videos relacionados
  2134. cabeza.find(".numCancion").text((parseInt(cabeza.find(".numCancion").text()) - 1));
  2135. cabeza.find(".timeLista").text(tiempoLista(idWid));
  2136. recolorea(idWid);
  2137.  
  2138. // Actualizamos scroll
  2139. listado.jScrollPane();
  2140.  
  2141. });
  2142. }else{
  2143. alert(error);
  2144. }
  2145.  
  2146. });
  2147. break;
  2148.  
  2149. // Ver los videos relacionados de una cancion
  2150. case 'verRelacionados':
  2151. var wid = $("#" + idWid);
  2152. content = wid.find(".uispoty-content:visible"),
  2153. centro = content.parent(),
  2154. laCancion = content.find(".esCancion .enlaceVideo[video='"+idCancion+"']").parent(),
  2155. mismaLista = 0;
  2156.  
  2157.  
  2158.  
  2159. laCancion.after("<div class='videosRelacionados' idCancion='"+idCancion+"'><div style='padding:10px;'><img src='img/uispoty/load.gif'> "+cargando+"</div></div>");
  2160. var videosRelacionados = content.find(".videosRelacionados[idCancion='"+idCancion+"']");
  2161. videosRelacionados.slideDown();
  2162. $.post(url_ajax_musica+"&s=28", {idCancion:idCancion, idWid:idWid}, function(data){
  2163.  
  2164. videosRelacionados.html(filtrarCanciones(content, data));
  2165. recolorea(idWid);
  2166.  
  2167. /*
  2168. // Copiamos el html al div oculto si las listas que estamos viendo son las
  2169. // determinamos que capa es la de ahora
  2170. if(centro.find(".listaActual div[idUnico]").attr("idUnico") == centro.find(".busquedaActual div[idUnico]").attr("idUnico")){
  2171. if(content.hasClass("listaActual")){
  2172. centro.find(".busquedaActual").html(content.html()).find(".videoSeleccionado").removeClass("videoSeleccionado");
  2173. }else{
  2174. centro.find(".listaActual").html(content.html()).find(".videoSeleccionado").removeClass("videoSeleccionado");
  2175. }
  2176. creaDroppablesCancion();
  2177. }
  2178. */
  2179.  
  2180. wid.find(".listadoCanciones").jScrollPane();
  2181. });
  2182.  
  2183.  
  2184.  
  2185. break;
  2186.  
  2187.  
  2188. // Compatir una cancion
  2189. case "shareCancion":
  2190. $(".P_L_Favs").remove();
  2191.  
  2192. var div = $("#" + idWid + " .uispoty-centro .listadoCanciones .enlaceVideo[video='"+idCancion+"']"),
  2193. nombre = div.find(".nmb").attr("title"),
  2194. duracion =div.find(".time").text();
  2195.  
  2196. mensajeCentro(cargando);
  2197.  
  2198. $.post(url_ajax_musica+"&s=21", {idV:idCancion, n:nombre, d:duracion}, function(data){
  2199. $("body").append(data);
  2200. centrarDiv($("#listaCompartir"));
  2201. ocultaMensajeCentro();
  2202. });
  2203. break;
  2204.  
  2205.  
  2206. // Añadir una cancion a una lista de favoritos
  2207. case "cancionLista":
  2208. var favs = $("#favs_musica");
  2209.  
  2210. if(favs.length > 0){
  2211. favs.remove();
  2212. }
  2213.  
  2214. mensajeCentro(cargando);
  2215.  
  2216. var div = $("#" + idWid + " .uispoty-centro .listadoCanciones .enlaceVideo[video='"+idCancion+"']"),
  2217. title = div.find(".nmb").attr('title'),
  2218. duracion = div.find(".time").text();
  2219.  
  2220. $.post(url_ajax_musica+'&s=8',{cancion:idCancion, idWid:idWid, title:title, duracion:duracion}, function(data){
  2221. $("body").append(data);
  2222. centrarDiv($("#favs_musica"));
  2223. ocultaMensajeCentro();
  2224. });
  2225. break;
  2226.  
  2227. // REPRODUCIR CANCION
  2228. case "reproducirCancion":
  2229. var div = $("#" + idWid + " .uispoty-centro .listadoCanciones .enlaceVideo[video='"+idCancion+"']"),
  2230. nombreVideo = div.find('.nmb').attr("title"),
  2231. player = $("#"+idWid+" .player");
  2232.  
  2233. // Si se va a reproducir otra cancion que la que estaba pone el repetir a 0
  2234. if(player.find(".estadoRepetir").text() == "1" && $("#"+idWid+" .idCancionActual").val() != idCancion){
  2235. player.find(".estadoRepetir").text('0'); // Quitamos el repetir
  2236. player.find(".repetir").removeClass("repetirActivo");
  2237. }
  2238.  
  2239. cargaCancion(idWid, idCancion, nombreVideo, 1);
  2240. break;
  2241.  
  2242.  
  2243. // REPETIR CANCION
  2244. case "repetirCancion":
  2245. // Primero reproducimos la cancion
  2246. var div = $("#" + idWid + " .uispoty-centro .listadoCanciones .enlaceVideo[video='"+idCancion+"']"),
  2247. nombreVideo = div.find('.nmb').attr("title");
  2248.  
  2249. cargaCancion(idWid, idCancion, nombreVideo);
  2250. // Ahora la ponemos a repetir
  2251. div = $("#"+idWid+" .player .estadoRepetir");
  2252. div.text("1").parent().addClass("repetirActivo");
  2253. break;
  2254.  
  2255.  
  2256.  
  2257.  
  2258. // VER VIDEOCLIP
  2259. case "verVideoclip":
  2260. var wid = $("#"+idWid);
  2261. // Reproducimos la cancion si no es la que se está reproduciendo
  2262. if(idCancion != wid.find(".uispoty-left .idCancionActual").val()){
  2263. var div = $("#" + idWid + " .uispoty-centro .listadoCanciones .enlaceVideo[video='"+idCancion+"']"),
  2264. nombreVideo = div.find('.nmb').attr("title");
  2265.  
  2266. cargaCancion(idWid, idCancion, nombreVideo);
  2267. }
  2268.  
  2269. // Si no se tiene el video abierto lo abre
  2270. var div = wid.find(".player .controlVideo .teleActivo"),
  2271. tamVideo = div.attr("tamVideo"),
  2272. left = wid.find(".uispoty-left"),
  2273. video = $("#myytplayer"+idWid);
  2274.  
  2275. if(tamVideo != "0"){
  2276. // Mostramos el video
  2277. var tams = tamVideo.split(":");
  2278. video.width(tams[0]).height(tams[1]);
  2279. var vW = video.width();
  2280. left.width(vW).css({"max-width": vW});
  2281. div.removeClass("sinTele");
  2282. div.attr("tamVideo", "0");
  2283. }
  2284.  
  2285. proporcionInterfazMusica(idWid);
  2286. break;
  2287.  
  2288. }
  2289. $('.menu_contextual').css("display", "none");
  2290. });
  2291.  
  2292.  
  2293.  
  2294.  
  2295. // MENU CONTEXTUAL BUSQUEDAS
  2296. // Cuando quiere borrar una cancion
  2297. $(".musica .uispoty-left .todosBloques .busquedas li div").live("contextmenu", function(e){
  2298. // Sacamos el menu contextual
  2299. creaContextual($(this).attr("menuContextual"), e);
  2300. });
  2301.  
  2302. // Acciones del menu contextual
  2303. $("#menu_contextual .widgetMusicaBusquedas li").live("click", function(){
  2304. var div = $(this),
  2305. accion = div.attr('class'),
  2306. idT = div.attr("idT"),
  2307. idWid = div.attr('idWid');
  2308.  
  2309. switch(accion){
  2310. // Borramos uno de los terminos
  2311. case 'borrarTermino':
  2312. var fila = $("#"+ idWid +" .uispoty-left .todosBloques .busquedas li div[idT='"+idT+"']"),
  2313. valor = fila.attr("valor");
  2314. fila.parent().remove();
  2315. UltimasBusquedasMusica(idWid, valor);
  2316. $("#menu_contextual").hide();
  2317. break;
  2318.  
  2319. case 'borrarHistorial':
  2320. var mensaje = $("#"+ idWid +" .uispoty-left .todosBloques .busquedas").attr("mensajeBorrado");
  2321. $("#menu_contextual").hide();
  2322. Sexy.confirm(mensaje, {
  2323. onComplete:function(returnvalue) {
  2324. if(returnvalue){
  2325. UltimasBusquedasMusica(idWid, 'todo');
  2326. }
  2327. }
  2328. });
  2329. break;
  2330.  
  2331. }
  2332. });
  2333.  
  2334.  
  2335.  
  2336.  
  2337.  
  2338. /*
  2339. // Cuando cerramos el widget tenemos que parar el video: NO HACE FALTA - YT CORTA LA TRANSFER
  2340. $(".ui-icon-close").live("click", function(){
  2341. var txt_widget = $(this).parents(".widget").find(".txt_widget");
  2342. if(txt_widget.hasClass("musica")==true){
  2343. var id_wid = txt_widget.parents(".widget").attr("id");
  2344.  
  2345. ytplayer = document.getElementById("myytplayer"+id_wid);
  2346. ytplayer.stopVideo();
  2347. }
  2348. });
  2349. */
  2350.  
  2351.  
  2352. $(".musica .kbCargado").live("click", function(){
  2353. $(".musica .barraReproduccion").slider("disable");
  2354. });
  2355.  
  2356.  
  2357. // Cuando pulsa en Pantalla completa
  2358. $(".newwin_musica").live("click", function(){
  2359.  
  2360. if($(this).parents(".widget").find(".txt_widget").hasClass("musica")==true){
  2361. var id_wid=$(this).parents(".widget").attr("id"),
  2362. idWid = $("#"+id_wid),
  2363. divMaximizar = idWid.find('.supermaximizar'),
  2364. uispoty = idWid.find(".uispoty"),
  2365. top,
  2366. left,
  2367. z,
  2368. cadena,
  2369. ancho,
  2370. alto;
  2371.  
  2372. // Sacamos las posiciones y tamaños del widget
  2373. if(divMaximizar.text().length>0){
  2374. // Volver al tamaño anterior
  2375. cadena=divMaximizar.text().split('|');
  2376.  
  2377. top=cadena[0],
  2378. left=cadena[1],
  2379. z=cadena[2],
  2380.  
  2381. ancho=cadena[3],
  2382. alto=cadena[4];
  2383.  
  2384. divMaximizar.text('');
  2385. idWid.css({"top": top, "left":left, "z-index":z});
  2386. uispoty.css({"height":alto+"px", "width":ancho+"px"});
  2387. }else{
  2388. // Hacer pantalla completa
  2389. top=idWid.css("top"),
  2390. left=idWid.css("left"),
  2391. z=idWid.css("z-index"),
  2392.  
  2393. ancho=uispoty.width(),
  2394. alto=uispoty.height(),
  2395.  
  2396. cadena=top+"|"+left+"|"+z+"|"+ancho+"|"+alto;
  2397.  
  2398. var escri = $("#escritorio_"+escritorio_actual);
  2399.  
  2400. divMaximizar.text(cadena);
  2401. idWid.css({"top":$("#cabeza").outerHeight(true)+"px", "left":"0px", "z-index":"1003"});
  2402. uispoty.css({"height":(escri.height()-43)+"px", "width":(escri.width()-25)+"px"});
  2403. }
  2404. $("#acciones_"+ id_wid).width(idWid.width()-10);
  2405. proporcionInterfazMusica(id_wid);
  2406. }
  2407. return false;
  2408. });
  2409.  
  2410.  
  2411. // Cuando está a pantalla completa y se redimensiona la pantalla
  2412. $(window).wresize(function(){
  2413. $(".musica .supermaximizar").each(function() {
  2414. var div = $(this);
  2415. id = div.parents(".widget").attr("id"),
  2416. wid = $("#"+id),
  2417. escritorio = $("#escritorio_"+escritorio_actual);
  2418.  
  2419. if(div.text().length>0){
  2420. // Hay algun widget de videojuegos a pantalla completa
  2421. wid.css({"top":$("#cabeza").outerHeight(true)+"px", "left":"0px"});
  2422. wid.find(".musica").css({"height":(escritorio.height()-43)+"px", "width":(escritorio.width()-25)+"px"});
  2423. proporcionInterfazMusica(id);
  2424. }
  2425. });
  2426. });
  2427.  
  2428.  
  2429.  
  2430.  
  2431.  
  2432.  
  2433.  
  2434.  
  2435. // Cuando presiona en publicar en muro una lista, sale una ventanita diciendole a quien quiere informar.
  2436. $(".musica .publicarMuro").live("click", function(){
  2437. $(".P_L_Favs").remove();
  2438. var idLista = $(this).parent().attr("idLista");
  2439. mensajeCentro(cargando);
  2440.  
  2441. $.post(url_ajax_musica+"&s=16", {idLista:idLista}, function(data){
  2442. $("body").append(data);
  2443. centrarDiv($("#publicarMuro"));
  2444. ocultaMensajeCentro();
  2445. });
  2446. });
  2447.  
  2448. // Boton verde para publicar
  2449. $("#publicarMuro .btnPublicar").live("click", function(){
  2450. var boton = $(this),
  2451. div = boton.parents("#publicarMuro"),
  2452. idLista = div.find(".idLista").val(),
  2453. clase = 'botonDesactivado',
  2454. grupo = div.find(".selectGrupos").val(),
  2455. txtBoton = boton.val();
  2456.  
  2457. if(boton.hasClass(clase)==false){
  2458. boton.addClass(clase).val(enviando);
  2459.  
  2460. $.post(url_ajax_musica+"&s=17", {idLista:idLista, grupo:grupo}, function(d){
  2461. if(d == "1"){
  2462. // Todo correcto, borramos el div
  2463. boton.val(enviado);
  2464. // Al segundo borramos el panel
  2465. $.doTimeout( 1000, function(){
  2466. div.remove();
  2467. });
  2468. }else{
  2469. boton.val(error);
  2470. // Al segundo borramos el panel
  2471. $.doTimeout( 1000, function(){
  2472. boton.removeClass(clase).val(txtBoton);
  2473. });
  2474. }
  2475. });
  2476.  
  2477. }
  2478. });
  2479.  
  2480.  
  2481.  
  2482.  
  2483.  
  2484.  
  2485.  
  2486. // LISTA COLABORATIVA
  2487. $(".musica .listaColaborativa, .musica .invitarMasGente, .musica .uispoty-centro .cabezaLista .editarPermisos").live("click", function(){
  2488. $(".P_L_Favs").remove();
  2489.  
  2490. var div = $(this),
  2491. idLista,
  2492. tipoLista;
  2493.  
  2494. // Si se trata del boton del lapiz de editar permisos
  2495. if(div.hasClass("editarPermisos")){
  2496. idLista = div.attr("idLista");
  2497. tipoLista = div.parents(".uispoty-content").find(".listadoCanciones").attr("tipo");
  2498. }else{
  2499. idLista = div.parent().attr("idLista"),
  2500. tipoLista = 1;
  2501. if(div.hasClass("invitarMasGente")){
  2502. tipoLista = 3;
  2503. }
  2504. }
  2505.  
  2506. mensajeCentro(cargando);
  2507.  
  2508. $.post(url_ajax_musica+"&s=18", {idLista:idLista, tipoCompartir:tipoLista}, function(data){
  2509. $("body").append(data);
  2510. var panel = $("#listaColaborativa"),
  2511. grupo = panel.find(".selectGrupos").val(),
  2512. listaAmigos = panel.find(".listaAmigos");
  2513.  
  2514. centrarDiv(panel);
  2515. // Cargamos la lista de amigos, con el primer grupo que trae de por si el select
  2516. listaAmigos.html(cargando);
  2517. $.post(url_ajax_musica+"&s=19", {tipo:1, grupo:grupo}, function(data){
  2518. listaAmigos.html(data);
  2519.  
  2520. // Comprobamos que de los amigos que hay en la izquierda no estén en la derecha
  2521. if(tipoLista == 3){
  2522. filtroLista(panel);
  2523. }
  2524. ocultaMensajeCentro();
  2525. });
  2526. });
  2527. });
  2528.  
  2529.  
  2530.  
  2531. // Cuando pincha en una persona la pasa al bloque de amigosAnadidos
  2532. $("#listaColaborativa .listaAmigos .filaAmigo").live("click", function(){
  2533. // Si no tiene la clase tachar añade la fila
  2534. if($(this).hasClass("tachar") == false){
  2535. var div = $(this),
  2536. idAmigo = div.attr("idAmigo"),
  2537. nombreAmigo = div.html(),
  2538. listaColaborativa = $("#listaColaborativa"),
  2539. htmlSelect = listaColaborativa.find(".templateSelect").html(),
  2540. listaAnadidos = listaColaborativa.find(".listaAnadidos");
  2541.  
  2542. div.addClass("tachar");
  2543. if(listaAnadidos.find(".filaAmigo[idAmigo='"+idAmigo+"']").length == 0){
  2544. listaAnadidos.append('<div class="filaAmigo" idAmigo="'+idAmigo+'"><div class="quitar"></div><strong>'+nombreAmigo+'</strong><br>' + htmlSelect + '</div>');
  2545.  
  2546. // Mostramos boton
  2547. listaColaborativa.find(".divInfo").hide();
  2548. listaColaborativa.find(".divEnviar").show();
  2549. }
  2550.  
  2551. listaAnadidos.scrollTop(10000);
  2552.  
  2553. listaColaborativa.find(".divInfo").hide();
  2554. listaColaborativa.find(".divEnviar").show();
  2555.  
  2556. }
  2557. });
  2558.  
  2559. // Cuando quiere quitar una persona del bloque de amigosAnadidos
  2560. $("#listaColaborativa .listaAnadidos .filaAmigo .quitar").live("click", function(){
  2561. var div = $(this).parent(),
  2562. panel = $("#listaColaborativa");
  2563.  
  2564. div.remove();
  2565. panel.find(".listaAmigos .filaAmigo[idAmigo='"+div.attr("idAmigo")+"']").removeClass("tachar");
  2566. if(panel.find(".listaAnadidos .filaAmigo:not(.noBorrable)").length > 0){
  2567. panel.find(".divInfo").hide();
  2568. panel.find(".divEnviar").show();
  2569. }else{
  2570. panel.find(".divEnviar").hide();
  2571. panel.find(".divInfo").show();
  2572. }
  2573. });
  2574.  
  2575.  
  2576.  
  2577. // Cuando quiere usar el filtro de grupo
  2578. $("#listaColaborativa .filtroGrupo").live("click", function(){
  2579. var listaColaborativa = $("#listaColaborativa"),
  2580. grupo = listaColaborativa.find(".selectGrupos").val(),
  2581. listaAmigos = listaColaborativa.find(".listaAmigos");
  2582.  
  2583. listaAmigos.text(cargando);
  2584. $.post(url_ajax_musica+"&s=19", {tipo:1, grupo:grupo}, function(data){
  2585. listaAmigos.html(data);
  2586. filtroLista(listaColaborativa);
  2587. });
  2588. });
  2589.  
  2590. // Cuando quiere usar el filtro de nombre
  2591. $("#listaColaborativa .filtroPersona").live("click", function(){
  2592. var listaColaborativa = $("#listaColaborativa"),
  2593. nombre = listaColaborativa.find(".nombrePersona").val(),
  2594. listaAmigos = listaColaborativa.find(".listaAmigos");
  2595.  
  2596. listaAmigos.text(cargando);
  2597. $.post(url_ajax_musica+"&s=19", {tipo:2, nombre:nombre}, function(data){
  2598. listaAmigos.html(data);
  2599. filtroLista(listaColaborativa);
  2600. });
  2601. });
  2602.  
  2603.  
  2604. // Cuando pulsa en Terminar para terminar la lista colaborativa
  2605. $("#listaColaborativa .btnMusica").live("click", function(){
  2606. var boton = $(this),
  2607. clase = 'botonDesactivado',
  2608. listaColaborativa = $("#listaColaborativa"),
  2609. tipoCompartir = listaColaborativa.find(".tipoCompartir").val();
  2610.  
  2611. if(boton.hasClass(clase)==false && listaColaborativa.find(".listaAnadidos .filaAmigo:not(.noBorrable)").length > 0){
  2612. var todos='',
  2613. idLista = listaColaborativa.find(".idLista").val()
  2614. boton.addClass(clase).val(invitando);
  2615.  
  2616. listaColaborativa.find(".loadCircle").show();
  2617.  
  2618. // Sacamos la lista de amigos que hay añadidos
  2619. listaColaborativa.find(".listaAnadidos").children("div:not(.noBorrable)").each(function() {
  2620. var div = $(this);
  2621. todos = todos + div.attr("idAmigo") + ':' + div.find("select").val() + '|';
  2622. });
  2623.  
  2624. $.post(url_ajax_musica+"&s=20", {gente:todos, idLista:idLista}, function(data){
  2625. if(data == 1){
  2626. // Se ha guardado correctamente, tiene que mover esa lista a listas colaborativas
  2627. if(tipoCompartir != 3){
  2628. $(".musica").each(function() {
  2629. var div = $(this).find(".uispoty-left"),
  2630. divLista = div.find(".favoritos li div[lista='"+idLista+"']"),
  2631. ul = divLista.parents(".bloqueSpoty"),
  2632. favoritos_compartidos = div.find(".favoritos_compartidos"),
  2633. estaSeleccionada = 0;
  2634.  
  2635. // Miramos si metemos el ul o no al añadir el li
  2636. if(favoritos_compartidos.find("li").length == 0){
  2637. // No habia ninguna lista
  2638. favoritos_compartidos.html("<ul>"+divLista.parent()+"</ul>");
  2639. aLaConsola(divLista.parent());
  2640. }else{
  2641. // Ya habian listas en ese bloque
  2642. favoritos_compartidos.find("ul").append(divLista.parent());
  2643. }
  2644.  
  2645. // Añadimos lo necesario para el tooltip
  2646. var laLista = favoritos_compartidos.find("li div[lista='"+idLista+"']");
  2647. laLista.attr("tooltip", laLista.attr("nOriginal")+"<br>"+creada_por_mi).find(".textfav").append(por_mi);
  2648.  
  2649. // Cargamos de nuevo el playlist
  2650. cargaPlaylist(div.attr("id_widget"), idLista, 0, 0, 0);
  2651.  
  2652. // Si no hay mas li en ese bloque
  2653. if(ul.find("li").length == 0){
  2654. ul.html("<div style='padding:5px;'>" + ul.attr("txtTipo") + "</div>");
  2655. }
  2656. });
  2657. }
  2658.  
  2659. boton.val(guardado);
  2660. // Al segundo borramos el panel
  2661. $.doTimeout( 1000, function(){
  2662. listaColaborativa.remove();
  2663. });
  2664.  
  2665. }else{
  2666. // Ha habido un error
  2667. boton.val(error);
  2668. $.doTimeout( 1000, function(){
  2669. boton.val(invitar).removeClass(clase);
  2670. listaColaborativa.find('.loadCircle').hide();
  2671. });
  2672. }
  2673. });
  2674. }
  2675. });
  2676.  
  2677.  
  2678.  
  2679. // Ver tabla de permisos
  2680. $("#listaColaborativa .verPermisos, #listaColaborativa .volverAtras").live("click", function(){
  2681. var panel = $("#listaColaborativa"),
  2682. usuarios = panel.find(".usuarios"),
  2683. permisos = panel.find(".permisos");
  2684.  
  2685. if($(this).hasClass("verPermisos")){
  2686. usuarios.hide();
  2687. permisos.show();
  2688. }else{
  2689. usuarios.show();
  2690. permisos.hide();
  2691. }
  2692. });
  2693.  
  2694.  
  2695.  
  2696.  
  2697. // Cuando cambia el select de un usuario que ya estaba
  2698. $("#listaColaborativa .usuarios .listaAnadidos select:not(.noBorrable)").live("change", function(){
  2699. var div = $(this),
  2700. permisos = div.val(),
  2701. idLista = div.parents("#listaColaborativa").find(".idLista").val(),
  2702. filaAmigo = $(this).parents(".filaAmigo"),
  2703. idAmigo = filaAmigo.attr("idAmigo"),
  2704. loading = filaAmigo.find(".loading");
  2705.  
  2706. // Ponemos clase cargando y visible
  2707. loading.show().removeClass("okLoading");
  2708.  
  2709. // Mandamos el post
  2710. $.post(url_ajax_musica+"&s=34", {idU:idAmigo, permisos:permisos, idLista:idLista}, function(data){
  2711. loading.addClass("okLoading");
  2712. });
  2713. });
  2714. /***********************************************************************************/
  2715.  
  2716.  
  2717.  
  2718.  
  2719.  
  2720.  
  2721.  
  2722.  
  2723.  
  2724.  
  2725.  
  2726.  
  2727.  
  2728.  
  2729.  
  2730.  
  2731.  
  2732. // ELIMINAR UN USUARIO DE UNA LISTA
  2733. $(".musica div.uispoty-centro div.cabezaLista div.genteLista div.persona .del").live("click", function(){
  2734. $(".P_L_Favs").remove();
  2735.  
  2736. mensajeCentro(cargando);
  2737.  
  2738. var div = $(this),
  2739. nombreUsuario = div.attr("nombreU"),
  2740. idUsuario = div.attr("idU"),
  2741. nombreLista = div.attr("nombreLista"),
  2742. idLista = div.attr("idLista");
  2743.  
  2744. $.post(url_ajax_musica+"&s=22", {nombreUsuario:nombreUsuario, idUsuario:idUsuario, nombreLista:nombreLista, idLista:idLista}, function(data){
  2745. $("body").append(data);
  2746. centrarDiv($("#borrarUserLista"));
  2747. ocultaMensajeCentro();
  2748. });
  2749.  
  2750. });
  2751.  
  2752.  
  2753. // Cuando marcha el check
  2754. $("#borrarUserLista .borrarCanciones").live("click", function(){
  2755. var check = $(this),
  2756. lista = check.parents("#borrarUserLista").find(".listaElementos");
  2757.  
  2758. if(check.is(":checked")){
  2759. lista.show();
  2760. }else{
  2761. lista.hide();
  2762. }
  2763. });
  2764.  
  2765.  
  2766. // Cuando apreta en SI
  2767. $("#borrarUserLista .borrarUser").live("click", function(){
  2768. var boton = $(this),
  2769. panel = boton.parents("#borrarUserLista"),
  2770. idLista = panel.find(".idLista").val(),
  2771. idUsuario = panel.find(".idU").val(),
  2772. borrarCanciones = 0,
  2773. clase = 'botonDesactivado',
  2774. canciones = "";
  2775.  
  2776. // Si está el borrar canciones marcado cogemos las canciones en un array
  2777. if(panel.find(".borrarCanciones").is(":checked")){
  2778. panel.find(".listaElementos .check").each(function(){
  2779. canciones += $(this).attr("idCancion") + ":";
  2780. });
  2781. borrarCanciones = 1;
  2782. }
  2783.  
  2784.  
  2785. if(boton.hasClass(clase) == false){
  2786. boton.addClass(clase).val(modificando);
  2787.  
  2788. $.post(url_ajax_musica+"&s=23", {idUsuario:idUsuario, idLista:idLista, borrarCanciones:borrarCanciones, canciones:canciones}, function(data){
  2789. if(data.length > 0){
  2790. // Actualizamos en los widgets de musica que tengan abierta esa lista
  2791. $(".musica").each(function(){
  2792. var este = $(this),
  2793. lista = este.find(".uispoty-left li div[lista='"+ data +"']");
  2794. if(lista.hasClass("activo")){
  2795. cargaPlaylist(este.parents(".widget").attr("id"), data, 0, 0, 0);
  2796. }
  2797. });
  2798.  
  2799. panel.remove();
  2800. }
  2801. });
  2802. }
  2803. });
  2804.  
  2805.  
  2806.  
  2807. // FUSIONAR LISTA
  2808. // Ver panel
  2809. $(".musica div.uispoty-centro .fusionarLista").live("click", function(){
  2810. $(".P_L_Favs").remove();
  2811.  
  2812. mensajeCentro(cargando);
  2813.  
  2814. var div = $(this).parent(),
  2815. idLista = div.attr("idLista"),
  2816. nombreLista = div.attr("nombreLista");
  2817.  
  2818.  
  2819. $.post(url_ajax_musica+"&s=24", {idLista:idLista, nombreLista:nombreLista}, function(data){
  2820. $("body").append(data);
  2821. var panel = $("#panelFusionarLista"),
  2822. option = panel.find(".listaDestinoSelect option:first");
  2823.  
  2824. option.attr("selected", "selected");
  2825. panel.find(".listaDestino").val(option.val());
  2826. panel.find(".listaInversa").val("0");
  2827.  
  2828. centrarDiv(panel);
  2829. ocultaMensajeCentro();
  2830. cargaListaFusion(panel.find(".listaOrigen").val(), 1);
  2831. cargaListaFusion(panel.find(".listaDestino").val(), 2);
  2832. });
  2833. });
  2834.  
  2835.  
  2836.  
  2837.  
  2838. // Cuando cambia la lista de destino
  2839. $("#panelFusionarLista .listaDestinoSelect").live("change", function(){
  2840. var valor = $(this).val(),
  2841. panel = $("#panelFusionarLista");
  2842.  
  2843. // Seleccionamos la misma opcion en la otra lista
  2844. panel.find(".listaOrigenSelect option[value='"+ valor +"']").attr("selected", "selected");
  2845. panel.find(".listaDestino").val(valor);
  2846. panel.find(".bloqueIzq .listaAmigos .tachar").removeClass("tachar");
  2847. panel.find(".alerta").hide();
  2848.  
  2849. cargaListaFusion(valor, 2);
  2850.  
  2851. });
  2852.  
  2853. // Cuando cambia la lista de origen
  2854. $("#panelFusionarLista .listaOrigenSelect").live("change", function(){
  2855. var valor = $(this).val(),
  2856. panel = $("#panelFusionarLista");
  2857.  
  2858. panel.find(".listaDestinoSelect option[value='"+ valor +"']").attr("selected", "selected");
  2859. panel.find(".listaOrigen").val(valor);
  2860. cargaListaFusion(valor, 1);
  2861.  
  2862. });
  2863.  
  2864.  
  2865. // Invertir fusion listas
  2866. $("#panelFusionarLista .invertirFusion").live("click", function(){
  2867. var panel = $("#panelFusionarLista"),
  2868. listaInversa = panel.find(".listaInversa"),
  2869. izq = panel.find(".bloqueIzq"),
  2870. der = panel.find(".bloqueDer"),
  2871. listaDestino = panel.find(".listaDestino").val(),
  2872. listaOrigen = panel.find(".listaOrigen").val();
  2873.  
  2874.  
  2875. //Intercambiamos las listas en los inputs
  2876. panel.find(".listaOrigen").val(listaDestino);
  2877. panel.find(".listaDestino").val(listaOrigen);
  2878.  
  2879. // Si listaInversa = 0 la lista de origen es la lista desde donde ha pulsado fusionar
  2880. // Si listaInversa = 1 la lista de origen es alguna lista nuestra del select
  2881. if(listaInversa.val() == 1){
  2882. // Volvemos a 0
  2883. listaInversa.val("0");
  2884.  
  2885. // Hacemos el select visible, y el otro oculto
  2886. izq.find("select").parent().hide();
  2887. der.find("select").parent().show();
  2888.  
  2889. // Hacemos el cuadro mas pequeño
  2890. izq.find(".listaAmigos").height(210);
  2891. }else{
  2892. // Volvemos a 1
  2893. listaInversa.val("1");
  2894.  
  2895. // Hacemos el select visible, y el otro oculto
  2896. der.find("select").parent().hide();
  2897. izq.find("select").parent().show();
  2898.  
  2899. // Hacemos el cuadro mas pequeño
  2900. izq.find(".listaAmigos").height(258);
  2901. }
  2902.  
  2903. der.find(".nuevasCanciones").html("");
  2904.  
  2905. // Cargamos las listas
  2906. cargaListaFusion(panel.find(".listaOrigen").val(), 1);
  2907. cargaListaFusion(panel.find(".listaDestino").val(), 2);
  2908.  
  2909. })
  2910.  
  2911.  
  2912.  
  2913.  
  2914. // Cuando selecciona una cancion de la lista origen
  2915. $("#panelFusionarLista .bloqueIzq .listaAmigos .filaAmigo").live("click", function(){
  2916. if($(this).hasClass("tachar") == false){
  2917. var div = $(this),
  2918. idCancion = div.attr("idCancion"),
  2919. panel = div.parents("#panelFusionarLista"),
  2920. nombreCancion = div.text();
  2921.  
  2922. div.addClass("tachar");
  2923. panel.find(".nuevasCanciones").append('<div class="filaAmigo" idCancion="'+idCancion+'"><div class="quitar"></div>'+nombreCancion+'</div>');
  2924. panel.find(".botonEnvio").show();
  2925. panel.find(".msg").hide();
  2926. }
  2927. });
  2928.  
  2929.  
  2930. // Boton marcar todas las canciones
  2931. $("#panelFusionarLista .bloqueIzq .marcarTodas").live("click", function(){
  2932. var panel = $("#panelFusionarLista");
  2933. // Todas las canciones sin clase tachar
  2934. panel.find(".bloqueIzq .listaAmigos .filaAmigo").each(function(){
  2935. var div = $(this),
  2936. idCancion = div.attr("idCancion"),
  2937. nombreCancion = div.text();
  2938.  
  2939. if(div.hasClass("tachar") == false){
  2940. div.addClass("tachar");
  2941. // añadimos el div
  2942. panel.find(".bloqueDer .nuevasCanciones").append('<div class="filaAmigo" idCancion="'+idCancion+'"><div class="quitar"></div>'+nombreCancion+'</div>');
  2943. }
  2944. });
  2945.  
  2946. if(panel.find(".bloqueDer .nuevasCanciones .filaAmigo:not(.noDisponible)").length > 0){
  2947. panel.find(".botonEnvio").show();
  2948. panel.find(".msg").hide();
  2949. }else{
  2950. panel.find(".botonEnvio").hide();
  2951. panel.find(".msg").show();
  2952. }
  2953. });
  2954.  
  2955.  
  2956. // Cuando quita la cancion del div nuevas canciones
  2957. $("#panelFusionarLista .bloqueDer .nuevasCanciones .filaAmigo .quitar").live("click", function(){
  2958. var div = $(this).parent(),
  2959. idCancion = div.attr("idCancion"),
  2960. panel = $("#panelFusionarLista");
  2961.  
  2962. div.remove();
  2963. panel.find(".bloqueIzq .filaAmigo[idCancion='"+idCancion+"']").removeClass("tachar");
  2964.  
  2965. if(panel.find(".bloqueDer .nuevasCanciones .filaAmigo:not(.noDisponible)").length > 0){
  2966. panel.find(".botonEnvio").show();
  2967. panel.find(".msg").hide();
  2968. }else{
  2969. panel.find(".botonEnvio").hide();
  2970. panel.find(".msg").show();
  2971. }
  2972. });
  2973.  
  2974.  
  2975.  
  2976. // Cuando pulsa en el boton de fusionar
  2977. $("#panelFusionarLista .crearFusion").live("click", function(){
  2978. var boton = $(this),
  2979. panel = boton.parents("#panelFusionarLista"),
  2980. listaOrigen = panel.find(".listaOrigen").val(),
  2981. listaDestino = panel.find(".listaDestino").val(),
  2982. canciones = "",
  2983. clase = 'botonDesactivado';
  2984.  
  2985. panel.find(".nuevasCanciones .filaAmigo:not(.noDisponible)").each(function(){
  2986. canciones += $(this).attr("idCancion") + ":";
  2987. });
  2988.  
  2989. if(canciones.length > 0 && boton.hasClass(clase) == false){
  2990. boton.addClass(clase).val(enviando);
  2991. $.post(url_ajax_musica+"&s=26", {listaOrigen:listaOrigen, listaDestino:listaDestino, canciones:canciones}, function(data){
  2992. if(data == "1"){
  2993. panel.remove();
  2994.  
  2995. // Comprobar si en los widgets de musica tienen la lista a la que ha fusionado seleccionada, en caso de tenerla la actualiza
  2996. }
  2997. });
  2998. }
  2999. });
  3000.  
  3001.  
  3002.  
  3003.  
  3004.  
  3005.  
  3006.  
  3007. // VER FILTRO LISTA
  3008. $(".musica .uispoty-content .cabezaLista .botonesLista .btnFiltro").live("click", function(){
  3009. var boton = $(this)
  3010. divFiltro = boton.parents(".cabezaLista").find(".divFiltro"),
  3011. centro = divFiltro.parents(".uispoty-centro"),
  3012. idWid = centro.attr("id_widget"),
  3013. input = divFiltro.find(".inputMejor");
  3014.  
  3015. if(divFiltro.is(":visible")){
  3016. // Lo oculta
  3017. input.val(input.attr("hint"));
  3018. boton.find("img").attr("src","img/lupaFiltro.png");
  3019. divFiltro.slideUp(function(){
  3020. proporcionInterfazMusica(idWid);
  3021. });
  3022. centro.find(".listadoCanciones .filaOculta").removeClass("filaOculta"); // Mostramos todas las canciones
  3023. recolorea(input.parents(".uispoty-centro").attr("id_widget"));
  3024. }else{
  3025. // Lo hace
  3026. boton.find("img").attr("src","img/lupaFiltroCerrar.png");
  3027. divFiltro.show();
  3028. input.focus();
  3029. proporcionInterfazMusica(idWid);
  3030. }
  3031.  
  3032. });
  3033.  
  3034.  
  3035.  
  3036. // Al escribir el filtro
  3037. $(".musica .uispoty-content .cabezaLista .divFiltro .inputMejor").live("keyup", function(){
  3038. var input = $(this);
  3039.  
  3040. input.doTimeout( 'filtroCanciones', 300, function(){
  3041. var texto = input.val(),
  3042. lista = input.parents(".uispoty-content").find(".listadoCanciones");
  3043.  
  3044. if(texto.length > 0){
  3045. lista.find(".esCancion").addClass("filaOculta");
  3046. lista.find(".esCancion[filtro*='"+texto+"']").removeClass("filaOculta");
  3047. }else{
  3048. lista.find(".filaOculta").removeClass("filaOculta");
  3049. }
  3050.  
  3051. recolorea(input.parents(".uispoty-centro").attr("id_widget"));
  3052. // Se llaman de nuevo a crear los scrolls bars
  3053. lista.jScrollPane();
  3054. });
  3055. });
  3056.  
  3057.  
  3058.  
  3059.  
  3060.  
  3061.  
  3062.  
  3063.  
  3064. /* VOLUMEN */
  3065. $("div.musica div.player div.acciones div.btnVolumen").hoverIntent( configHoverVolumenMusica );
  3066.  
  3067.  
  3068. // MOUSEWHEEL habilitado para el volumen
  3069. $("div.musica div.player div.acciones div.cajaVolumen div.barraVolumen, div.musica div.player div.acciones div.btnVolumen").mousewheel(function(e, delta) {
  3070. var div = $(this),
  3071. deltaa;
  3072.  
  3073. if(div.hasClass("btnVolumen")){
  3074. // Es el icono del altavoz
  3075. slider = div.find("div.cajaVolumen div.barraVolumen");
  3076. }else{
  3077. // Es la barra
  3078. slider = div;
  3079. }
  3080.  
  3081. if(delta > 0){
  3082. deltaa = 10;
  3083. }else{
  3084. deltaa = -10;
  3085. }
  3086.  
  3087. var vol = slider.slider("value") + deltaa,
  3088. id_wid = slider.parents(".widget").attr("id");
  3089.  
  3090. div = slider.parents("div.btnVolumen");
  3091. slider.slider("value", vol);
  3092. actualizaVolumen(vol, div, id_wid);
  3093. return false;
  3094. });
  3095.  
  3096.  
  3097.  
  3098. // MUTE / UNMUTE
  3099. $("div.musica div.player div.acciones div.volumen").live("click", function(){
  3100. var div = $(this),
  3101. wid = div.parents(".widget"),
  3102. id_wid = wid.attr("id"),
  3103. slider = wid.find(".musica div.player div.acciones div.btnVolumen div.cajaVolumen div.barraVolumen"),
  3104. vol = div.attr("vol");
  3105.  
  3106. ytplayer = document.getElementById("myytplayer"+id_wid);
  3107.  
  3108. if(div.hasClass("volumenMute")){
  3109. // Quiere quitarse el mute, lo ponemos en el estado anterior
  3110. div.removeClass("volumenMute"); // Quitamos la clase
  3111. div.parent().find(".volumenSilenciando").show();
  3112. ytplayer.setVolume(vol); // Ponemos el volumen al video
  3113. slider.slider("value", vol); // Ponemos el valor al slider
  3114. $("#tooltip").text(vol);
  3115. }else{
  3116. // quiere silenciarse
  3117. if(ytplayer){
  3118. vol = ytplayer.getVolume();
  3119. }else{
  3120. vol = 100;
  3121. }
  3122. div.parent().find(".volumenSilenciando").hide();
  3123. div.addClass("volumenMute").attr("vol", vol); // Ponemos la clase y guardamos el volumen que tiene
  3124. ytplayer.setVolume(0); // Ponemos el volumen a cero
  3125. slider.slider("value", 0); // Ponemos el slider a 0
  3126. $("#tooltip").text(0);
  3127. }
  3128. return false;
  3129. });
  3130.  
  3131.  
  3132.  
  3133.  
  3134.  
  3135.  
  3136. /* TAMAÑO VIDEO */
  3137. $("div.musica div.player div.controlVideo").hoverIntent( configHoverDimensionVideoVolumen );
  3138.  
  3139. // Mostrar ocultar video
  3140. $("div.musica div.player div.controlVideo div.teleActivo").live("click", function(){
  3141. var div = $(this),
  3142. tamVideo = div.attr("tamVideo"),
  3143. wid = div.parents(".widget"),
  3144. idWid = wid.attr("id"),
  3145. left = wid.find(".uispoty-left"),
  3146. video = $("#myytplayer"+idWid);
  3147.  
  3148. if(tamVideo == "0"){
  3149. // Ocultamos el video
  3150. // Quitamos el height a tele y al div le metemos la clase sin tele.
  3151. div.addClass("sinTele");
  3152. div.attr("tamVideo", video.width() + ":" + video.height());
  3153. // Ocultamos el slider
  3154. div.parent().find(".cajaDimensionVideo").hide();
  3155. left.css({"width": "170px", "max-width": "170px"});
  3156. div.parent().find(".cajaDimensionVideo").slideUp();
  3157. video.height(1).width(1);
  3158. }else{
  3159. // Mostramos el video
  3160. var tams = tamVideo.split(":");
  3161. video.width(tams[0]).height(tams[1]);
  3162. var vW = video.width();
  3163. left.width(vW).css({"max-width": vW});
  3164. div.removeClass("sinTele");
  3165. div.parent().find(".cajaDimensionVideo").slideDown();
  3166. div.attr("tamVideo", "0");
  3167. }
  3168.  
  3169. proporcionInterfazMusica(idWid);
  3170. });
  3171.  
  3172.  
  3173.  
  3174. // Aumentamos, disminuimos video con el scroll del mouse
  3175. $("div.musica div.player div.controlVideo").mousewheel(function(e, delta) {
  3176. var div = $(this);
  3177. // Solo si el video está viendose
  3178. if(div.find(".teleActivo").attr("tamVideo") == "0"){
  3179. var slider = div.find("div.barraDimensionVideo"),
  3180. deltaa,
  3181. tam;
  3182.  
  3183. if(delta > 0){
  3184. deltaa = 10;
  3185. }else{
  3186. deltaa = -10;
  3187. }
  3188.  
  3189. tam = slider.slider("value") + deltaa;
  3190.  
  3191. slider.slider("value", tam);
  3192. actualizaTamVideo(div, tam);
  3193. }
  3194. return false;
  3195. });
  3196.  
  3197.  
  3198.  
  3199.  
  3200. // Cerrar el div de canciones relacionadas
  3201. $(".musica .videosRelacionados .cerrarRelacionados").live("click", function(){
  3202. var div = $(this),
  3203. centro = div.parents(".uispoty-centro"),
  3204. content = centro.find(".uispoty-content:visible");
  3205.  
  3206. div.parents(".videosRelacionados").remove();
  3207.  
  3208. content.find(".listadoCanciones").jScrollPane();
  3209.  
  3210. /*
  3211. // Copiamos el html al div oculto si las listas que estamos viendo son las
  3212. // determinamos que capa es la de ahora
  3213. if(centro.find(".listaActual div[idUnico]").attr("idUnico") == centro.find(".busquedaActual div[idUnico]").attr("idUnico")){
  3214. if(content.hasClass("listaActual")){
  3215. centro.find(".busquedaActual").html(content.html()).find(".videoSeleccionado").removeClass("videoSeleccionado");
  3216. }else{
  3217. centro.find(".listaActual").html(content.html()).find(".videoSeleccionado").removeClass("videoSeleccionado");
  3218. }
  3219. }
  3220. */
  3221. });
  3222.  
  3223.  
  3224.  
  3225.  
  3226.  
  3227.  
  3228. /* PORTADA SOCIAL */
  3229. // El acordeon
  3230. $('.musica .uispoty-centro .inicio .acordeon .desplegar').live("click", function(){
  3231. var div = $(this),
  3232. titulo = div.parent();
  3233.  
  3234. if(titulo.next().is(':hidden')) {
  3235. div.parents(".acordeon").find(".desplegado").removeClass('desplegado').parent().next().slideUp();
  3236. div.addClass('desplegado').parent().next().slideDown();
  3237. // Mandamos por ajax para que guarde que hemos visitado la lista o novedades del amigo
  3238. // Si un enviado lo tenemos a cero
  3239.  
  3240. if(titulo.attr("enviado") == "0"){
  3241. var seccion = titulo.attr("seccion"),
  3242. elemento = titulo.attr("elemento");
  3243.  
  3244. titulo.attr("enviado", "1");
  3245. $.post(url_ajax_musica+'&s=31',{seccion:seccion, elemento:elemento});
  3246. }
  3247. }else{
  3248. div.removeClass('desplegado').parent().next().slideUp();
  3249. }
  3250. });
  3251.  
  3252.  
  3253.  
  3254.  
  3255.  
  3256. // CREAR LISTA TEMPORAL DE USUARIO
  3257. // CREA UNA LISTA TEMPORAL DE LAS NOVEDADES
  3258. $('.musica .uispoty-centro .inicio .acordeon .reproducirUsuario, .musica .uispoty-centro .inicio .acordeon .reproducirNovedadesUsuario').live("click", function(){
  3259. // Coje un array de todas las canciones con el nombre y la duracion
  3260. var div = $(this),
  3261. todasCanciones = '',
  3262. cancion,
  3263. idWid = div.parents(".uispoty-centro").attr("id_widget"),
  3264. busqueda = div.parents(".busquedaActual"),
  3265. wid = $("#" + idWid),
  3266. capa;
  3267.  
  3268.  
  3269. // Saber si quiere reproducir temporalmente solo las canciones de un usuario o la de todos los usuarios
  3270. if(div.hasClass("reproducirUsuario")){
  3271. // De solo un usuario
  3272. capa = div.parent();
  3273. }else{
  3274. // De todos
  3275. capa = div.parents(".bloque");
  3276. }
  3277.  
  3278.  
  3279. capa.find(".cancion").each(function(){
  3280. // ID_VIDEO_YT||NOMBRE CANCION||DURACION||NOMBRE_USUARIO||IMG_PERFIL::
  3281. cancion = $(this);
  3282. todasCanciones += cancion.attr("idCancion") + "||" + cancion.attr("title") + "||" + cancion.attr("duracion") + "||" + cancion.attr("nombreUsuario") + "||" + cancion.attr("imgPerfil") + "::";
  3283. });
  3284.  
  3285. if(todasCanciones.length > 0){
  3286. capaCargando(idWid);
  3287.  
  3288. listaTemporalMusica(idWid, todasCanciones);
  3289. }
  3290. });
  3291.  
  3292.  
  3293.  
  3294.  
  3295. // Cuando presiona en una caratula
  3296. $(".musica .uispoty-centro .inicio .descubreGrupo").live("click", function(){
  3297. var div = $(this),
  3298. texto = div.attr("tooltip"),
  3299. idWid = div.parents(".uispoty-centro").attr("id_widget");
  3300. $("#tooltip").hide();
  3301. buscaMusica(texto, idWid, 1, 1);
  3302. });
  3303.  
  3304. $(".musica .uispoty-centro .inicio .nombreTag").live("click", function(){
  3305. var div = $(this),
  3306. texto = div.attr("nombreTag"),
  3307. idWid = div.parents(".uispoty-centro").attr("id_widget");
  3308. $("#tooltip").hide();
  3309. buscaMusica(texto, idWid, 1, 1);
  3310. });
  3311.  
  3312.  
  3313.  
  3314.  
  3315. // CUANDO PINCHA EN EL NOMBRE DE UNA LISTA, DEL BLOQUE NOVEDADES EN TUS LISTAS
  3316. // TB CUANDO PINCHA EN UNA CANCION
  3317. $(".musica .uispoty-centro .inicio .novedadesLista .verLista, .musica .uispoty-centro .inicio .novedadesLista .cancion").live("click", function(){
  3318. var div = $(this),
  3319. idLista = div.attr("idLista"),
  3320. idWid = div.parents(".uispoty-centro").attr("id_widget"),
  3321. idCancion = 0;
  3322.  
  3323. if(div.hasClass("cancion")){
  3324. idCancion = div.attr("idCancion");
  3325. }
  3326.  
  3327. // Cargamos la playlist
  3328. cargaPlaylist(idWid, idLista, idCancion, 0, 0);
  3329. return false;
  3330. });
  3331.  
  3332.  
  3333.  
  3334.  
  3335.  
  3336.  
  3337.  
  3338.  
  3339.  
  3340.  
  3341.  
  3342.  
  3343.  
  3344.  
  3345.  
  3346.  
  3347.  
  3348.  
  3349.  
  3350.  
  3351.  
  3352.  
  3353.  
  3354.  
  3355.  
  3356.  
  3357.  
  3358. /* BORRAR LISTA DE FAVS */
  3359. // Primero a salido un panel que le da a elegir diferentes opciones
  3360. // Cuando quiere procesar el borrar una lista
  3361. $("#borrarListaMusica .btnBorrarLista").live("click", function(){
  3362. var boton = $(this),
  3363. clase = 'botonDesactivado',
  3364. panel = $("#borrarListaMusica"),
  3365. idLista = panel.find(".idLista").val(),
  3366. borrarCanciones = 2, // Predeterminado deja las canciones
  3367. heredarLista;
  3368.  
  3369. // ¿Esta marcada alguna opcion de que hacer con las canciones de la lista?
  3370. if(panel.find(".tipoBorrado:checked").length > 0){
  3371. borrarCanciones = panel.find(".tipoBorrado:checked").val();
  3372. }
  3373.  
  3374. // Esta marcada alguna opcion de a quien heredar la lista?
  3375. if(panel.find(".usuarioHereda:checked").length > 0){
  3376. heredarLista = panel.find(".usuarioHereda:checked").val();
  3377. }
  3378.  
  3379. if(boton.hasClass(clase) == false){
  3380. boton.addClass(clase).text(enviando);
  3381. $.post(url_ajax_musica+"&s=33", {idLista:idLista, borrarCanciones:borrarCanciones, heredarLista:heredarLista}, function(data){
  3382.  
  3383. if(data == '1'){
  3384. // Borramos la lista visualmente del widget
  3385. $(".musica").each(function(){
  3386. var divLista = $(this).find(".uispoty-left li div[lista='"+ idLista +"']");
  3387. if(divLista.hasClass("activo")){
  3388. // Estaba viendose esa lista, tenemos que cargar el inicio del widget
  3389. var left = divLista.parents(".uispoty-left"),
  3390. idWid = left.attr("id_widget"),
  3391. wid = $("#"+idWid),
  3392. centro = wid.find(".uispoty-centro"),
  3393. inicio = centro.find(".inicioActual");
  3394.  
  3395. // Capa cargando
  3396. capaCargando(idWid);
  3397.  
  3398. $.post(url_ajax_musica+'&s=1',{idWid:idWid},function(data){
  3399.  
  3400. // Cambiamos al div inicioActual
  3401. centro.find(".uispoty-content").hide();
  3402. inicio.html(data).show();
  3403.  
  3404. // Si coincide que en reproduccion actual se está reproduciendo esa lista, vacia el div.
  3405. proporcionInterfazMusica(idWid);
  3406.  
  3407. // Borramos la capa cargando
  3408. wid.find(".capaCargando").remove();
  3409.  
  3410. });
  3411. }
  3412.  
  3413. // borramos el li
  3414. var ul = divLista.parents(".bloqueSpoty"),
  3415. scroll = divLista.parents(".scrollPersonalizado");
  3416. divLista.parent().remove();
  3417.  
  3418. // Si no hay mas li en ese bloque
  3419. if(ul.find("li").length == 0){
  3420. ul.html("<div style='padding:5px;'>" + ul.attr("txtTipo") + "</div>");
  3421. }
  3422.  
  3423. // Actualizamos scroll
  3424. scroll.jScrollPane();
  3425.  
  3426.  
  3427. });
  3428. boton.val(hecho);
  3429. // Al segundo borramos el panel
  3430. $.doTimeout( 1000, function(){
  3431. panel.remove();
  3432. });
  3433. }else{
  3434. // Ha habido un error
  3435. boton.val(error);
  3436. $.doTimeout( 1000, function(){
  3437. boton.val(borrar).removeClass(clase);
  3438. });
  3439. }
  3440. });
  3441. }
  3442. });
  3443.  
  3444.  
  3445.  
  3446.  
  3447.  
  3448.  
  3449.  
  3450. // PANEL DE ERROR DE CANCION
  3451. // Cuando quiere buscar de nuevo la cancion desde el panel que le informa que ya no existe la cancion
  3452. $("#YTerror .buscarCancion").live("click", function(){
  3453. var div = $(this),
  3454. idWid = div.attr("idWid"),
  3455. texto = div.attr("buscar");
  3456.  
  3457. $("#YTerror").remove();
  3458. buscaMusica(texto, idWid, 1, 1);
  3459. });
  3460.  
  3461.  
  3462.  
  3463.  
  3464. });
RAW Paste Data