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){
        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]);
                }
            }
        })
    }
    /** 
     * 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'];
        divPadre = 'canal_' + idPadre;
        idCanal = 'canal_' + idCat;
        idLink = 'a_' + idCat;
        if (idPadre == 0 || settings.arbolCat == 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('<div class="folder"><img src="' + settings.imagesUrl + '/folder.gif"></div>');
        jQuery("#" + idCanal).append('<a id="' + idLink + '">' + dataCanal['nombre'] + '</a>');
    }
    /** 
     * 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']);
                    localizador(dataCanal['localizador']);
                    if (dataCanal['design_id'] != 0) {
                        changeCss(dataCanal['design_id']);
                    }
                    cierraIframe();
                });
                break;
            case 'canal':
                jQuery("#a_" + dataCanal['id_contenedor']).bind("click", function(){
                    cierraIframe();
                    showList("id_cat=" + dataCanal['id_contenedor'])
                });
                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'])
                });
                break;
            case 'frame':
                jQuery("#a_" + dataCanal['id_contenedor']).bind("click", function(){
					cierraIframe();
                    loadIframe(dataCanal['id_contenedor'], dataCanal['id_tipo_contenedor'])
                });
                break;
            case 'streaming':
                jQuery("#a_" + dataCanal['id_contenedor']).bind("click", function(){
                    cierraIframe();
                    playExternalLive(dataCanal['id_contenedor'], dataCanal['id_tipo_contenedor'])
                });
                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(localizador){
        jQuery("." + settings.localizadorClass).replaceWith('<div class="' + settings.localizadorClass + '"></div>');
        jQuery("." + settings.localizadorClass).append('<img src="' + localizador + '">');
    }
    /** 
     * 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){
        jQuery("#a_" + idCat).unbind();
        if (settings.arbolCat == 1) {
            jQuery("#a_" + idCat).bind("click", function(){
                removeCats(idCat)
            });
            showCat(idCat);
        }
        else {
            showCat(idCat, true);
        }
    }
    /** 
     * Cierra una categoría
     * @param {int} idCat	Categoría a cerrra
     */
    removeCats = function(idCat){
        jQuery("#a_" + idCat).unbind();
        jQuery("#canal_" + idCat + "> .channelList").remove();
        jQuery("#a_" + idCat).bind("click", function(){
            expandCat(idCat)
        });
    }
    /*
     * 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("#" + settings.contentHolder).css('display', 'none');
                jQuery("#" + settings.videosId).css('display', 'none');
                jQuery("." + settings.externalFrame).css('display', 'block');
                jQuery("." + settings.externalFrame + " > iframe").attr('src', msg[0]['url']);
            }
        })
    }
    /*
     * 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){
              switch (msg[0]['css']){
                case 'rojo':
                jQuery(".color > div" ).attr({
                    className: "rojo"
                });
               
                jQuery(".canales").css("border-color","#df0909");
                jQuery(".video").css("border-color","#df0909");
                jQuery(".listado").css("border-color","#df0909");
                jQuery(".bottom").css("border-color","#df0909");
               
                break;
                case 'verde':
                jQuery(".color > div" ).attr({
                    className: "verde"
                });
                jQuery(".canales").css("border-color","#48860b");
                jQuery(".video").css("border-color","#48860b");
                jQuery(".listado").css("border-color","#48860b");
                jQuery(".bottom").css("border-color","#48860b");
                break;
                case 'azul':
                jQuery(".color > div" ).attr({
                    className: "azul"
                });
                jQuery(".canales").css("border-color","#00599b");
                jQuery(".video").css("border-color","#00599b");
                jQuery(".listado").css("border-color","#00599b");
                jQuery(".bottom").css("border-color","#00599b");
                break;
                case 'naranja':
                jQuery(".color > div" ).attr({
                    className: "naranja"
                });
                jQuery(".canales").css("border-color","#ff8604");
                jQuery(".video").css("border-color","#ff8604");
                jQuery(".listado").css("border-color","#ff8604");
                jQuery(".bottom").css("border-color","#ff8604");
                break;
              }
            }
        })
    }
    /**
     * Acciones iniciales
     */
    if (settings.arbolCat == 1) {
        jQuery("#" + settings.primerNivel).bind("click", function(){
            toggleCats();
        })
    }
    else {
        jQuery("#" + settings.inicioCanal).bind("click", function(){
			cierraIframe();
			videoList(settings, false);
			channels.prototype.nombreCanal('Destacados');
            showCat(0, true);
        })
        showCat(0, true);
    }
    /*
     * Cierra el iframe
     */
     cierraIframe = function (){
	 	if( jQuery("." + settings.externalFrame).css('display') == 'block'){
			jQuery("." + settings.externalFrame + " > iframe").attr('src', '');  
	        jQuery("#" + settings.contentHolder).css('display', 'block');
	        jQuery("#" + settings.videosId).css('display', 'block');
	        jQuery(".listado").css('display', 'block');
	        jQuery("." + settings.externalFrame).css('display', 'none');
		}
	 }
    jQuery("#" + settings.cerrarIframe).bind("click", cierraIframe )
    
}
