
/* Fichero js: ../dev/gcm/gcm/modulos/editar/js/generico.js */
/* Fichero js: ../dev/gcm/gcm/modulos/ver_registros/js/ver_registros.js */
/* Fichero js: ../dev/gcm/gcm/modulos/temas/js/paneles.js */
/* Fichero js: ../dev/gcm/gcm/modulos/temas/js/general.js */
/* Fichero js: ../dev/gcm/gcm/modulos/temas/js/farbtastic.js */
/* Fichero js: ../dev/gcm/gcm/modulos/indexador/js/indexador.js */
/* Fichero js: ../dev/gcm/gcm/modulos/menu/js/menu.js */
/* Fichero js: ../dev/gcm/gcm/modulos/descargables/js/descargables.js */
/* Fichero js: ../dev/gcm/gcm/modulos/literales/js/literales.js */

/* Archivo javascript de proyecto */


/* generico.js */

/* SVN $Id:$ */

/**
 * @category  Modulos
 * @package   Editar
 * @author    Eduardo Magrané <eduardo mamedu com>
 * @license   http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt GNU/GPL
 * @version   0.2
 */

/** InsertarEmail
 *
 * Añadimos un email de forma oculta a los robots para tinyMCE
 */

function insertaEmail(formulario) {

   var em = formulario.email.value.split('@');
   tinyMCE.execCommand('mceInsertContent',true,'<a href="javascript:enviarEmail(\''+em[0]+'\',\''+em[1]+'\');">'+formulario.nombre.value+'</a>')
   return (false);
}

/** insertaReferencia()
 *
 * Para insertar referencias de documento que estamos editando, estas referencias posteriormente
 * son presentadas como Enlaces relacionados en una lista
 */

function insertaReferencia(formulario) {

   var contenido = '{Ref{'+formulario.enlace.value+'::'+formulario.nombre.value+'}}';
   tinyMCE.execCommand('mceInsertContent',false,contenido);
   return false;

   }



/* ver_registros.js */

/** 
 * javascript para el módulo ver_registros
 *
 */

/**
 * Visualizar los registros
 */

function visualizar_registros(formulario,sesion) {

   var filtro = formulario.filtro.value;
   var container = $('#caja_registro_'+sesion);

   container.html('<br /><b>Recuperando registros...</b>');

   $.get('?m=ver_registros&a=registros_ajax&filtro='+filtro,function(data){
      container.html(data);
      });
   // pedirDatos('?m=ver_registros&a=registros_ajax&filtro='+filtro,'presenta_registros()');
   return false;

   }

/** 
 * Procesa la llegada de datos de l servidor
 */

function presenta_registros() {

   var container = document.getElementById('caja_registro_'+sesion);

   if (pedido.readyState == 4 ) {

      container.innerHTML = 'Buscando registros...';

      if ( pedido.status == 200 ) {
         var salida = pedido.responseText;
         container.innerHTML = salida ;
         }

      }
   return false;
   }



/* paneles.js */


/** paneles()
 * Construimos botones para controlar la visibilidad o no
 * sobre los div con class panel que tengan un tituloPanel dentro
 * y una subcaja con la clase subpanel_oculto o subpanel_visible.
 *
 * los nombre de clases de los subpaneles hacen referencia a si de entrada
 * están ocultos o no.
 *
 * Si no se dan todas estas circustancias no hacemos nada.
 */

