if (null==youmaxColumns||youmaxColumns==""||youmaxColumns=="undefined")
var youmaxColumns=2;
if (null==youmaxWidgetWidth||youmaxWidgetWidth==""||youmaxWidgetWidth=="undefined")
var youmaxWidgetWidth=640;
if (typeof youmaxWidgetHeight!=='undefined') {
if(null!=youmaxWidgetHeight&&youmaxWidgetHeight!=""&&youmaxWidgetHeight!="undefined")
$('html > head').append('');
}
var youtubeMqdefaultAspectRatio=300/180;
var youtubeVideoAspectRatio=640/360;
var likedPlayListId = '';
var favoritesPlayListId = '';
var watchPlayListId = '';
var uploadsPlayListId = '';
var ownPlayListId = '';
$(document).ready(function() {
var style='';
$('html > head').append(style);
prepareYoumax();
});
/**
* Función principal que muestra el plugin de youtube.
*/
function prepareYoumax() {
$('#youmax').empty();
loadYoumax();
showLoader();
$('.youmax-tab').click(function(){
$('.youmax-tab').css('color','#666');
$('.youmax-tab').css('background-color','rgb(230,230,230)');
$('.youmax-tab').css('text-shadow','0 1px 0 #fff');
$(this).css('color','#eee');
$(this).css('background-color','#999');
$(this).css('text-shadow','0 0');
youmaxTabId=this.id;
if(youmaxTabId=="youmax-featured")
getPlayList(likedPlayListId);
if(youmaxTabId=="youmax-uploads")
getPlayList(uploadsPlayListId);
if(youmaxTabId=="youmax-playlists")
getPlayList(favoritesPlayListId);
});
var apiProfileURL='https://www.googleapis.com/youtube/v3/channels?part=contentDetails%2C+snippet%2C+statistics&id=UC' + youmaxUser +'&key=' + apiKey;
$.ajax({url:apiProfileURL,
type:"GET",
async:true,
cache:true,
dataType:'jsonp',
success:function(response){
if (response.items.length > 0) {
getInfo(response.items[0]);
// Seleccionamos la primera pestaña
$("#youmax-featured").click();
}
},
error:function(html){
showNoData('youmax-header');
},
beforeSend:setHeader
});
}
/**
* Crea los contenedores del plugin.
*/
function loadYoumax() {
$('#youmax').append('
');
$('#youmax').append('Me gustaVídeos SubidosFavoritos
');
$('#youmax').append('');
$('#youmax-video').hide();
$('#youmax').append('');
$('#youmax-lightbox').hide();
}
/**
* Muestra el texto de cargando.
*/
function showLoader(){
$('#youmax-video-list-div').empty();
$('#youmax-video').hide();
$('#youmax-video').attr('src','');
$('#youmax-video-list-div').append('
Cargando...
');
}
/**
* Recupera los vídeos de la lista de reproducción.
*
* @param playListId id de la lista de reproducción.
*/
function getPlayList (playListId) {
if (playListId != '') {
showLoader();
var apiPlaylistVideosURL = 'https://www.googleapis.com/youtube/v3/playlistItems?part=contentDetails&maxResults=6&playlistId=' + playListId + '&key=' + apiKey;
$.ajax({
url:apiPlaylistVideosURL,
type:"GET",
async:true,
cache:true,
dataType:'jsonp',
success:function(response){
if (response.items.length > 0) {
showPlaylistVideos(response.items);
}
else {
showNoData('youmax-video-list-div');
}
},
error:function(html){alert(html);},
beforeSend:setHeader});
}
else {
showNoData('youmax-video-list-div');
}
}
/**
* Muestra la información del canal de usuario.
*
* @param response datos
*
* @returns
*/
function getInfo (response) {
var channelName=response.snippet.title;
var channelPic= response.snippet.thumbnails['default'].url;
var channelSubscribers=response.statistics.subscriberCount;
var channelViews=response.statistics.viewCount;
var channelDesc=response.snippet.description;
var youtubelogo = CTX + '/images/redsociales/youtube-large.png';
$('#youmax-links').append(''+channelName + '');
$('#youmax-stat-holder').append(''+getReadableNumber(channelViews)+'
visitas
'+getReadableNumber(channelSubscribers)+'
suscriptores
');
$('#youmax-channel-desc').append('About '+channelName+'
'+channelDesc);
// Guardamos los ids de las playlists
if (response.contentDetails.relatedPlaylists.likes != undefined) {
likedPlayListId = response.contentDetails.relatedPlaylists.likes;
}
if (response.contentDetails.relatedPlaylists.favorites != undefined) {
favoritesPlayListId = response.contentDetails.relatedPlaylists.favorites;
}
if (response.contentDetails.relatedPlaylists.watchHistory != undefined) {
watchPlayListId = response.contentDetails.relatedPlaylists.watchHistory;
}
if (response.contentDetails.relatedPlaylists.uploads != undefined) {
uploadsPlayListId = response.contentDetails.relatedPlaylists.uploads;
}
}
/**
* Muestra los vídeos de una lista de reproducción.
*
* @param response lista de vídeos.
*/
function showPlaylistVideos(response){
$('#youmax-video-list-div').empty();
var videoArray = response;
getVideos(videoArray, 0);
}
/**
* Recupera la información de los videos de una lista de reproducción.
*
* @param videoArray array de identificadores de vídeos.
*
* @param i posición del array a tratar.
*/
function getVideos (videoArray, i) {
apiVideosURL = 'https://www.googleapis.com/youtube/v3/videos?part=snippet%2C+contentDetails%2C+statistics&id=' + videoArray[i].contentDetails.videoId + '&key=' + apiKey;
$.ajax({
url:apiVideosURL,
type:"GET",
async: true,
cache:true,
dataType:'jsonp',
success:function(response){
if (response.items.length > 0) {
showVideo(response.items[0], i);
}
else
showNoData('youmax-video-list-div');
},
error:function(html){
alert(html);
},
complete: function() {
if (videoArray.length > ++i) {
getVideos(videoArray, i);
}
else {
$('.youmax-video-tnail-box').click(function(){
if(showVideoInLightbox){
showVideoLightbox(this.id);
}
else{
$('#youmax-video').attr('src','http://www.youtube.com/embed/'+this.id);
$('#youmax-video').show();
$('html,body').animate({scrollTop:$("#youmax-header").offset().top},'slow');
}
});
var youmaxTnailWidth = 300;
var youmaxTnailHeight = youmaxTnailWidth/youtubeMqdefaultAspectRatio;
$('div.youmax-video-tnail').css({'height':youmaxTnailHeight+'px'});
}
},
beforeSend:setHeader
});
}
/**
* Muestra un vídeo en el contenedor.
*
* @param response datos del vídeo.
*
* @param i posición del vídeo.
*/
function showVideo (response, i) {
var videoId = response.id;
var videoTitle = response.snippet.title;
var videoViewCount= response.statistics.viewCount;
var videoDuration= response.contentDetails.duration;
var videoThumbnail = response.snippet.thumbnails.medium.url;
var videoUploaded = response.snippet.publishedAt;
if(i%youmaxColumns!=0)
$('#youmax-video-list-div').append(''+secondsToTime(videoDuration)+'
'+videoTitle+''+getReadableNumber(videoViewCount)+' reproducciones | Hace '+getDateDiff(videoUploaded)+' ');
else
$('#youmax-video-list-div').append(''+secondsToTime(videoDuration)+'
'+videoTitle+''+getReadableNumber(videoViewCount)+' reproducciones | Hace '+getDateDiff(videoUploaded)+' ');
}
/**
* Crea la capa para la visualización del vídeo.
*
* @param videoId identoficador del vídeo.
*/
function showVideoLightbox(videoId){
$('#youmax-lightbox').show();
$('#youmax-video-lightbox').attr('src','http://www.youtube.com/embed/'+videoId);
$('#youmax-lightbox').click(function(){
$('#youmax-video-lightbox').attr('src','');
$('#youmax-lightbox').hide();
});
}
/**
* Muestra que no se han obtenido datos en el div correspondiente.
*
* @param div id del contenedor
*/
function showNoData (div) {
$('#' + div).empty();
$('#' + div).append('
No hay datos disponibles.
');
}
/**
* Crea las cabeceras para las peticiones AJAX.
*
* @param xhr petición ajax.
*/
function setHeader(xhr){
if(xhr&&xhr.overrideMimeType){
xhr.overrideMimeType("application/j-son;charset=UTF-8");
}
}
/**
* Convierte la duración indicada en la respuesta del API de youtube al formato mm:ss.
*
* @param duration duración del video en formato PTxMxS donde x será el número de minutos y segundos del vídeo.
*
* @returns {String} duración del vídeo en formato mm:ss.
*/
function secondsToTime (duration) {
if(null==duration||duration==""||duration=="undefined")
return"?";
var minutes = '0';
if (duration.indexOf('M') != -1) {
minutes = duration.substring(2, duration.indexOf('M'));
}
var seconds = '00';
if (duration.indexOf('S') != -1) {
var index = 2;
if (duration.indexOf('M') != -1) {
index = duration.indexOf('M') + 1;
}
seconds = duration.substring(index, duration.indexOf('S'));
if (parseInt(seconds) < 10) {
seconds = '0' + seconds;
}
}
var time = minutes+":"+seconds;
return time;
}
/**
* Calcula el tiempo transcurrido desde una fecha hasta el día de hoy.
*
* @param timestamp fecha.
*
* @returns {String} el tiempo transcurrido en años, meses y días.
*/
function getDateDiff(timestamp){
if(null==timestamp||timestamp==""||timestamp=="undefined")
return"?";
var splitDate=((timestamp.toString().split('T'))[0]).split('-');
var d1=new Date();
var d1Y=d1.getFullYear();
var d2Y=parseInt(splitDate[0],10);
var d1M=d1.getMonth();
var d2M=parseInt(splitDate[1],10);
var diffInMonths=(d1M+12*d1Y)-(d2M+12*d2Y);
if(diffInMonths<=1)
return"1 mes";
else if(diffInMonths<12)
return diffInMonths+" meses";
var diffInYears=Math.floor(diffInMonths/12);
if(diffInYears<=1)
return"1 año";
else if(diffInYears<12)
return diffInYears+" años";
}
/**
* Formatea un número.
*
* @param number número a formatear.
*
* @returns el número formateado.
*/
function getReadableNumber(number){
if(null==number||number==""||number=="undefined")
return"?";
number=number.toString();
var readableNumber='';
var count=0;
for(var k=number.length;k>=0;k--){
readableNumber+=number.charAt(k);
if(count==3&&k>0){
count=1;
readableNumber+=',';
}
else {
count++;
}
}
return readableNumber.split("").reverse().join("");
}