// jQuery
$(document).ready(function() {
    // portada
    if ($('#nota_principal').length) {
        var denuncias = $('#denuncias');

        $($('<div>', {
            'id': 'cronos_twitter'
        }).append($('#twtr-widget-1'))).appendTo('#cronos_cont');

        if($('#video_btnplay')) {
            observarClicksVideo(true);
        } else if($('#videos_anteriores')) {
            observarClicksVideo(false);
        }

        var opacidad = $('#principal_opacidad');
        var top = parseInt(opacidad.css('top'));
        top -= (opacidad.height() - 60);
        opacidad.css('top', top);

        if($.browser.msie) {
            $('.jet_set').each(function(i, e) {
                $(e).css({
                    'width': 212,
                    'margin-right': '3px'
                });
            });

            $('#deportes_nota_titulo').css('width', 98);

            $('#nota_imagen').css('width', 578);
        }

        // denuncias
        if (denuncias.length) {
            denuncias.find('.opcion').live('click', function(click) {
                $.ajax(root + 'denuncia/cargar_min', {
                    type: 'get',
                    data: {
                        pag_actual: denuncias.find('.navegacion').data('pag'),
                        pag: $(this).data('pag')
                    },

                    beforeSend: function() {
                        denuncias.css({
                            'opacity': '0.5'
                        })
                    },

                    success: function(r) {
                        denuncias.html(r);
                    },

                    complete: function() {
                        denuncias.css({
                            'opacity': '1.0'
                        });
                    }
                });
                click.preventDefault();
            });
        }

        $('#galerias .gal_ant').live('mouseover', function(e) {
            $(this).css({
                'backgroundColor': '#dddddd',
                'color': '#333333'
            });
        });

        $('#galerias .gal_ant').live('mouseout', function(e) {
            $(this).css({
                'backgroundColor': '#ffffff',
                'color': '#000000'
            });
        });

        $('#galerias .gal_ant').live('click', function(e) {
            e.preventDefault();

            var id = $(this).data('id');

            $.ajax(root + 'galerias/refresh_list', {
                type: 'get',
                data: {
                    idGal: $(this).data('id')
                },

                success: function(response) {
                    $('#galerias .galerias_int').html(response);
                },

                complete: function() {
                    if ($('#gallery').length) {
                        parseGallery();
                    }
                }
            });
        });

        $("#galerias .galerias_anteriores a").live("click", function(e) {
            e.preventDefault();
        });


        // Sección de videos en portada
        setupJwPlayer(false);

        $('.tiempo_tv-contenido-anteriores-video').live('mouseover', function() {
            $(this).css({
                'background-color': 'white',
                'cursor': 'pointer'
            });
        });

        $('.tiempo_tv-contenido-anteriores-video').live('mouseout', function() {
            $(this).css({
                'background-color': '#cfcfcf'
            });
        });

        $('.tiempo_tv-contenido-anteriores-video').live('click', function() {
            var videoId = $(this).data('video-id');
            $.ajax(root + 'videos/choose/' + videoId, {
                type: 'get',

                success: function(r) {
                    $('.tiempo_tv-contenido')[0].innerHTML = r;
                },

                complete: function() {
                    setupJwPlayer(true);
                }
            });
        });

        $('.tiempo_tv-contenido-anteriores-flecha').live('click', function(click) {
            var pag = $('.tiempo_tv-contenido-anteriores-flecha').data('pag');
            var nuevaPag = $(this).hasClass('flecha-der') ? parseInt(pag) + 1 : parseInt(pag) > 1 ? parseInt(pag) - 1 : 1;
            var idVideoPrincipal = $('.tiempo_tv-contenido-principal').data('video-id');
            if (nuevaPag > 0) {
                $.ajax(root + 'videos/more/' + nuevaPag, {
                    type: 'get',
                    data: {
                        idPrincipal: idVideoPrincipal
                    },
                    beforeSend: function() {
                                    $('.tiempo_tv-contenido-anteriores').css({
                                        'opacity': '0.5'
                                    });
                                },

                    success: function(r) {
                                 $('.tiempo_tv-contenido-anteriores').html(r);
                             },

                    complete: function() {
                                  $('.tiempo_tv-contenido-anteriores').css({
                                      'opacity': '1.0'
                                  });
                              }
                });
            }
            click.preventDefault();
        });
        // fin sección videos portada


        var suscripcionAlertas = $('#suscripcion_alertas');

        // forma para suscribirse a alertas de transmisiones
        if (suscripcionAlertas.length) {
            // mostrar forma dándole click a la liga
            suscripcionAlertas.find('.alerta').click(function(e) {
                mostrarForma();
                e.preventDefault();
            });

            // ocultar forma dándole click a la 'x'
            suscripcionAlertas.find('.cerrar-forma').click(function(e) {
                ocultarForma();
                e.preventDefault();
            });

            // verificar que el correo sea válido y que no estén vacíos los campos
            suscripcionAlertas.find('#SuscripcionIndexForm').submit(function(e) {
                var submitButton = $(this).find('input[type=submit]'),
                    url = root + 'suscripciones/create',
                    submit = true;

                // deshabilitar el botón para evitar dobles clicks
                submitButton.attr('disabled', 'disabled');

                // correo no es válido
                if (validateEmail(this.SuscripcionCorreo.value) === false && this.SuscripcionCorreo.value.length) {
                    alert('El correo que pusiste no es válido.');
                    submit = false;
                }

                // dejó algún campo vacío
                if (!this.SuscripcionCorreo.value.length || !this.SuscripcionNombre.value.length) {
                    alert('Favor de proporcionar nombre y correo.');
                    submit = false;
                }

                if (submit) {
                    $.ajax(url, {
                        type: 'POST',
                        data: $(this).serialize(),

                        success: function(r) {
                            if (r.flash) {
                                suscripcionAlertas.find('.flash').html(r.flash.message);
                                if (r.flash.params['class']) {
                                    suscripcionAlertas.find('.flash').removeClass('default');
                                    suscripcionAlertas.find('.flash').addClass(r.flash.params['class']);
                                } else {
                                    suscripcionAlertas.find('.flash').removeClass('warning');
                                    suscripcionAlertas.find('.flash').addClass('default');
                                }
                            }
                        },

                        error: function() {
                            suscripcionAlertas.find('.flash').html('Se ocasionó un error, favor de intentar de nuevo mas tarde.');
                        },

                        complete: function() {
                            ocultarForma();
                            submitButton.removeAttr('disabled');
                        }
                    });
                } else {
                    submitButton.removeAttr('disabled');
                }

                e.preventDefault();
            });

            /**
             * Muestra la forma de alerta de correos
             */
            function mostrarForma() {
                suscripcionAlertas.find('.alerta').hide();
                suscripcionAlertas.find('.forma').fadeIn();
            }

            /**
             * Oculta la forma de alerta de correos
             */
            function ocultarForma() {
                suscripcionAlertas.find('.forma').fadeOut();
                suscripcionAlertas.find('.alerta').show();
            }
        }
    }

    // detalle de denuncia
    if ($('#denuncia-show-view').length) {
        (function() {
            var forma = $('#denuncia-show-view').find('.forma form');

            forma.find('input[type=submit]').removeAttr('disabled');
            forma.submit(function(e) {
                forma.find('input[type=submit]').attr('disabled', 'disabled');

                if (!this.DenunciaCont.value.length || !this.DenunciaNombre.value.length || !this.DenunciaCorreo.value.length ||
                    !this.DenunciaMinifoto.value.length) {
                    alert('Tienes que llenar todos los campos marcados con \'*\' y subir una foto.');
                    forma.find('input[type=submit]').removeAttr('disabled');
                    e.preventDefault();
                }
            });
        }());
    }

    // detalle nota
    if ($('#nota_contenido').length) {
        if($('#video_nota')) {
            var link = $('#video_nota_link');
            link.click(function(e) {
                insertarVideo({
                    nota: true,
                    loc: link.data('local'),
                    tipo: link.data('tipo'),
                    img: link.data('imagen'),
                    video: link.data('video'),
                    vp: 'video_nota'
                });
                e.preventDefault();
            });
        }

        setupJwPlayer(false);
    }

    // galeria
    if ($('#gallery').length) {
        parseGallery();
    }

    if ($('#slider').length) {
        $('#slider').nivoSlider({
            effect: 'fade',
            pauseTime: 7000
        });
        $('#slider').show();
    }

    // hemeroteca
    if ($('#hemeroteca').length) {
        observarSubmitHemeroteca($('#BuscarForm'));
    }
});