function paneles() {

   var paneles = $('.panel .tituloPanel');

   paneles.each( function(i) { // i va desde 0 hasta divs.length-1

      var titulo = $(this);
      var enlace = $('a:lt(1)', titulo).attr('href');
      var contenido = $(this).html(); // alert(contenido);
      var caja = $(this).parent().find('div');
      var estado = caja.attr('class'); // alert('Estado: '+estado);

      if ( estado == 'subpanel_oculto' ) {
         $(this).wrap('<div class="barraTitulo"><span style="float:left;"></span><span class="controles"><a class="bp_on" href="'+enlace+'">[+]</a></span></div>');
         caja.removeClass('subpanel_oculto');
         caja.addClass('subpanel_visible');

      } else if ( estado == 'subpanel_visible' ) {

         $(this).wrap('<div class="barraTitulo"><span style="float:left;"></span><span class="controles"><a class="bp_off" href="'+enlace+'">[-]</a></span></div>');
         caja.removeClass('subpanel_visible');
         caja.addClass('subpanel_oculto');
         }
      });

   $('.bp_on , .bp_off').click(function(){

      if ( $(this).attr('class') == 'bp_on' )  {

         var on = $(this);
         on.html('[-]');
         on.removeClass('bp_on');
         on.addClass('bp_off');

         /* Si tenemos input le damos foco */

         var input = on.parents(".panel").find(":input:first");
         input.focus();

      } else {
      
         var off = $(this);
         off.html('[+]');
         off.removeClass('bp_off');
         off.addClass('bp_on');

         }
      });

   $('.panel .tituloPanel').click(function(){

      var on = $(this).parent().parent().find('.bp_on');
      var off = $(this).parent().parent().find('.bp_off');

      on.html('[-]');
      on.removeClass('bp_on');
      on.addClass('bp_off');

      /* Si tenemos input le damos foco */

      var input = on.parents(".panel").find(":input:first");
      input.focus();

      off.html('[+]');
      off.removeClass('bp_off');
      off.addClass('bp_on');
      });
   }




/* general.js */

/** gcm.js
 *
 * Funciones javascript imprescindibles para el funcionamiento de gcm
 *
 */

/** Lanzar funciones al cargarse la página
 * Función que nos permite lanzar más de una función al
 * cargar la página.
 *
 * Forma de uso::
 *
 *    addLoadEvent(function(){
 *       pedirDatos('?m=imagenes&a=ajaxImg&s=<?=$d ?>','editarImagenesAdmin')
 *       });
 *
 * @ref http://www.danilat.com/weblog/2007/11/20/la-forma-correcta-de-usar-windowonload/
 *
 */

function addLoadEvent(func){

   var oldonload = window.onload;

   if (typeof window.onload != 'function') {

      window.onload = func;

   } else {

      window.onload = function(){
         if (oldonload) {
            oldonload();
            }
         func();
         }
      }
   }

/** Ajax
 *
 * Funciones javascript para la administración de la aplización
 * 
 * @author Eduardo Magrané
 */

function newAjax() {
   var xmlhttp = false;
   try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
   } catch (e1) {
      try {
         xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e2) {
         xmlhttp = false;
      }
   }
   if (!xmlhttp && (typeof XMLHttpRequest != 'undefined' || window.XMLHttpRequest)) {
      xmlhttp = new XMLHttpRequest();
   }
   return xmlhttp ;
}

/**
* pedirDatos
*/

var nSolicitud = 0;
var pedido;

/** pedirDatos()
 *
 * Solicitar una respuesta
 *
 * @param url url al servidor
 * @param accion funcion allamar al recibir los resultados
 * @param confirmacion Mensaje que se presenta para confirmar la acción
 *        si no hay no se pide.
 *
 * @autor Eduardo Magrané
 * @version 0.2
 *
 */

function pedirDatos(url , accion , confirmacion){

   var self = this;
   nSolicitud++ ;
   var indicador=false;
   var temporizador=false;

   if ( confirmacion ) {
      if ( ! confirm(confirmacion) ) {
         return FALSE;
      }
   }
   self.pedido = newAjax();
   if ( ! self.pedido ) {
      alert('ERROR::No se pudo crear una conexión con ajax');
      return FALSE;
   }
   self.pedido.open('GET',url, true);
   //pedido.open('GET',url, false);
   self.pedido.onreadystatechange=eval(accion) ;
   self.pedido.send(null);
}
/*
* Presentamos los constantes para poder ser insertados en el formulario
* de tiny.
*/

function presentaConstantes(){

   if (pedido.readyState == 4 ) {
      if ( pedido.status == 200 ) {
         var container = document.getElementById('panelConstantes');
         var salida = '<br />' ;
         var datos = eval('['+pedido.responseText+']');
         if ( datos ) {
            for ( var elemento in datos ) {
               for ( var subelemento in datos[elemento] ) {
                  //salida += '<p class="subpanel" style="text-align:left">';
                  salida += '<p class="subpanel" >';
                  salida += '<a href="javascript:;" onmousedown="tinyMCE.execCommand(\'mceInsertContent\',false,\'{C{' + subelemento + '}}\');" ';
                  salida += 'title="' + datos[elemento][subelemento][0] + ' | ' + datos[elemento][subelemento][1] + '" >';
                  salida += subelemento + '</a>';
                  salida += '</p>';
               }
            }
            container.innerHTML = salida ;
         }

      }
   }

   }

