document.utiles_js = true;	
	
	var cookies = new Object();
	cookies = extractCookies();


	Array.prototype.search = 
	function(s){
		var i;
		for (i=0;i<this.length;i++){
			if (this[i]==s)
				return i;
		}//for
		return -1;
	};
	/**
		@param	int	prefijoCampo: prefijo del campo que comparten todos los idiomas (ejemplo: sec_nombre_ seria el prefijo de sec_nombre_1, sec_nombre_2, sec_nombre_3)
		@param	int	idi_id: id del idioma desde el que se copiara al resto
	*/
	function copiarAlRestoDeIdiomas(prefijoCampo, idi_id){
		if (idi_id==undefined)
			var idi_id = getCookie("idioma_activo");
		var eOrigen = document.getElementById(prefijoCampo+idi_id);
		//alert(prefijoCampo+idi_id);
		if (!eOrigen || !myConfirm("¿Desea duplicar este valor para el resto de idiomas?"))
			return false;
		var v = document.getElementsByTagName(eOrigen.tagName);
		var e = null;
		//alert("^"+prefijoCampo+"([0-9]+)$");

		for(var i=0;i<v.length;i++){
			e = v[i];
			//alert(e.id+" : "+new RegExp("^"+prefijoCampo+"([0-9]+)$").test(e.id));
			if (!(new RegExp("^"+prefijoCampo+"([a-zA-Z0-9]+)$").test(e.id)))
				continue;
			if (eOrigen.type)
			switch(eOrigen.type){
			case "hidden":
			case "textarea":
			case "text":
				e.value = eOrigen.value;
				break;
			case "checkbox":
				e.checked = eOrigen.checked;
				break;
			}
		}
	}//copiarAlRestoDeIdiomas