/*
* Se llama para observar cuando se le de click a los botones de play
* @param boolean play Si también se tienen que observar los botones
*   de play de la portada
*/
function observarClicksVideo(play) {
    if(play) {
        $('.boton-play').click(function(e) {
            playVideo(e.target, false);
            e.preventDefault();
        });
    }

    $('.anterior img').click(function(e) {
        playVideo(e.target, true);
        e.preventDefault();
    });
}

/*
* Hace la llamada por Ajax para tener los datos del video
* @param DOMElement | jQueryObject target, el elemento al que se le dió
*   click para sacar el id del video
* @param boolean actualizarLista Si hay que actualizar la lista de videos
*   anteriores al hacer la llamada Ajax
*/
function playVideo(target, actualizarLista) {
    var id = parseInt(target.id) || '';

    $.ajax(root + 'video/' + id, {
        type: 'get',

        success: function(response) {
            $('.boton-quitar').remove();

            $('#tit_video').show().html(
                '<span class="titulo">' + leerParam('tit', response)+ '</span>' +
                '<br />' +
                '<span class="descripcion">' + leerParam('desc', response)+ '</span>'
            );

            insertarVideo({
                tipo: leerParam('tipo', response),
                vp: 'video_principal',
                video: leerParam('vid', response),
                img: leerParam('img', response),
                embed: leerParam('embed', response),
                loc: leerParam('loc', response)
            });

            // se actualiza la lista de los videos anteriores
            if(actualizarLista) {
                dejarDeObservar();
                $('#videos_anteriores').html(leerParam('lst', response));
                observarClicksVideo(false);
            }
        },

        error: function() {
            alert('Error');
        }
    });
}