/**
 * Con esta función podemos conmutar la visualización de una capa
 */

function visualizar( id ) {
	if (document.getElementById){
		var elemento = document.getElementById(id);
		if (elemento.style.display == "none") {
			//elemento.style.display = "";
			$(elemento).fadeIn(500);
		} else {
			//elemento.style.display = "none";
			$(elemento).fadeOut(100);
		}
	}
}

/**
* Crear una ventana con javascript con el contenido de un div existente
* centrarlo en la ventana y añadir un boton de cierre
*
* @param titulo Titulo a mostrar en la ventana
* @param contenido Contenido de la ventana
* @oaram identificador Id de la ventana
*
* @todo Hacer la ventana arrastrable y evitar que se repira una ventana con el mismo identifiador
*/

function ventana(titulo,contenido, identificador) {

   // centramos ventana
   var topp = 40 ;
   var leftt = 30 ;
   win = document.createElement('div');
   //document.getElementById('contenido').appendChild(win);
   if ( document.getElementById('editando') ) {
      document.getElementById('editando').appendChild(win);
   } else {
      document.getElementById('contenido').appendChild(win);
   }

   win.id = 'ventana_'+identificador;
   win.style.position = 'absolute';
   win.style.top = topp + '%';
   win.style.left = leftt + '%';
   win.style.border = '1px solid #fff';
   win.style.background = 'olive';
   win.style.color = 'white';
   win.style.width = '300px';
   // Transparencia
   if ( navigator.appName == 'Microsoft Internet Explorer' ) {
      win.style.filter = 'alpha(opacity="85")';
   } else {
      win.style.opacity = '0.85';
   }
   contenido = '<div style="text-align:right"><span style="float:left">'+titulo+'</span><span style="position:relative;left: 0px; " ><a href="javascript:this.cerrar(\''+win.id+'\')">X</a></span></div><div style="padding: 15px">' + contenido + '</div>';
   win.innerHTML = contenido;

   this.cerrar = function(id){
     cr = document.getElementById(id);
     cr.parentNode.removeChild(cr);

   }

}


/**
 * Enviar email oculto
 */

function enviarEmail(nom,dominio){

   window.open('mailto:'+nom+'@'+dominio,'_self');

}

/**
 * Comprobar si una variable es array o no
 *
 * @return true/false
 */

function is_array(obj) {

   if (obj.constructor.toString().indexOf("Array") == -1)
      return false;
   else
      return true;
}

/** Funciones que se inician al cargar la pagina
 *
 * @todo Anulamos galeria de imagenes hasta resolver los problemas
 */

addLoadEvent(function(){
   // linksImgView();
   paneles();
   // $(this).pngFix();
   });



/* farbtastic.js */

/**
 * Farbtastic Color Picker 1.2
 * © 2008 Steven Wittens
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 */

jQuery.fn.farbtastic = function (callback) {
  $.farbtastic(this, callback);
  return this;
};

jQuery.farbtastic = function (container, callback) {
  var container = $(container).get(0);
  return container.farbtastic || (container.farbtastic = new jQuery._farbtastic(container, callback));
}

