<!--

// Funcion simple de ayuda para i18n. En realidad, supone que el texto
// i18n ya esta traducido, asi que solo reemplaza los parametros %1%, %2%, etc.
function i18n (texto, param1, param2, param3, param4, param5, param6)
{
	var textoOk = texto;
	if (param1)  textoOk = textoOk.replace ("%1%", param1);
	if (param2)  textoOk = textoOk.replace ("%2%", param2);
	if (param3)  textoOk = textoOk.replace ("%3%", param3);
	if (param4)  textoOk = textoOk.replace ("%4%", param4);
	if (param5)  textoOk = textoOk.replace ("%5%", param5);
	if (param6)  textoOk = textoOk.replace ("%6%", param6);
	
	return textoOk;
}


/*** Procesamiento de marcas i18n, creando enlaces al traductor de textos ***/

var i18nProcesarMarcasEjecutado = false;

var _i18n_marca1 = "[*i18n*[";
var _i18n_marca2 = "]*i18n*]";

// Funcion principal, se debe registrar en el window onLoad para que funcione
function i18nProcesarMarcas()
{
	if (i18nProcesarMarcasEjecutado) return;
	i18nProcesarMarcasEjecutado = true;
	
	try {
		var hijos = document.body.getElementsByTagName ('*');
		for (var iElem=0; iElem<hijos.length; iElem++) {
			i18nProcesarMarcasElem ($(hijos[iElem]));
		}
		
	} catch (error) {
		// Se ignora error deliberadamente
	}
}

function i18nProcesarMarcasElem (elem)
{
	if (elem.nodeName.toLowerCase() == 'script')  return;
	
	// Atributos que a priori pueden tener texto traducible
	var atribs = new Array ('value', 'alt', 'title', 'href');
	for (var i=0; i<atribs.length; i++) {
		try {
			if (elem.getAttributeNode(atribs[i]) != null)
				i18nProcesarMarcasAtributo (elem, atribs[i]);
		} catch (e) {
		}
	}
	
	var nodosHijo = elem.childNodes;
	for (var i=0; i<nodosHijo.length; i++) {
		if (nodosHijo[i].nodeType == 3)
			i18nProcesarMarcasTexto (elem, nodosHijo[i]);
	}
}

function i18nProcesarMarcasTexto (elem, nodoTexto)
{
	var valor = nodoTexto.nodeValue;
	if ((valor != null) && (valor != '') && (valor.indexOf)) {
		// Busca marca
		var idx = valor.indexOf (_i18n_marca1);
		if (idx >= 0) {
			// Encontrada, se reemplaza
			var val0 = valor.substring (0, idx);

			valor = valor.substring (idx);
			var idx2 = valor.indexOf (_i18n_marca2);
			if (idx2 < 0) {
				// Si no hay cierre, se deja como estaba 
			} else {
				var val2 = valor.substring (idx2 + _i18n_marca2.length);
				var texto = valor.substring (_i18n_marca1.length, idx2);
				var i18nLink = i18nLinkTexto (texto);
				
				// Se parte el nodo en tres: texto val0, elem i18nLink, texto val2
				nodoTexto.nodeValue = val2;
				var nodoTexto0 = document.createTextNode (val0);

				// Comportamiento distinto si estamos dentro de un link o un select
				var elemNoLinks = i18nGetElementoNoLinks (elem);	
				
				// Dentro de un link o un select 
				if (elemNoLinks != null) {
					// Sacar el enlace fuera del elemento
					elem.insertBefore (nodoTexto0, nodoTexto);
					elemNoLinks.insert ({after: i18nLink});
				
				} else {
					// Si no, se pone el link directamente detras del texto
					elem.insertBefore (i18nLink, nodoTexto);
					elem.insertBefore (nodoTexto0, i18nLink);
				}
				
				// Se procesan las marcas del nodo con el texto posterior
				i18nProcesarMarcasTexto (elem, nodoTexto);
			}
		}
	}
}

function i18nGetElementoNoLinks (elem)
{
	var elemNoLinks = null;
	var noLinks = new Array ('a', 'script', 'select', 'textarea', 'input', 'button');
	
	// Propio elemento
	for (var i=0; (i<noLinks.length) && (elemNoLinks == null); i++) {
		if (elem.nodeName.toLowerCase() == noLinks[i]) {
			elemNoLinks = elem;
		}
	}
	
	// Padres
	for (var i=0; (i<noLinks.length) && (elemNoLinks == null); i++) {
		elemNoLinks = elem.up (noLinks[i]);
	}
	
	return elemNoLinks;
}


function i18nProcesarMarcasAtributo (elem, atrib)
{
	var valor = elem.readAttribute (atrib);
	if ((valor != null) && (valor != '') && (valor.indexOf)) {
		// Busca marca
		var idx = valor.indexOf (_i18n_marca1);
		if (idx >= 0) {
			// Encontrada, se reemplaza
			var val0 = valor.substring (0, idx);

			valor = valor.substring (idx);
			var idx2 = valor.indexOf (_i18n_marca2);
			if (idx2 < 0) {
				// Si no hay cierre, se deja como estaba 
			} else {
				var val2 = valor.substring (idx2 + _i18n_marca2.length);
				elem.writeAttribute (atrib, val0 + val2);
				
				var texto = valor.substring (_i18n_marca1.length, idx2);
				i18nAddLinkTexto (elem, texto);
			}
		}
	}
}

function i18nLinkTexto (texto)
{
	var i18nImg = new Element('img', {
			'src': root_i18n + '/img/botones/i18n.gif',
			'alt': 'i18n: ' + texto
			});
	var i18nLink = new Element('a', {
			'href': '../i18n/gestion.cmd?buscar=exacto&texto=' + Url.encode (texto),
			'title': 'i18n: ' + texto
			});
	i18nLink.insert (i18nImg);
	
	return i18nLink;
}

function i18nAddLinkTexto (elem, texto)
{
	var i18nLink = i18nLinkTexto (texto);

	var elemPrincipal = i18nGetElementoNoLinks (elem);	
	if (elemPrincipal == null) {
		elemPrincipal = elem;
	}
	elemPrincipal.insert ({after: i18nLink});
}


//-->
