channels = function(settings){
    /** 
     * Genera un arbol de categorías
     * @param {int} idPadre	Id de la caegoría padre
     * @param {bool} collapse	Contrae el arbol
     */
    showCat = function(idPadre, collapse, init){
        if (collapse == true) {//Pliega el arbol
            jQuery("#" + settings.canalesId).replaceWith('<div id="' + settings.canalesId + '"></div>');
        }
        //Pide los canales con el id padre indicado..
        jQuery.ajax({
            beforeSend: function(){
                jQuery("#" + settings.cargadoCanalesId).replaceWith('<div id="' + settings.cargadoCanalesId + '"><img src="' + settings.imagesUrl + 'ajax-loading.gif"></div>');
            },
            type: "POST",
            dataType: "json",
            url: settings.baseUrl + settings.urlPhpCats,
            data: "locale=" + settings.locale + "&id_cat_padre=" + idPadre,
            success: function(msg){
                jQuery("#" + settings.cargadoCanalesId).replaceWith('<div id="' + settings.cargadoCanalesId + '"></div>');
                //Crea un div por canal
                for (i = 0; i < msg.length; i++) {
                    //Pone el contenido en div
                    channelContent(idPadre, msg[i]);
                    //Asocia eventos a los canales
                    channelEvents(msg[i]);
                }
                if (init == true) {
                    expandCat(settings.initCatPadre, false);
                }
            }
        })
    }
    /** 
     * Muestra las categorías como arbol
     * @param {int} idPadre	Id de la caegoría padre
     * @param {array} dataCanal	Datos del canal
     */
    channelContent = function(idPadre, dataCanal){
        idCat = dataCanal['id_contenedor'];
        idCanal = 'canal_' + idCat;
        divPadre = 'canal_' + idPadre;
        idLink = 'a_' + idCat;
        if (idPadre == 0) {
            divPadre = settings.canalesId;
            var idLi = 'primerNivel';
        }
        else {
            var idLi = 'a_' + idPadre;
        }
        jQuery("#" + divPadre).append('<div class="channelList" id="' + idCanal + '"></div>');
        jQuery("#" + idCanal).append('');
        jQuery("#" + idCanal).append('<ul class="level_' + dataCanal['deep'] + '"><li><a id="' + idLink + '" href="javascript:;"> ' + dataCanal['nombre'] + '</a></li></ul>');
    }
    /** 
     * Asocia los eventos de los links de las categorías
     * @param {array} dataCanal	Datos del canal
     */
    channelEvents = function(dataCanal){
        switch (dataCanal['tipo_contenedor']) {
            case 'area':
                jQuery("#a_" + dataCanal['id_contenedor']).bind("click", function(){
                    expandCat(dataCanal['id_contenedor']);
                    cierraIframe();
                });
                if (dataCanal['design_id'] != 0) {
                    jQuery("#a_" + dataCanal['id_contenedor']).bind("click", function(){
                        changeCss(dataCanal['design_id'])
                    });
                }
                break;
            case 'canal':
                jQuery("#a_" + dataCanal['id_contenedor']).bind("click", function(){
                    showList("id_cat=" + dataCanal['id_contenedor']);
                    cierraIframe();
                });
                jQuery("#a_" + dataCanal['id_contenedor']).bind("click", function(){
                    channels.prototype.selectedChannel(dataCanal['id_contenedor'])
                });
                jQuery("#a_" + dataCanal['id_contenedor']).bind("click", function(){
                    channels.prototype.nombreCanal(dataCanal['nombre'])
                });
                jQuery("#a_" + dataCanal['id_contenedor']).bind("click", function(){
                    localizador(dataCanal['nombre'])
                });
                break;
            case 'frame':
                jQuery("#a_" + dataCanal['id_contenedor']).bind("click", function(){
                    loadIframe(dataCanal['id_contenedor'], dataCanal['id_tipo_contenedor']);
                    cierraIframe();
                });
                break;
            case 'streaming':
                jQuery("#a_" + dataCanal['id_contenedor']).bind("click", function(){
                    playExternalLive(dataCanal['id_contenedor'], dataCanal['id_tipo_contenedor']);
                    cierraIframe();
                });
                break;
        }
    }
    /**
     * Muestra u oculta el panel de categorías
     */
    toggleCats = function(){
        var div = document.getElementById(settings.canalesId);
        if (div.style.display == '' || div.style.display == 'none') {
            showCat(0, true);
            jQuery("#" + settings.canalesId).css("display", "block");
            jQuery("#" + settings.canalesId).hover(function(){
            },//HoverIn
 function(){
                toggleCats();
            })
        }
        else {
            jQuery("#" + settings.canalesId).css("display", "none");
        }
    }
    /** 
     * Pone el nombre del canal en el localizador
     * @param {string} nombreCat	Nombre de la categoría
     */
    localizador = function(nombreCat){
        jQuery("#" + settings.localizadorId).replaceWith('<div id="' + settings.localizadorId + '"><strong>estás en</strong>: </div>');
        jQuery("#" + settings.localizadorId).append(nombreCat);
    }
    /** 
     * Pone el nombre del canal en el listado de videos
     * @param {string} nombreCat	Nombre de la categoría
     */
    channels.prototype.nombreCanal = function(nombreCat){
        jQuery("#" + settings.canalResultadosId).replaceWith('<div id="' + settings.canalResultadosId + '" </div>');
        jQuery("#" + settings.canalResultadosId).append(nombreCat);
    }
    /** 
     * Configura la variable con el nombre del canal actual
     * @param {string} id	Id del canal actual
     */
    channels.prototype.selectedChannel = function(id){
        switch (id) {
            case 'destacado':
                settings.channelId = 'destacado'
                break
            case 'busqueda':
                settings.channelId = 'busqueda'
                break
            default:
                settings.channelId = id
        }
    }
    /** 
     * Expande una cvategoría
     * @param {int} idCat	Categoría a expandir
     */
    expandCat = function(idCat, init){
        showCat(idCat, false, init);
        jQuery("#a_" + idCat).attr({
            src: settings.imagesUrl + settings.locale + '/icon_can_expand_off.gif'
        });
        jQuery("#a_" + idCat).unbind();
        jQuery("#a_" + idCat).bind("click", function(){
            removeCats(idCat)
        });
    }
    /** 
     * Cierra una categoría
     * @param {int} idCat	Categoría a cerrra
     */
    removeCats = function(idCat){
        jQuery("#a_" + idCat).attr({
            src: settings.imagesUrl + settings.locale + '/icon_can_expand.gif'
        });
        jQuery("#a_" + idCat).unbind();
        jQuery("#canal_" + idCat + "> .channelList").remove();
        jQuery("#a_" + idCat).bind("click", function(){
            expandCat(idCat)
        });
    }
    /**
     * Acciones iniciales
     */
    if (settings.initCatPadre) {
        expandCat(0, true);
    }
    else {
        expandCat(0, false);
    }
    /*
     * Carga un iframe externo
     */
    loadIframe = function(idContenedor, idTipo){
        jQuery.ajax({
            type: "POST",
            dataType: "json",
            url: settings.baseUrl + settings.urlIframe,
            data: "locale=" + settings.locale + "&id_contenedor=" + idContenedor + "&id_tipo_contenedor=" + idTipo,
            success: function(msg){
                if (settings.player.stop) {
                    settings.player.stop();
                }
                jQuery(".zonavideo").css('display', 'none');
                jQuery(".destacados").css('display', 'none');
                jQuery("." + settings.externalFrame).css('display', 'block');
                jQuery("." + settings.externalFrame + " > iframe").attr('src', msg[0]['url']);
            }
        })
    }
    /*
     * Cierra el iframe
     */
    cierraIframe = function(){
        if (jQuery("." + settings.externalFrame).css('display') == 'block') {
            jQuery("." + settings.externalFrame + " > iframe").attr('src', '');
            jQuery(".zonavideo").css('display', 'block');
            jQuery(".destacados").css('display', 'block');
            jQuery("." + settings.externalFrame).css('display', 'none');
        }
    }
    /*
     * Cambia el aspecto de la aplicaci�n, css, im�genes
     */
    changeCss = function(idDesign){
        jQuery.ajax({
            type: "POST",
            dataType: "json",
            url: settings.baseUrl + settings.urlCss,
            data: "locale=" + settings.locale + "&id_design=" + idDesign,
            success: function(msg){
            
            }
        })
    }
    
    jQuery("#" + settings.cerrarIframe).bind("click", cierraIframe)
}