jQuery._farbtastic = function (container, callback) {
  // Store farbtastic object
  var fb = this;

  // Insert markup
  $(container).html('<div class="farbtastic"><div class="color"></div><div class="wheel"></div><div class="overlay"></div><div class="h-marker marker"></div><div class="sl-marker marker"></div></div>');
  var e = $('.farbtastic', container);
  fb.wheel = $('.wheel', container).get(0);
  // Dimensions
  fb.radius = 84;
  fb.square = 100;
  fb.width = 194;

  // Fix background PNGs in IE6
  if (navigator.appVersion.match(/MSIE [0-6]\./)) {
    $('*', e).each(function () {
      if (this.currentStyle.backgroundImage != 'none') {
        var image = this.currentStyle.backgroundImage;
        image = this.currentStyle.backgroundImage.substring(5, image.length - 2);
        $(this).css({
          'backgroundImage': 'none',
          'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')"
        });
      }
    });
  }

  /**
   * Link to the given element(s) or callback.
   */
  fb.linkTo = function (callback) {
    // Unbind previous nodes
    if (typeof fb.callback == 'object') {
      $(fb.callback).unbind('keyup', fb.updateValue);
    }

    // Reset color
    fb.color = null;

    // Bind callback or elements
    if (typeof callback == 'function') {
      fb.callback = callback;
    }
    else if (typeof callback == 'object' || typeof callback == 'string') {
      fb.callback = $(callback);
      fb.callback.bind('keyup', fb.updateValue);
      if (fb.callback.get(0).value) {
        fb.setColor(fb.callback.get(0).value);
      }
    }
    return this;
  }
  fb.updateValue = function (event) {
    if (this.value && this.value != fb.color) {
      fb.setColor(this.value);
    }
  }

  /**
   * Change color with HTML syntax #123456
   */
  fb.setColor = function (color) {
    var unpack = fb.unpack(color);
    if (fb.color != color && unpack) {
      fb.color = color;
      fb.rgb = unpack;
      fb.hsl = fb.RGBToHSL(fb.rgb);
      fb.updateDisplay();
    }
    return this;
  }

  /**
   * Change color with HSL triplet [0..1, 0..1, 0..1]
   */
  fb.setHSL = function (hsl) {
    fb.hsl = hsl;
    fb.rgb = fb.HSLToRGB(hsl);
    fb.color = fb.pack(fb.rgb);
    fb.updateDisplay();
    return this;
  }

  /////////////////////////////////////////////////////

  /**
   * Retrieve the coordinates of the given event relative to the center
   * of the widget.
   */
  fb.widgetCoords = function (event) {
    var x, y;
    var el = event.target || event.srcElement;
    var reference = fb.wheel;

    if (typeof event.offsetX != 'undefined') {
      // Use offset coordinates and find common offsetParent
      var pos = { x: event.offsetX, y: event.offsetY };

      // Send the coordinates upwards through the offsetParent chain.
      var e = el;
      while (e) {
        e.mouseX = pos.x;
        e.mouseY = pos.y;
        pos.x += e.offsetLeft;
        pos.y += e.offsetTop;
        e = e.offsetParent;
      }

      // Look for the coordinates starting from the wheel widget.
      var e = reference;
      var offset = { x: 0, y: 0 }
      while (e) {
        if (typeof e.mouseX != 'undefined') {
          x = e.mouseX - offset.x;
          y = e.mouseY - offset.y;
          break;
        }
        offset.x += e.offsetLeft;
        offset.y += e.offsetTop;
        e = e.offsetParent;
      }

      // Reset stored coordinates
      e = el;
      while (e) {
        e.mouseX = undefined;
        e.mouseY = undefined;
        e = e.offsetParent;
      }
    }
    else {
      // Use absolute coordinates
      var pos = fb.absolutePosition(reference);
      x = (event.pageX || 0*(event.clientX + $('html').get(0).scrollLeft)) - pos.x;
      y = (event.pageY || 0*(event.clientY + $('html').get(0).scrollTop)) - pos.y;
    }
    // Subtract distance to middle
    return { x: x - fb.width / 2, y: y - fb.width / 2 };
  }

  /**
   * Mousedown handler
   */
  fb.mousedown = function (event) {
    // Capture mouse
    if (!document.dragging) {
      $(document).bind('mousemove', fb.mousemove).bind('mouseup', fb.mouseup);
      document.dragging = true;
    }

    // Check which area is being dragged
    var pos = fb.widgetCoords(event);
    fb.circleDrag = Math.max(Math.abs(pos.x), Math.abs(pos.y)) * 2 > fb.square;

    // Process
    fb.mousemove(event);
    return false;
  }

  /**
   * Mousemove handler
   */
  fb.mousemove = function (event) {
    // Get coordinates relative to color picker center
    var pos = fb.widgetCoords(event);

    // Set new HSL parameters
    if (fb.circleDrag) {
      var hue = Math.atan2(pos.x, -pos.y) / 6.28;
      if (hue < 0) hue += 1;
      fb.setHSL([hue, fb.hsl[1], fb.hsl[2]]);
    }
    else {
      var sat = Math.max(0, Math.min(1, -(pos.x / fb.square) + .5));
      var lum = Math.max(0, Math.min(1, -(pos.y / fb.square) + .5));
      fb.setHSL([fb.hsl[0], sat, lum]);
    }
    return false;
  }

  /**
   * Mouseup handler
   */
  fb.mouseup = function () {
    // Uncapture mouse
    $(document).unbind('mousemove', fb.mousemove);
    $(document).unbind('mouseup', fb.mouseup);
    document.dragging = false;
  }

  /**
   * Update the markers and styles
   */
  fb.updateDisplay = function () {
    // Markers
    var angle = fb.hsl[0] * 6.28;
    $('.h-marker', e).css({
      left: Math.round(Math.sin(angle) * fb.radius + fb.width / 2) + 'px',
      top: Math.round(-Math.cos(angle) * fb.radius + fb.width / 2) + 'px'
    });

    $('.sl-marker', e).css({
      left: Math.round(fb.square * (.5 - fb.hsl[1]) + fb.width / 2) + 'px',
      top: Math.round(fb.square * (.5 - fb.hsl[2]) + fb.width / 2) + 'px'
    });

    // Saturation/Luminance gradient
    $('.color', e).css('backgroundColor', fb.pack(fb.HSLToRGB([fb.hsl[0], 1, 0.5])));

    // Linked elements or callback
    if (typeof fb.callback == 'object') {
      // Set background/foreground color
      $(fb.callback).css({
        backgroundColor: fb.color,
        color: fb.hsl[2] > 0.5 ? '#000' : '#fff'
      });

      // Change linked value
      $(fb.callback).each(function() {
        if (this.value && this.value != fb.color) {
          this.value = fb.color;
        }
      });
    }
    else if (typeof fb.callback == 'function') {
      fb.callback.call(fb, fb.color);
    }
  }

  /**
   * Get absolute position of element
   */
  fb.absolutePosition = function (el) {
    var r = { x: el.offsetLeft, y: el.offsetTop };
    // Resolve relative to offsetParent
    if (el.offsetParent) {
      var tmp = fb.absolutePosition(el.offsetParent);
      r.x += tmp.x;
      r.y += tmp.y;
    }
    return r;
  };

  /* Various color utility functions */
  fb.pack = function (rgb) {
    var r = Math.round(rgb[0] * 255);
    var g = Math.round(rgb[1] * 255);
    var b = Math.round(rgb[2] * 255);
    return '#' + (r < 16 ? '0' : '') + r.toString(16) +
           (g < 16 ? '0' : '') + g.toString(16) +
           (b < 16 ? '0' : '') + b.toString(16);
  }

  fb.unpack = function (color) {
    if (color.length == 7) {
      return [parseInt('0x' + color.substring(1, 3)) / 255,
        parseInt('0x' + color.substring(3, 5)) / 255,
        parseInt('0x' + color.substring(5, 7)) / 255];
    }
    else if (color.length == 4) {
      return [parseInt('0x' + color.substring(1, 2)) / 15,
        parseInt('0x' + color.substring(2, 3)) / 15,
        parseInt('0x' + color.substring(3, 4)) / 15];
    }
  }

  fb.HSLToRGB = function (hsl) {
    var m1, m2, r, g, b;
    var h = hsl[0], s = hsl[1], l = hsl[2];
    m2 = (l <= 0.5) ? l * (s + 1) : l + s - l*s;
    m1 = l * 2 - m2;
    return [this.hueToRGB(m1, m2, h+0.33333),
        this.hueToRGB(m1, m2, h),
        this.hueToRGB(m1, m2, h-0.33333)];
  }

  fb.hueToRGB = function (m1, m2, h) {
    h = (h < 0) ? h + 1 : ((h > 1) ? h - 1 : h);
    if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;
    if (h * 2 < 1) return m2;
    if (h * 3 < 2) return m1 + (m2 - m1) * (0.66666 - h) * 6;
    return m1;
  }

  fb.RGBToHSL = function (rgb) {
    var min, max, delta, h, s, l;
    var r = rgb[0], g = rgb[1], b = rgb[2];
    min = Math.min(r, Math.min(g, b));
    max = Math.max(r, Math.max(g, b));
    delta = max - min;
    l = (min + max) / 2;
    s = 0;
    if (l > 0 && l < 1) {
      s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l));
    }
    h = 0;
    if (delta > 0) {
      if (max == r && max != g) h += (g - b) / delta;
      if (max == g && max != b) h += (2 + (b - r) / delta);
      if (max == b && max != r) h += (4 + (r - g) / delta);
      h /= 6;
    }
    return [h, s, l];
  }

  // Install mousedown handler (the others are set on the document on-demand)
  $('*', e).mousedown(fb.mousedown);

    // Init color
  fb.setColor('#000000');

  // Set linked elements/callback
  if (callback) {
    fb.linkTo(callback);
  }
}