/*
* Saca el valor de un parametro de la respuesta de llamada Ajax
*   para un video
* @param string param El nombre del parametro a leer
* @param string respuesta La respuesta que devuelve el servidor
*   al pedir la información de un video
*/
function leerParam(param, respuesta) {
    return respuesta.substring(respuesta.indexOf(param + '=') + param.length + 1, respuesta.indexOf('@@' + param));
}

/*
* Inserta el video en el elemento adecuado dependiendo del tipo de video
* @param Object opciones
*    boolean nota Si el video es dentro de una nota
*    string loc "true" si el video es local
*    string tipo El tipo de video que es, "flash", "flv", "mp4", "wmv", "embed"
*    string img El nombre de la imagen a poner antes de que se reproduzca el video
*    string video El nombre del video a reproducir
*    string vp El nombre del id del elemento en donde poner el video
*    string embed El código embed de un video tipo "embed"
*/
function insertarVideo(opciones) {
    var width = opciones.nota ? 245 : 300,
    height = opciones.nota ? 200 : 245,
    domain = opciones.loc.toString() == "true" ? 'http://tiempo.com.mx/' : 'http://puentelibre.mx/',
    rootVid = opciones.nota ? 'assets/notas/video/' : 'videos/';

    if(opciones.tipo == 'flash' || opciones.tipo == 'flv' || opciones.tipo == 'mp4') {
        var so = new SWFObject(root + 'files/player.swf','mpl',width,height,'9');
        so.addParam('allowfullscreen','true');
        so.addParam('allowscriptaccess','always');
        so.addParam('wmode','opaque');
        so.addVariable('backcolor','333333');
        so.addVariable('frontcolor','FFFFFF');
        so.addVariable('image', domain + 'assets/notas/video/vid_thumb/' + opciones.img);
        so.addVariable('autostart', true);
        so.addVariable('file', domain + rootVid + opciones.video);
        so.write(opciones.vp);
    } else if (opciones.tipo == 'wmv' || opciones.tipo == 'wma' || opciones.tipo == 'mpg') {
        $('#' + opciones.vp).html('<embed type="application/x-mplayer2"' +
            'pluginspage="http://www.microsoft.com/Windows/MediaPlayer/"' +
            'name="mediaplayer1" autostart=1 width="'+width+'" height="'+height+'"' +
            'transparentstart="1" SHOWSTATUSBAR="0" loop="0" controller="true"' +
            'src="' + domain + rootVid + opciones.video.replace('%20', ' ') + '" stretchToFit="true" />');
    } else if(opciones.tipo == 'embed') { // se actualiza el video con el embed
        $('#' + opciones.vp).html(opciones.embed);
    }
}

/*
* Deja de observar las imágenes de los videos anteriores en portada
*/
function dejarDeObservar() {
    $('.anterior img').unbind();
}

