	//Funciones standard

	//***************FUNCIONES AJAX*****************************	
	//Funcion AJAX carga contenidos
	function init_xmlhttp() {
		xmlhttp = false;
		try {
			//MSIE V<=6 si la versión Javascript es superior a 5.
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				//MSIE V<=6 si la versión Javascript es inferior a 5.
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (E) {
				xmlhttp = false;
			}
		}
		if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
			//MSIE V>=7 y resto navegadores
			xmlhttp = new XMLHttpRequest();
		}
		return xmlhttp;
	}
	function makerequest(serverPage, objID, GET_or_POST, str_send, ref_time, ref_func) {
		init_xmlhttp();
		if (objID=="contenido_gral") {
			page_name=serverPage;	
		}
		var obj_xmlhttp = document.getElementById(objID);
		if (GET_or_POST!="POST") {
			xmlhttp.onreadystatechange = function() {
				if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
					obj_xmlhttp.innerHTML=xmlhttp.responseText;
					if ((objID=="contenido_gral")&&(ref_func!="")&&(typeof ref_func!="undefined")) {
						Init_ref(ref_func, ref_time);
					}
				}
			}
			xmlhttp.open("GET",serverPage,false);
			str_send=null;
			xmlhttp.send(str_send);
		} else {
			xmlhttp.onreadystatechange = function() {
				if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
					obj_xmlhttp.value=xmlhttp.responseText;
					//obj_xmlhttp.innerHTML=xmlhttp.responseText;
				}
			}
			xmlhttp.open("POST",serverPage,false);
			xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			xmlhttp.send(str_send);
		}
		return obj_xmlhttp.value;
	}	
	//Funcion preparacion string comando xmlhttp
	function query_string_xmlhtttp(var1,var2,var3,var4,var5,var6) {
		var str_qs = "var1"+"="+escape(var1)+"&";
		str_qs+="var2"+"="+escape(var2)+"&";
		str_qs+="var3"+"="+escape(var3)+"&";
		str_qs+="var4"+"="+escape(var4)+"&";
		str_qs+="var5"+"="+escape(var5)+"&";
		str_qs+="var6"+"="+escape(var6)+"&";
		return str_qs;
	}	

	//***************EVENTOS GENERALES*****************************
	window.onbeforeunload = function (e) {
	//Confirmacion para cierre explorador
	//	var e = e || window.event;
	//	if (e) {
	//	e.returnValue = ''; //IE y Firefox
	//	}
	//	return ''; //Safari
	};
	window.onload= function(e) {
	}	
	
	//***************FUNCIONES GENERALES NAVEGADORES*****************************
	//Funcion deteccion navegador
	function detec_nav() {
		nameNav = navigator.appName;
		versionNav = parseInt(navigator.appVersion);
		return nameNav;
	}
	//Funcion deteccion Sistema Operativo
	function Detect_SO() {
		if (navigator.userAgent.indexOf('IRIX') != -1) {var SO = "Irix" } 
		else if ((navigator.userAgent.indexOf('Win') != -1) && (navigator.userAgent.indexOf('98') != -1)) {var SO= "Windows 98"} 
		else if ((navigator.userAgent.indexOf('Win') != -1) && (navigator.userAgent.indexOf('95') != -1)) {var SO= "Windows 95"} 
		else if (navigator.appVersion.indexOf("16") !=-1) {var SO= "Windows 3.1"} 
		else if (navigator.userAgent.indexOf("NT 5.1") !=-1) {var SO= "Windows XP"} 
		else if (navigator.userAgent.indexOf("NT 5.2") !=-1) {var SO= "Windows Server 2003"} 
		else if (navigator.userAgent.indexOf("NT 5") !=-1) {var SO= "Windows 2000"} 
		else if (navigator.userAgent.indexOf("NT 6") !=-1) {var SO= "Windows Vista"} 
		else if (navigator.appVersion.indexOf("NT") !=-1) {var SO= "Windows NT"} 
		else if (navigator.appVersion.indexOf("SunOS") !=-1) {var SO= "SunOS"} 
		else if (navigator.appVersion.indexOf("Linux") !=-1) {var SO= "Linux"} 
		else if (navigator.userAgent.indexOf('Mac') != -1) {var SO= "Macintosh"} 
		else if (navigator.appName=="WebTV Internet Terminal") {var SO="WebTV"} 
		else if (navigator.appVersion.indexOf("HP") !=-1) {var SO="HP-UX"} 
		else {var SO= "No identificado"} 
		//alert("Su Sistema Operativo es: " + SO +"");
		return SO;
	}
	//Funcion deteccion pagina procedencia
	function detec_page_or() {
		return document.referrer;
	}
	//Funcion deteccion pagina actual
	function detec_page_adr() {
		return document.location;
	}
	//Funcion deteccion pagina procedencia
	function check_page_or_OK(page_adr) {
		var str="";//query_string_xmlhtttp("$_SESSION['page_or']",'','','','');
		var page_or=makerequest('PHP/get_var.php','result_data','POST',str,false,'');
		if ((page_or=="")||(typeof page_or=="undefined")) {
			document.location = page_adr;
		}
		//alert(page_or+" -->\n"+page_adr);
	}
	
	//
	//Funciones Compatibilidad Navegadores
	function redirect(url) {
        if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){
			var referLink = document.createElement('a');
			referLink.href = url;
			document.body.appendChild(referLink);
			referLink.click();
        } else {
			location.href = url;
        }
	}	
	//Funciones cambio atributos compatibilidad Internet Explorer
	function attr_change(elementID,attrib,valor) {	
		var navigator=detec_nav();
		var obj = elementID;
		switch (attrib) {
			case "bgcolor":
				obj.style.background=valor;
				break;
			case "fontcolor":	
				obj.style.color=valor;
				break;
			case "display":	
				obj.style.display=valor;
				break;
			default:
				break;	
		}
	}
	//Funcion creacion submenus en barra de menus para IE
	function startList() {
		if (document.all&&document.getElementById) {
			navRoot = document.getElementById("nav");
			for (i=0; i<navRoot.childNodes.length; i++) {
				node = navRoot.childNodes[i];
				if (node.nodeName=="LI") {
					node.onmouseover=function() {this.className+=" over";}
					node.onmouseout=function() {this.className=this.className.replace(" over", "");}
				}
			}
		}
		return false;
	}
	
	//***************FUNCIONES FECHA/HORA*****************************
	//Funcion formato fecha en string
	function fecha_hora_init() {
		fecha=new Date();
		dia=fecha.getDate();
		mes=fecha.getMonth()+1;
		anio=fecha.getFullYear();
		f=anio+"-"+mes+"-"+dia;
		hora=fecha.getHours();
		minuto=fecha.getMinutes();
		segundo=fecha.getSeconds();
		h=hora+":"+minuto+":"+segundo;
		return f+" "+h;
	}
	function fecha_hora() {
		fecha=new Date();
		anio=fecha.getFullYear();
		mes="0"+fecha.getMonth()+1;
		mes=mes.substr(mes.length-2,2);
		dia="0"+fecha.getDate();
		dia=dia.substr(dia.length-2,2);
		f=anio+"-"+mes+"-"+dia;
		hora="0"+fecha.getHours();
		hora=hora.substr(hora.length-2,2);
		minuto="0"+fecha.getMinutes();
		minuto=minuto.substr(minuto.length-2,2);
		segundo="0"+fecha.getSeconds();
		segundo=segundo.substr(segundo.length-2,2);
		h=hora+":"+minuto+":"+segundo;
		return f+" "+h;
	}
	
	//***************FUNCIONES STRING*****************************
	//Funciones modificacion string
	String.prototype.trim = function() {return this.replace(/^s+|s+$/g,"");};
	function ltrim(s) {return s.replace(/^\s+/,"");}
	function rtrim(s) {return s.replace(/\s+$/,"");}
	function trim(s) {return rtrim(ltrim(s));}	

	function replace_str(text, str1, str2) {
		var command = "text.replace(/"+str1+"/g,\""+str2+"\")";
		return eval(command);
	}	
	function replace_str_caseinsens(text, str1, str2) {
		var command = "text.replace(/"+str1+"/gi,\""+str2+"\")";
		return eval(command);
	}
	function search_string(str,text){
		result=str.indexOf(text);
		//if (result==-1) {result=false;}
		return result;
	}
	function repl_punto_x_coma(str) {var res=str.replace(/[.]/gi,",");return res;}
	function repl_coma_x_punto(str) {var res=str.replace(/[,]/gi,".");return res;}
	
	//***************FUNCIONES NUMERICAS*****************************
	//Funcion verificacion si campo introducido es numerico	
	function check_num(val,lim_max,lim_min) {
		var val_array=val.split("");
		for(var i=0; i<val_array.length; i++) {
			var val_aux=val_array[i];
			if ((val_aux!="")&&(typeof val_aux!="undefined")) {
				if((val_aux!=",")&&(val_aux!=".")) {
					if((i!=0)&&(val_aux=="-")) {
						valor="error";break;
					} else {
						if(val_aux!="-") {
							val_aux=parseFloat(val_array[i]);
							if(isNaN(val_aux)) {valor="error";break;} 
						}
					}
				}
				valor=val_array.join("");
				valor=valor.replace(",",".");
				valor=parseFloat(valor);
				if(isNaN(val_aux)) {valor="error";}
				if (!check_limit(valor,lim_max,lim_min)) {
					valor="error_limite";
				}
			}
		}
		return valor;
	}
	//Funcion verificacion limites en campos numericos	
	function check_limit(valor,lim_max,lim_min) {
		var result;
		if(lim_max!=lim_min) {
			if((valor<=lim_max)&&(valor>=lim_min)) {result=true;}
			else {result=false;}	
		} else {
			result=true;
		}
		return result;
	}
	//Funcion limitar numero decimales
	function limit_dec(value,numdec) {
		if ((value!="")&&(value!="undefined")) {
			if ((numdec<0)||(numdec=="")||(typeof numdec=="undefined")) {
				var dec_10=1;
			} else {
				var dec_10=Math.pow(10,numdec);
			}
			var val_out=Math.round(parseFloat(value)*dec_10)/dec_10;
		} else {
			var val_out=value;
		}
		return val_out;
	}
	//Funciones conversion entero a hex
	function integerToHex(number) {
		var result;
		var hex_chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'];
		// the output, supports only 32-bit integers
		var out = ['0', '0', '0', '0', '0', '0', '0', '0'];
		var len = out.length;
		for (var i = 0; i < len; i++) {
			var n = parseInt(number/16);
			out[len - i - 1] = hex_chars[number - (n*16)];
			number = n;
		}
		result="0X" + out.join("");
		return result;
	}
	function HexTointeger(number) {
		var result;
		result=parseInt(number);
		return result;
	}
	
	//***************CONTROL ACCESO USUARIOS*****************************
	function user_access_ctrl(access_level) {
		document.getElementById("user").value="";
		document.getElementById("password").value="";		
		document.getElementById("level").value="";	
		if (typeof access_level!="undefined") {	//Peticion usuario
			if ((user_level=="")||(typeof user_level=="undefined")) {user_level=0;}
			if (user_level<access_level) {
				document.getElementById("user_ctrl").style.display="block";
				document.getElementById("contenido_gral").style.display="none";
				document.getElementById("level_block").style.display="none";
				document.getElementById("validar").style.display="inline";
				document.getElementById("save").style.display="none";
				document.getElementById("delete").style.display="none";
			} 
			//timeout para reset usuario
			clearTimeout(time_evt_deluser);
			time_evt_deluser=setTimeout('user_level=0;',200000);
			if (user_level>=access_level) {
				return true;
			} else {
				return false;
			}
		} else {	//Modificacion usuario
			document.getElementById("user_ctrl").style.display="block";
			//document.getElementById("contenido_gral").style.display="none";
			document.getElementById("level_block").style.display="inline";
			document.getElementById("validar").style.display="none";
			document.getElementById("save").style.display="inline";
			document.getElementById("delete").style.display="inline";
		}
	}
	
	//***************BORRADO CACHE EXPLORADOR*****************************
	function cache_delete_daemon() {
		cache_delete();
		clearInterval(time_evt_delcache);
		cant_min_rep=5;
		var time_rep=cant_min_rep*60*1000; //time_rep en minutos lo pasamos a ms
		time_evt_delcache=setInterval('cache_delete();',time_rep);
	}
	function cache_delete() {
		del_cache(ruta_cache,hora_ini,1,300); //borramos cache almacenado 300 segundos posteriores al inicio de la aplicación
	}
	
	//***************FUNCIONES MENSAJES DE USUARIO******************************
	//Funcion escritura mensajes usuario en campo mens_txt
	function msgtxt(texto,color,popup) {
		if (popup) {alert(texto);}
		var msg_obj=document.getElementById("mens_txt");		
		var fh=fecha_hora();
		msg_obj.value=fh+"-->  "+texto;
		if ((typeof(color)!="undefined")&&(color!="")) {
			attr_change(msg_obj,"bgcolor",color);
			if ((color=="#000000")) {
				attr_change(msg_obj,"fontcolor","#FFFFFF"); //blanco
			} else {
				attr_change(msg_obj,"fontcolor","#000000"); //negro
			}
		} else {
			attr_change(msg_obj,"bgcolor","transparent");
			attr_change(msg_obj,"fontcolor","#000000"); //negro
		}	
	}
	//Funcion borrado mensaje usuario en campo mens_txt	
	function msgtxt_delete() {
		var msg_obj=document.getElementById("mens_txt");	
		attr_change(msg_obj,"bgcolor","transparent");	
		msg_obj.value="";
	}
	//Funcion mensajes/alarmas/avisos
	function mens_alarm_avis(numtxt_alav, type_mens0_al1_av2, mens_color, time_off, popup) {
		if ((type_mens0_al1_av2>0)&&(type_mens0_al1_av2!="")&&(typeof type_mens0_al1_av2!="undefined")) {
			var cod_alav="0000"+numtxt_alav;
			cod_alav=cod_alav.substr(cod_alav.length-4,4);
			if (type_mens0_al1_av2==1) {
				var color="#FF0000"; //rojo
				cod_alav="AL"+cod_alav;
			} else {
				var color="transparent";
				cod_alav="AV"+cod_alav;
			}
		} else {
			cod_alav=numtxt_alav;
			if ((mens_color!="")&&(typeof mens_color!="undefined")) {
				var color=mens_color;
			} else {
				var color="transparent";
			}
		}
		var str=query_string_xmlhtttp(cod_alav,'','','','');
		var texto=makerequest('PHP/Mensajes.php','rcv_vals','POST',str,false,'');
		//Solo refrescamos el texto si es diferente del anterior
		var msg=document.getElementById("mens_txt").value;
		if (msg.search(cod_alav)==-1) {msgtxt(texto,color,popup);}
		if ((time_off>0)&&(time_off!="")&&(typeof time_off!="undefined")) {
			time_off=time_off*gral_ref_time/1000;
			setTimeout(eval(msgtxt_delete), time_off);
		}
		return texto;
	}
	function mens_conf_prompt(numtxt_alav, type_conf0_prompt1) {
		var str=query_string_xmlhtttp(numtxt_alav,'','','','');
		var texto=makerequest('PHP/Mensajes.php','rcv_vals','POST',str,false,'');
		if (type_conf0_prompt1) {
			var result=prompt(texto);
		} else {
			var result=confirm(texto);
		}
		return result; 
	}
	
	//***************FUNCIONES CREACION TABLAS*****************************	
	function table_gen(num_table,data_vals,ancho_col,passw_col) {
		table_cont_del(num_table);	//Borramos el contenido de la tabla si ya esta creada
		//Crear <table> y sus atributos
		var tabla = document.createElement('table');
		//Crear <caption> y Anyadirlo a la <table>
		tabla.setAttribute('id', 'tabla_data'+num_table);
		tabla.setAttribute('align', 'center');
		//Crear seccion <tbody>
		table_get_data(num_table,data_vals,ancho_col,passw_col);
		//Anyadir la tabla creada al final de la pagina
		document.body.appendChild(tabla);
		return false;
	}
	function table_get_data(num_table,data_vals,ancho_col,passw_col){
		var vals_row=data_vals.split(chr_sep_var);
		for (var cont_row=1;cont_row<vals_row.length;cont_row++) {
			if (cont_row==1) {
				var tbody = document.createElement('tbody');
				tbody.setAttribute('id', 'tab_cont'+num_table);			
				tabla.appendChild(tbody);	
				tbody.insertRow(cont_row-1);
			}
			//Insertar la fila
			table_ins_row(vals_row[cont_row],cont_row,num_table,ancho_col,passw_col);
		} 
		return false;
	}
	function table_ins_row(vals_row,numrow,num_table,ancho_col,passw_col) {
		var tbody = document.getElementById('tab_cont'+num_table);
		tbody.setAttribute('align', 'center');
		//Anyadir una fila a la seccion <tbody>
		tbody.insertRow(numrow);
		var vals=vals_row.split(chr_sep_field);
		var ancho=ancho_col.split(chr_sep_field);
		var passw=passw_col.split(chr_sep_field);
		for (var i=0;i<vals.length;i++) {
			if (numrow==1) {var tipo_fila="th";}
			else {var tipo_fila="td";}
			var contenido = document.createElement(tipo_fila);
			if (numrow==1) {
				contenido.innerHTML = vals[i]; 
				contenido.setAttribute('width',ancho[i]);
			}
			else {
				if (passw[i]!="1") {
					// field_id="";
					// var content="<input type='text' id='"+ field_id +"' name='inputtab1' value="+ vals[i];
					// ancho[i]=vals[i].length;
					// if (ancho[i]>0) {
						// var maxl=ancho[i];
						// var siz=ancho[i]+10;
						// content+=" maxlength="+maxl+" size="+siz+" />";
					// } else {
						// content+=" >";
					// }
					contenido.innerHTML = vals[i];
				} else {contenido.innerHTML = "######";}	
			}
			tbody.rows[numrow].appendChild(contenido);
		}
		return false;
	}		
	function table_cont_del(num_table) {
		try {
			var tbody = document.getElementById('tab_cont'+num_table);	
			tabla.removeChild(tbody);	
		} catch (e) {
		}
		return false;
	}
				
	//***************OTROS*****************************
	//Funcion validacion nombre de fichero
	function check_filename(filename,allow_num_1chr) {
		if ((filename=="null")||(filename=="")||(typeof filename=="undefined")) {
			var name_ok=false;
			var val_char=filename[0];
		} else {
			if (!isNaN(filename.substr(0,1))&&(!allow_num_1chr)) {
				var name_ok=false;
				var val_char=filename[0];
			} else {
				var name_ok=true;
				for (var i=0;i<filename.length;i++) {
					var val_char=filename[i];
					if ((val_char>="A")&&(val_char<="Z")||(val_char>="a")&&(val_char<="z")||(val_char>="0")&&(val_char<="9")) {	
						name_ok=true;
					} else if (((val_char==" ")||(val_char==".")||(val_char=="-")||(val_char=="_"))&&(i>0)) {
						name_ok=true;					
					} else {
						name_ok=false;
						break;
					}
				}	
			}	
		}	
		//if (!name_ok) {msgtxt(val_char,"#FF0000",true);}
		var result=name_ok;
		return result;
	}
	//Funcion captura valor seleccionado en combo
	function val_sel_combo(combo) {
		var elem_val=combo.options[combo.selectedIndex].text; 
		return elem_val;
	}
	//Funcion comprobacion resultado para cambio color fondo	
	function check_res(tag1,elementID,values) {
		var res;
		var color;
		var str_array = new Array();
		str_array=values.split(tag1+chr_sep_field);
		str_array=str_array[1].split(chr_sep_var);
		res=str_array[0];
		if (res!=1) {color="#FF0000"} else {color="#C0C0C0"} //rojo, gris claro
		var obj = document.getElementById(elementID);
		attr_change(obj,"bgcolor",color);
		return res;	
	}
	
	//***************FUNCIONES DESPLAZAMIENTO ENTRE REGISTROS*****************************
	function reg_first(funct)	{
		num_reg=1;
		eval(funct+"(num_reg,filtro);");
	}
	function reg_prev(funct)	{
		if (num_reg>1) {
			num_reg=num_reg*1-1;
		}
		eval(funct+"(num_reg,filtro);");
	}
	function reg_next(funct)	{
		if (num_reg<total_reg) {
			num_reg=num_reg*1+1;
		}
		eval(funct+"(num_reg,filtro);");
	}
	function reg_last(funct)	{
		num_reg=total_reg;
		eval(funct+"(num_reg,filtro);");
	}
	function reg_search(filt_field,funct) {
		var filt_val=mens_conf_prompt('mens_reg_find_conf', 1);
		if ((filt_val=="")||(filt_val==null)||(typeof filt_val=="undefined")) {
			num_reg=1;
			filtro="";
		} else {
			num_reg="";
			filtro=" WHERE "+filt_field+" LIKE '%"+filt_val+"%'";
		}	
		eval(funct+"(num_reg,filtro);");
	}
	