/******************************************************/
/******************************************************/
	/** myAlert
	
	*/
	function myAlert(x) {
		alert(encodeText(x));
	}
	
	function myConfirm(mens){
		return confirm(encodeText(mens));
	}
	
	function myPrompt(mens, value){
		return prompt(encodeText(mens), value);
	}
	
	function encodeText(x){
		// version 040623
		// Spanish - Español
		// Portuguese - Portugués - Português
		// Italian - Italiano
		// French - Francés - Français
		// Also accepts and converts single and double quotation marks, square and angle brackets
		// and miscelaneous symbols.
		// Also accepts and converts html entities for all the above.
	//	if (navigator.appVersion.toLowerCase().indexOf("windows") != -1) {return x}
		x = x.replace(/¡/g,"\xA1");	x = x.replace(/&iexcl;/g,"\xA1")
		x = x.replace(/¿/g,"\xBF");	x = x.replace(/&iquest;/g,"\xBF")
		x = x.replace(/À/g,"\xC0");	x = x.replace(/&Agrave;/g,"\xC0")
		x = x.replace(/à/g,"\xE0");	x = x.replace(/&agrave;/g,"\xE0")
		x = x.replace(/Á/g,"\xC1");	x = x.replace(/&Aacute;/g,"\xC1")
		x = x.replace(/á/g,"\xE1");	x = x.replace(/&aacute;/g,"\xE1")
		x = x.replace(/Â/g,"\xC2");	x = x.replace(/&Acirc;/g,"\xC2")
		x = x.replace(/â/g,"\xE2");	x = x.replace(/&acirc;/g,"\xE2")
		x = x.replace(/Ã/g,"\xC3");	x = x.replace(/&Atilde;/g,"\xC3")
		x = x.replace(/ã/g,"\xE3");	x = x.replace(/&atilde;/g,"\xE3")
		x = x.replace(/Ä/g,"\xC4");	x = x.replace(/&Auml;/g,"\xC4")
		x = x.replace(/ä/g,"\xE4");	x = x.replace(/&auml;/g,"\xE4")
		x = x.replace(/Å/g,"\xC5");	x = x.replace(/&Aring;/g,"\xC5")
		x = x.replace(/å/g,"\xE5");	x = x.replace(/&aring;/g,"\xE5")
		x = x.replace(/Æ/g,"\xC6");	x = x.replace(/&AElig;/g,"\xC6")
		x = x.replace(/æ/g,"\xE6");	x = x.replace(/&aelig;/g,"\xE6")
		x = x.replace(/Ç/g,"\xC7");	x = x.replace(/&Ccedil;/g,"\xC7")
		x = x.replace(/ç/g,"\xE7");	x = x.replace(/&ccedil;/g,"\xE7")
		x = x.replace(/È/g,"\xC8");	x = x.replace(/&Egrave;/g,"\xC8")
		x = x.replace(/è/g,"\xE8");	x = x.replace(/&egrave;/g,"\xE8")
		x = x.replace(/É/g,"\xC9");	x = x.replace(/&Eacute;/g,"\xC9")
		x = x.replace(/é/g,"\xE9");	x = x.replace(/&eacute;/g,"\xE9")
		x = x.replace(/Ê/g,"\xCA");	x = x.replace(/&Ecirc;/g,"\xCA")
		x = x.replace(/ê/g,"\xEA");	x = x.replace(/&ecirc;/g,"\xEA")
		x = x.replace(/Ë/g,"\xCB");	x = x.replace(/&Euml;/g,"\xCB")
		x = x.replace(/ë/g,"\xEB");	x = x.replace(/&euml;/g,"\xEB")
		x = x.replace(/Ì/g,"\xCC");	x = x.replace(/&Igrave;/g,"\xCC")
		x = x.replace(/ì/g,"\xEC");	x = x.replace(/&igrave;/g,"\xEC")
		x = x.replace(/Í/g,"\xCD");	x = x.replace(/&Iacute;/g,"\xCD")
		x = x.replace(/í/g,"\xED");	x = x.replace(/&iacute;/g,"\xED")
		x = x.replace(/Î/g,"\xCE");	x = x.replace(/&Icirc;/g,"\xCE")
		x = x.replace(/î/g,"\xEE");	x = x.replace(/&icirc;/g,"\xEE")
		x = x.replace(/Ï/g,"\xCF");	x = x.replace(/&Iuml;/g,"\xCF")
		x = x.replace(/ï/g,"\xEF");	x = x.replace(/&iuml;/g,"\xEF")
		x = x.replace(/Ñ/g,"\xD1");	x = x.replace(/&Ntilde;/g,"\xD1")
		x = x.replace(/ñ/g,"\xF1");	x = x.replace(/&ntilde;/g,"\xF1")
		x = x.replace(/Ò/g,"\xD2");	x = x.replace(/&Ograve;/g,"\xD2")
		x = x.replace(/ò/g,"\xF2");	x = x.replace(/&ograve;/g,"\xF2")
		x = x.replace(/Ó/g,"\xD3");	x = x.replace(/&Oacute;/g,"\xD3")
		x = x.replace(/ó/g,"\xF3");	x = x.replace(/&oacute;/g,"\xF3")
		x = x.replace(/Ô/g,"\xD4");	x = x.replace(/&Ocirc;/g,"\xD4")
		x = x.replace(/ô/g,"\xF4");	x = x.replace(/&ocirc;/g,"\xF4")
		x = x.replace(/Õ/g,"\xD5");	x = x.replace(/&Otilde;/g,"\xD5")
		x = x.replace(/õ/g,"\xF5");	x = x.replace(/&otilde;/g,"\xF5")
		x = x.replace(/Ö/g,"\xD6");	x = x.replace(/&Ouml;/g,"\xD6")
		x = x.replace(/ö/g,"\xF6");	x = x.replace(/&ouml;/g,"\xF6")
		x = x.replace(/Ø/g,"\xD8");	x = x.replace(/&Oslash;/g,"\xD8")
		x = x.replace(/ø/g,"\xF8");	x = x.replace(/&oslash;/g,"\xF8")
		x = x.replace(/Ù/g,"\xD9");	x = x.replace(/&Ugrave;/g,"\xD9")
		x = x.replace(/ù/g,"\xF9");	x = x.replace(/&ugrave;/g,"\xF9")
		x = x.replace(/Ú/g,"\xDA");	x = x.replace(/&Uacute;/g,"\xDA")
		x = x.replace(/ú/g,"\xFA");	x = x.replace(/&uacute;/g,"\xFA")
		x = x.replace(/Û/g,"\xDB");	x = x.replace(/&Ucirc;/g,"\xDB")
		x = x.replace(/û/g,"\xFB");	x = x.replace(/&ucirc;/g,"\xFB")
		x = x.replace(/Ü/g,"\xDC");	x = x.replace(/&Uuml;/g,"\xDC")
		x = x.replace(/ü/g,"\xFC");	x = x.replace(/&uuml;/g,"\xFC")
		
		x = x.replace(/\"/g,"\x22"); x = x.replace(/&quot;/g,"\x22")
		x = x.replace(/\'/g,"\x27")
		x = x.replace(/\</g,"\x3C")
		x = x.replace(/\>/g,"\x3E")
		x = x.replace(/\[/g,"\x5B")
		x = x.replace(/\]/g,"\x5D")
	
		x = x.replace(/¢/g,"\xA2");	x = x.replace(/&cent;/g,"\xA2") 
		x = x.replace(/£/g,"\xA3");	x = x.replace(/&pound;/g,"\xA3")
		x = x.replace(/€/g,"\u20AC");	x = x.replace(/&euro;/g,"\u20AC") 
		x = x.replace(/©/g,"\xA9");	x = x.replace(/&copy;/g,"\xA9") 
		x = x.replace(/®/g,"\xAE");	x = x.replace(/&reg;/g,"\xAE") 
		x = x.replace(/ª/g,"\xAA");	x = x.replace(/&ordf;/g,"\xAA") 
		x = x.replace(/º/g,"\xBA");	x = x.replace(/&ordm;/g,"\xBA") 
		x = x.replace(/°/g,"\xB0");	x = x.replace(/&deg;/g,"\xB0") 
		x = x.replace(/±/g,"\xB1");	x = x.replace(/&plusmn;/g,"\xB1")
		x = x.replace(/×/g,"\xD7");	x = x.replace(/&times;/g,"\xD7") 
		
		return x;
	}//
	
	
	//elimina una imagen dado un id de la misma y el id del campo donde se guarda su nombre de archivo
	function eliminarImagen(id_img, id_archivo){
		var archivo = document.getElementById(id_archivo);
		
		if (archivo.value!="" && !confirm("¿Eliminar la imagen?"))
			return false;
		
		document.getElementById(id_img).src="../imagenes/nofoto.jpg";
		archivo.value="";
	}//eliminarImagen
	/**************************************/
	//marca todos los checkbox que tengan el mismo nombre con el valor indicado (true o false)
	function marcarTodos(nombre, valor){
		var v = document.getElementsByName(nombre);
		for (var i=0; i<v.length; i++){
			v[i].checked = valor;
		}//for
	}//seleccionarTodos
	/**************************************/	
	function lanzarAccion(formu, accion, pregunta){
		if (pregunta!=undefined && pregunta!=null && !confirm(pregunta))
			return false;
		document.getElementById('accion').value=accion; 
		formu.submit();
	}//lanzarAccion
	/**************************************/	
	function lanzarAccionMarcados(formu, nombre, accion, pregunta_confirmacion){
		var v = document.getElementsByName(nombre);
		var cuantos = 0;
		for (var i=0; i<v.length; i++){
			if (v[i].checked)
				cuantos++;
		}//for i
		if (cuantos==0){
			alert("Debe seleccionar antes algunos elementos");
			return false;
		}
		
		if (pregunta_confirmacion!=undefined && pregunta_confirmacion!=null && !confirm(pregunta_confirmacion))
			return false;
		document.getElementById('accion').value=accion; 
		formu.submit();
	}//lanzarAccionMarcados
	/**************************************/		
	function printSelect(id, seleccionado, onchange, elementovacio /*, valor1, valor2, valor3*/){
		document.writeln('<select id="'+id+'" name="'+id+'" onchange="'+onchange+'">');
		if (elementovacio)
			document.writeln('<option value="">&lt; Elige &gt;</option>');
		for (var i=4; i<arguments.length; i++){
			document.write('<option value="'+arguments[i]+'" ');
			if (seleccionado==arguments[i])
				document.write(' selected="selected" ');
			document.writeln('>'+arguments[i]+'</option>');
		}//for
		document.writeln('</select>');
	}//printSelect
	/*************************************/
	function printSelectRango(id, seleccionado, onchange, desde, hasta){
		if (desde>hasta)
			hasta = desde;
		document.writeln('<select id="'+id+'" name="'+id+'" onchange="'+onchange+'">');
		for (var i=desde; i<=hasta; i++){
			document.write('<option value="'+i+'" ');
			if (seleccionado==i)
				document.write(' selected="selected" ');
			document.writeln('>'+i+'</option>');
		}//for
		document.writeln('</select>');
	}//printSelectRango
	/***********************************/
	//recoge el valor de un elemento
	function getValor(id){
		var elemento = document.getElementById(id);
		if (elemento==null || elemento==undefined)
			return false;
		if (elemento.type=="text" || elemento.type=="hidden" || elemento.type=="textarea"){
			return elemento.value;
		}else{
			if (elemento.firstChild==null){
				return "";
			}else{
				return elemento.firstChild.nodeValue;
			}
		}
	}//getValor
	/***********************************/
	//establece el valor de un documento
	function setValor(elemento, valor){
		if (elemento==null || elemento==undefined)
			return false;

		if (elemento.type=="text" || elemento.type=="hidden" || elemento.type=="textarea")
			elemento.value = valor;
		else{
			var t = document.createTextNode(valor);
			if (elemento.firstChild)
				elemento.removeChild(elemento.firstChild);
			elemento.appendChild(t);
		}
	}
	/****************************************/
	//copia el texto en los elementos con el nombre nombre_destino
	function copiarTexto(texto, nombre_destino, pregunta){
		var destinos = document.getElementsByName(nombre_destino);
		
		if (pregunta==undefined)
			var pregunta = "¿Copiar?";
			
		if (destinos.length==0 || !confirm(pregunta))
			return false;

		for (var i=0; i<destinos.length; i++){
			setValor(destinos[i], texto);
		}//for
		return true;
	}//copiarTexto
	/***********************************/
	//copia el texto del elemento con el id id_origen en los elementos con el nombre nombre_destino
	function copiarValor(id_origen, nombre_destino){
		var origen = document.getElementById(id_origen);
		
		var texto = getValor(id_origen);
	
		return copiarTexto(texto, nombre_destino);
	}//copiarValor
	/**********************************/
	/*//devuelve el valor de una cookie
	function getCookie(nombre) {
		var dc = document.cookie;
		var prefijo = nombre + "=";
		var inicio = dc.indexOf("; " + prefijo);
		if (inicio == -1) {
			inicio = dc.indexOf(prefijo);
			if (inicio != 0) 
				return null;
		} else
			inicio += 2;
		var fin = document.cookie.indexOf(";", inicio);
			if (fin == -1)
				fin = dc.length;
		return decodeURI(dc.substring(inicio + prefijo.length, fin));
	}//getCookie
	/************************************/
	function addSessionCookie(name, value) {
		var curCookie = name + "=" + encodeURI(value);
		document.cookie = curCookie;
	}	//setCookie
	/***********************************/
	//devuelve true si detecta algun cambio realizado por el usuario en el formulario o false en caso contrario
	function cambiosFormulario(formu){
		var i,j,e, cambios = false, haycambios = false;
		for(i = 0; i<formu.elements.length; i++){
			e = formu.elements[i];
			switch (e.type){
			case "radio":
			case "checkbox":
				if (e.checked != e.defaultChecked){
					//alert(e.name);
					cambios = true;
					break;
				}
				break;
			case "select-one":
			case "select-multiple":
				for (j = 0; j<e.options.length; j++){
					if (e.options[j].selected!=e.options[j].defaultSelected){
						//alert(e.name);					
						cambios = true;
						break;
					}
				}//for
				break;
			case "file":
			case "text":
			case "textarea":
			case "password":
				if (e.value!=e.defaultValue){
					//alert(e.name);
					cambios = true;
					break;
				}
				break;
			}//switch
			if (cambios){
				//break;
				e.style.backgroundColor = "red";
				cambios = false;
				haycambios = true;
			}
		}//for
		//if (cambios){ e.style.backgroundColor = "red";	}
		
		return haycambios; //no se han detectado cambios realizados por el usuario
	}//cambiosFormulario
	/**********************************/
	// devuelve un array asociatibo de la forma cookies['nombre'] = 'valor';
	function extractCookies(){
		var name, value;
		var beginning, middle, end;
		
		for (name in cookies){ // if there are any entries currently, get rid of them 
			cookies = new Object();
			break;
		}//for
		
		beginning = 0;  // start at beginning of cookie string
		while (beginning < document.cookie.length){
			middle = document.cookie.indexOf('=', beginning);  // find next =
			end = document.cookie.indexOf(';', beginning);  // find next ;

			if (end == -1)  // if no semicolon exists, it's the last cookie
				end = document.cookie.length;
			if ( (middle > end) || (middle == -1) ){ // if the cookie has no value... 
				name = document.cookie.substring(beginning, end);
				value = "";
			}else{ // extract its value
				name = document.cookie.substring(beginning, middle);
				value = document.cookie.substring(middle + 1, end);
			}//else
			cookies[name] = unescape(value);  // add it to the associative array
			beginning = end + 2;  // step over space to beginning of next cookie
		}//while
		return cookies;
	}//extractCookies
	/************************************/
	function setCookie(name, value){
		document.cookie = name+'='+value+';path=/';
		cookies[name] = value;
		//alert(name+"="+value);
	}//setCookie
	/************************************/
	function getCookie(name){
		return cookies[name];
	}//getCookie
	/************************************/
	//elimina la cookie de nombre name
	function delCookie(name){
		document.cookie = name + "=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT";
		document.cookie = name + "; expires=Thu, 01-Jan-1970 00:00:01 GMT";
	}//delCookie
	/************************************/
	function coordenadasMaximazada(){
		return "height="+screen.availHeight+",width="+screen.availWidth+",left=0,top=0";
	}//coordenadasMaximazada
	/***********************************/
	function coordenadasCentroPantalla(ancho,alto){
		var x = 0;
		var y = 0;
		//si el ancho no supera el ancho de la pantalla
		if (ancho < screen.availWidth)
			x = (screen.availWidth - ancho)/2;
		//si el alto no supera el alto de la pantalla
		if (alto < screen.availHeight)
			y = (screen.availHeight - alto)/2;
	
		return "height="+alto+",width="+ancho+",left="+x+",top="+y;
	}//coordenadasCentroPantalla	
	/************************************/
	var timerPrecarga = null;
	var timerPrecarga2 = null;
	/** esperarCargaPagina
		@param	string	idLoadingLayer: id de la capa que muestra un mensaje "cargando..." o similar
	*/
	function esperarCargaPagina(idLoadingLayer){
		if (new Image().complete==undefined) //si no exciste la propieda complete en las imagenes
			return false;
		timerPrecarga2 = setTimeout("if (timerPrecarga){ var e = document.getElementById('"+idLoadingLayer+"');"
			+"if (e) e.style.display='none'; clearInterval(timerPrecarga);} ", 10000);
		
		timerPrecarga = setInterval(
			"var todasCargadas = true;"
			+"for(var i=0; i<document.images; i++)"
			+"	if (!document.images[i].complete) {todasCargadas = false; break;}"
			+"if (todasCargadas) {var e = document.getElementById('"+idLoadingLayer+"');"
			+"if (e) e.style.display='none'; clearInterval(timerPrecarga);}", 500);
			
	}
	/************************************/
	function preloadImage(url){
		var i = new Image();
		i.src = url;
		return i;
	}//preloadImage
	/**************************************/
	/**
		Establece la pagina de inicio del navegador
	@param	string	url: url de la pagina que se va a establecer como pagina de inicio
	@param	HTMLAElement link: referencia del link desde donde se va a llamar a esta funcion (necesario para IExplorer)	*/
	function setHomePage(url, link){
		if ((window.netscape) && (window.netscape.security)){
			netscape.security.PrivilegeManager.enablePrivilege('UniversalPreferencesRead');
			var home = navigator.preference('browser.startup.homepage');
			if (home != url){
				netscape.security.PrivilegeManager.enablePrivilege('UniversalPreferencesWrite');
				navigator.preference('browser.startup.homepage',url);
			}
		}else
		if (link){
			link.style.behavior = 'url(#default#homepage)';
			link.setHomePage(url);
		}
	}	
	/************************************/
	/**
		Dado un nodo padre, busca un nodo hijo cuyo calor de su atributo "attribute" coincida con el especificado en "value"
	@param	node	parentNode: nodo padre
	@param	string	attribute: nombre del atributo
	@param	string	value: valor que debe tener el atributo del nodo hijo
	@param	bool	bStrict: indica si el valor del atributo debe coindicir estrictamente o no (sise indica FALSE, value se tomara como una expresion regular)
		(por defecto TRUE
	@return	nodeElement*/
	function buscarNodo(parentNode, attribute, value, bStrict){
		if (parentNode==null)
			return null;
		if (bStrict==undefined)
			bStrict = true;
		var e,v = parentNode.childNodes;
		for(var i = 0; i<v.length; i++){
			if ((bStrict && v[i][attribute]==value) ||
				(!bStrict && new RegExp(value).test(v[i][attribute]))){
				return v[i];
			}else
			if((e = buscarNodo(v[i], attribute, value, bStrict))!=null){
				return e;
			}
		}
		return null;
	}	
	
	
	function imgOver(img, imgName){ img.src = eval(imgName + "ON.src"); }
	function imgOut(img, imgName){ img.src = eval(imgName + "OFF.src"); }		

	function elemOver(elem, imgName){ elem.style.backgroundImage = "url('"+eval(imgName + "ON.src")+"')"; }
	function elemOut(elem, imgName){ elem.style.backgroundImage = "url('"+eval(imgName + "OFF.src")+"')"; }		