/*
* Observa cuando se le dio click a la forma de hemeroteca
* @param DOMFormElement | jQueryObject forma La forma que se va a observar
*/
function observarSubmitHemeroteca(forma) {
    $(forma).submit(function(e) {
        var url = 'buscar',
        busca = this.busca.value,
        dia = ceroIzquierda(this.diaDay.value),
        mes = ceroIzquierda(this.mesMonth.value),
        anio = ceroIzquierda(this.anioYear.value);
        url += "/" + busca + "/" + anio + "/" + mes + "/" + dia + '/1';

        buscarNotasHemeroteca(url);

        e.preventDefault();
    });
}

/*
* Incluye un cero a la izquierda si el número es menor de 10
* @param string numero El número al cual se le quiere agregar un cero
*/
function ceroIzquierda(numero) {
    numero = numero.toString().length == 0 ? "00" : numero.toString();
    return (numero.length < 2) ? ("0" + numero) : numero;
}

/*
* Hace la llamada Ajax para sacar las notas en búsqueda de hemeroteca
* @param string url El url que se va a llamar con Ajax
*/
function buscarNotasHemeroteca(url) {
    console.log(url);
    $.ajax(url, {
        type: 'get',

        beforeSend: function() {
            $('#loader').html('<img src="webroot/img/ajax-loader.gif" />');
        },

        success: function(response) {
            $('#resultados').html(response);
            $('#loader').html('');

            if($('#pagina_siguiente')) {
                $('#pagina_siguiente').click(function(e) {
                    var pagSig = $(this).data('pagina');
                    var urlSig = url.substr(0, url.lastIndexOf('/')) + '/' + pagSig;
                    console.log(urlSig);
                    buscarNotasHemeroteca(urlSig);
                    e.preventDefault();
                    $(this).unbind();
                });
                $('#pagina_anterior').click(function(e) {
                    var pagAnt = $(this).data('pagina');
                    var urlAnt = url.substr(0, url.lastIndexOf('/')) + '/' + pagAnt;
                    buscarNotasHemeroteca(urlAnt);
                    e.preventDefault();
                    $(this).unbind();
                });
            }
        },

        error: function() {
            $('#resultados').html('Lo sentimos, se ocasionó un error al momento de la búsqueda');
            $('#loader').html('');
        }
    });
}

/*
 * inicializa el reproductor jw player
 * @param boolean autoplay opción autostart de jw player
 */
function setupJwPlayer(autoplay) {
    var playerDiv = $('#tiempo_tv-contenido-principal-player');
    if (playerDiv.length) {
        var concluido = false,
            empezado = false,
            idVideo = playerDiv.data('id'),
            tipo = playerDiv.data('tipo'),
            remoto = playerDiv.data('remoto'),
            baseVideo = remoto ? 'http://puentelibre.mx/' : root,
            baseFoto = remoto ? 'http://puentelibre.mx/' : root.slice(0, -1),
            rutaVideo = tipo == 'convertido' ? 'videos/convertidos/' : 'videos/',
            width = playerDiv.data('width'),
            height = playerDiv.data('height');

        jwplayer("tiempo_tv-contenido-principal-player").setup({
            flashplayer: root + 'files/player.swf',
            file: baseVideo + rutaVideo + playerDiv.data('video'),
            image: baseFoto + playerDiv.data('imagen'),
            autostart: autoplay,
            width: parseInt(width),
            height: parseInt(height),
            events: {
                onPlay: function(event) {
                    if (!empezado) {
                        empezado = true;
                        hitVideo(idVideo);
                    }
                },

                onComplete: function() {
                    if (!concluido && empezado) {
                        concluido = true;
                        hitConcluidoVideo(idVideo);
                    }
                }
            }
        });

        function hitVideo(id, tipo) {
            tipo = tipo || 'miavisi';
            $.ajax(root + 'videos/hit', {
                type: 'post',
                data: {
                    id: id,
                    tipo: tipo
                }
            });
        }

        function hitConcluidoVideo(id) {
            hitVideo(id, 'hits_concluidos');
        }
    }
}

function parseGallery() {
    var gallery = $('#gallery');
    gallery.tn3({
        height: parseInt(gallery.data('height')),
        width: parseInt(gallery.data('width')),
        skinDir: '/css'
    });
    gallery.show();
}

function validateEmail(elementValue){
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
    return emailPattern.test(elementValue);
}