/* indexador.js */

function initListadoContenido(contexto) {

   /** Botonera */

   // $('.titulo_articulo', contexto ).mouseover(function(e) {
   //    var caja = $(this).parent("div");
   //    var caja_titulo = caja.children(".titulo_articulo").children(".doc_info");
   //    caja_titulo.append('<h3 class="botonera"><a href="">[Ampliar]</a></h3>');
   //    });

   // $('.titulo_articulo', contexto ).mouseout(function(e) {
   //    var caja = $(this).parent("div");
   //    var caja_titulo = caja.children(".titulo_articulo").children(".doc_info");
   //    var botonera = caja_titulo.children(".botonera");
   //    botonera.remove();
   //    });

   /* Evento click */

   $('.titulo_articulo', contexto ).children("a").click(function(e) {

      var caja = $(this).parent().parent("div");
      var titulo = $(this);
      var contenido = caja.children(".contenido_articulo");
      var url = titulo.attr("href");

      /* Miramos la clase para saber el estado */

      var estado = caja.attr("class");

      if ( estado == 'elemento_lista_off'  ) {

         caja.removeClass("elemento_lista_off");
         caja.addClass("elemento_lista_on");

         contenido.html("Buscando contenido...");

         if ( url ) {
            $.get('?e=contenido_ajax&formato=ajax&url='+url,function(data){
               contenido.html(data);
              });
            }
         return false;
         }
 
      if ( estado == 'elemento_lista_on'  ) {

         caja.removeClass("elemento_lista_on");
         caja.addClass("elemento_lista_hide");

         contenido.hide("slow");
         return false;
         }

      if ( estado == 'elemento_lista_hide'  ) {

         caja.removeClass("elemento_lista_hide");
         caja.addClass("elemento_lista_on");

         contenido.show("slow");
         return false;
         }

      });

   }

$(document).ready(function() { 
      if ( !(jQuery.browser.msie && jQuery.browser.version < 7)) { // take away IE6
         initListadoContenido("#listado_de_contenido");
         }
      });


/* menu.js */

/**
*
* Transformammos los links con identificador `menu_ajax` en enlaces hacia ajax
*
* @author Eduardo Magrané
* @version 1.0
*
*/

function initMenu(contexto) {

   $('.m_off', contexto ).click(function() {

      var lista = $(this).parent();
      var url = $(this).attr("href");  // alert(url);
      lista.html("Cargando...");

      if ( url ) {
         $.get('?a=menu_ajax&m=menu&url='+url,function(data){
            lista.replaceWith(data);
            initMenu("#barraNavegacion");
           });
         }
         return false;
      });

   $('.m_on', contexto).click(function() {

      var lista = $(this);
      var url = lista.attr("href"); // alert(url);
      if ( url ) {
         lista.html("");
         $.get('?a=menu_ajax_off&m=menu&url='+url,function(data){
            lista.parent().next().remove();
            lista.replaceWith(data);
            initMenu("#barraNavegacion");
           });
         }
         return false;
      });
}

$(document).ready(function() { 
      if ( !(jQuery.browser.msie && jQuery.browser.version < 7)) { // take away IE6
         initMenu("#barraNavegacion");
         }
      });


/* descargables.js */


function init_descargables() {

   $('.boton_codigo').click(function() {

         // desglosar programa de id
         var programa = this.id.substring(4);

         //var caja = $('#caja_'+programa);
         //caja.replaceWith('Cargando...');
         
         $('#caja_codigo').html('Cargando...');

         $.get('?m=descargables&a=presenta_contenido&p='+programa,function(data) {
            $('#caja_codigo').replaceWith(data);
            });
         return false;
         });

}



/* literales.js */

/**
 * @file      literales.js
 * @brief     Javascript para el manejo de literales.
 *
 * @author    Eduardo Magrané 
 *
 * @internal
 *   Created  23/04/10
 *  Revision  SVN $Id: $
 * Copyright  Copyright (c) 2010, Eduardo Magrané
 *
 * This source code is released for free distribution under the terms of the
 * GNU General Public License as published by the Free Software Foundation.
 */

/**
 * Presentamos los literales para poder ser insertados en el formulario
 * de tiny.
 *
 * En caso de que el literal no tenga contenido le aplicamos la clase subpanelNegativo, para
 * tener una visión rápida de los literales que faltan y Añadimos botón de traducción en vez 
 * de modificar.
 *
 */

function presentaLiterales() {

   if (pedido.readyState == 4 ) {
      if ( pedido.status == 200 ) {
         var container = document.getElementById('panelLiterales');
         var salida = '<p style="cursor: pointer;" onclick="javascript:insertarLiteral()" >Añadir</p>' ;
         var datos = eval('['+pedido.responseText+']');
         if ( datos ) {
            for ( var elemento in datos ) {
               for ( var subelemento in datos[elemento] ) {

                  if ( ! datos[elemento][subelemento][1] ) {
                     salida += '<p class="subpanelNegativo">';
                  } else {
                     salida += '<p class="subpanel">';
                     
                     }

                  salida += '<a href="javascript:;" onmousedown="tinyMCE.execCommand(\'mceInsertContent\',false,\'{L{' + subelemento + '}}\'); return false" ';
                  salida += 'title="' + datos[elemento][subelemento] + '" >';
                  salida += subelemento + '</a>';
                  salida += '  <a style="font-size: smaller;" title="Eliminar" href="javascript:;" onmousedown="eliminarLiteral(\''+subelemento.replace("'","\'")+'\')" >[X]</a>';

                  /* No contiene literal */

                  if ( ! datos[elemento][subelemento][1] ) {
                     salida += '  <a style="font-size: smaller;" title="Traducir" href="javascript:;" onmousedown="modificarLiteral(\''+subelemento+'\',\''+datos[elemento][subelemento]+'\')" >[T]</a>';
                  } else {
                     salida += '  <a style="font-size: smaller;" title="Modificar" href="javascript:;" onmousedown="modificarLiteral(\''+subelemento+'\',\''+datos[elemento][subelemento]+'\')" >[M]</a>';
                     }

                  salida += '</p>';
                  }
               }
            container.innerHTML = salida ;
            }

         }
      }

   }

/**
 * Confirmación para la inserción de elementos
 */

function confirmarAnaydirLiteral()
   {
   if (pedido.readyState == 4 ) {
      if ( pedido.status == 200 ) {
         var datos = pedido.responseText;
         pedirDatos('?formato=ajax&m=literales&a=devolverLiterales','presentaLiterales');
         }
      }
   }

/**
*
* Insertar literal nuevo
*
* @author Eduardo Magrané
* @version 1.0
*
* @return
*
*/

function insertarLiteral()
   {
      var key = prompt('concepto','');
      pedirDatos('?formato=ajax&m=literales&a=anyadirLiteral&elemento='+key,'confirmarAnaydirLiteral');
   }


   /**
    * Traducir literales de los idiomas que no son por defecto
    *
    * @param key Clave del literal que queremos traducir
    *
    */

function traducirLiteral(key)
   {
      var res = prompt('Traducción','');
      pedirDatos('?formato=ajax&m=literales&a=anyadirLiteral&elemento='+key+'&valor='+res,'confirmarAnaydirLiteral');
   }

   /**
    * Eliminar literal
    *
    * @param key Clave del literal que queremos eliminar
    */

function eliminarLiteral(key)
   {
      pedirDatos('?formato=ajax&m=literales&a=eliminarLiteral&elemento='+key,'confirmarAnaydirLiteral');
   }


   /**
    *
    * Modificar literales de los idiomas
    *
    * @author Eduardo Magrané
    * @version 1.0
    *
    * @param key Clave del literal que queremos modificar
    * @param val Valor actual del literal
    *
    * @return
    *
    */

function modificarLiteral(key,val) {
      var res = prompt('Modificaión de '+key,val);
      pedirDatos('?formato=ajax&m=literales&a=modificarLiteral&elemento='+key+'&valor='+res,'confirmarAnaydirLiteral');
   }


