	//=======================================================================
	//Función para formatear los números en javascript
	//=======================================================================
	//Objeto oNumero
	function oNumero(numero){
		//Propiedades 
		this.valor = numero || 0
		this.dec = -1;
		this.separadorMiles='.';
		this.separadorDecimales=',';
		//Métodos 
		this.formato = numFormat;
		this.ponValor = ponValor;
		//Definición de los métodos 

		function ponValor(cad){
			if (cad =='-' || cad=='+') return
			if (cad.length ==0) return
			if (cad.indexOf('.') >=0)
				this.valor = parseFloat(cad);
			else 
				this.valor = parseInt(cad);
		} 

		function numFormat(dec, miles){
			var num = this.valor, signo=3, expr;
			var cad = ""+this.valor;
			var ceros = "", pos, pdec, i;
			for (i=0; i < dec; i++)
			ceros += '0';
			pos = cad.indexOf('.')
			if (pos < 0)
			cad = cad+"."+ceros;
			else{
			pdec = cad.length - pos -1;
			if (pdec <= dec){
				for (i=0; i< (dec-pdec); i++)
				cad += '0';
			}else{
				num = num*Math.pow(10, dec);
				num = Math.round(num);
				num = num/Math.pow(10, dec);
				cad = new String(num);
			}
			}
			pos = cad.indexOf('.')
			if (pos < 0) pos = cad.lentgh
			if (cad.substr(0,1)=='-' || cad.substr(0,1) == '+') 
				signo = 4;
			if (miles && (pos > signo))
				do{
				expr = /([+-]?\d)(\d{3}[\.\,]\d*)/
				cad.match(expr)
				cad=cad.replace(expr, RegExp.$1+','+RegExp.$2)
				}while (cad.indexOf(',') > signo)
		    
			if (dec<0) cad = cad.replace(/\./,'')	
			cad=reemplazaTodo(cad,",","m");
			cad=reemplazaTodo(cad,".",",");
			cad=reemplazaTodo(cad,"m",".");
			return cad;
		}
	}//Fin del objeto oNumero:
	//=======================================================================

	//==========================================================================================
	// Reemplaza un texto dentro de otra cadena. Mejora le funcion replace de JavaScript
	//==========================================================================================
	function reemplazaTodo(cadena,original,cambio){
		var strFinal,i,caracter;
		strFinal=cadena;
	while(strFinal.indexOf(original)>-1){
		strFinal=strFinal.replace(original,cambio); 
	}
		return strFinal;
	}

	// """"""""""""""""""""""""""""""""""""""""""""""""""""""
	// "	Funciones Comunes para el Filtrado de campos	" 
	// """"""""""""""""""""""""""""""""""""""""""""""""""""""

	// Variable Comunes/Públicas...
	var Merr='';	// Para componer los mensajes resultantes de los errores detectados.	 
		
	// """"""""""""""""""""""""""""""""""""""""""""""""""
	// "	Funciones para el Tratamiento de Fechas...	" 
	// """"""""""""""""""""""""""""""""""""""""""""""""""
	var Df='';	
	var Hf='';
	var wDF=''; 
	var wHF='';

	function DiasEnElMes(mes, anio){
		var DiasMes = CrearTablaVacia(12);
		DiasMes[1] = 31;	
		DiasMes[2] = DiasEnFebrero(anio); //(anno  % 4==0 && (!(anno  % 100==0) || (anno  % 400==0)) ? 29 : 28);
		DiasMes[3] = 31;	DiasMes[4] = 30;
		DiasMes[5] = 31;	DiasMes[6] = 30;	DiasMes[7] = 31;	DiasMes[8] = 31;
		DiasMes[9] = 30;	DiasMes[10] = 31;	DiasMes[11] = 30;	DiasMes[12] = 31;
		
		return DiasMes[mes];
	}

	function CrearTablaVacia(n) {	 
		for(var i=1; i<=n; i++) { 
			this[i]=0;
		}
		return this;
	}

	function DiasEnFebrero(ElAno) {	 
		return (ElAno % 4==0 && (!(ElAno % 100==0) || (ElAno % 400==0)) ? 29 : 28);	
	}

	function ComprobarFecha(laFecha, obligatoria) {
		Merr='';
		if (laFecha=='' && obligatoria==false)	{ return true; }
		if (laFecha=='' && obligatoria==true)	{ Merr='es obligatioria.'; return false; }
		
		t=laFecha.split('/');
			
		if (t.length!=3)								{ Merr='no tiene el formato adecuado.';	return false; }
		if (t[0]=='' || t[1]=='' || t[2]=='')			{ Merr='no tiene valores adecuados.';	return false; }
		if (isNaN(t[0]) || isNaN(t[1]) || isNaN(t[2]))	{ Merr='no posee valores numericos.';	return false; }

		if (t[0].length==1)	{	t[0]='0'+t[0];		}
		if (t[1].length==1)	{	t[1]='0'+t[1];		}
		if (t[2].length==1)	{	t[2]='200'+t[2];	}
		if (t[2].length==2)	{	t[2]='20'+t[2];		}
		wDF=t[0]+'/'+t[1]+'/'+t[2];

		var xd=parseVal(t[0],10);
		var xm=parseVal(t[1],10);
		var xa=parseVal(t[2],10);

		if (xm<01 || xm>12)					{ Merr='el dia es erroneo.';				return false; }
		if (xd>DiasEnElMes(xm,xa))				{ Merr='el dia/mes es erroneo.';			return false; }
		//if (xm==2 && xd>DiasEnFebrero(xa))	{ Merr='el dia de Febrero es erroneo.';		return false; }
			
		return true;
	}

	function ComprobarRangoFecha(laFechaIni, laFechaFin){
		if (laFechaIni=='' && laFechaFin=='') return true;	
		if (laFechaIni=='' && laFechaFin!='') return false; 
		if (laFechaIni!='' && laFechaFin=='') return false;
		if (ComprobarFecha(laFechaIni, true)==true && ComprobarFecha(laFechaFin, true)==true) {
			t1=laFechaIni.split('/');
			t2=laFechaFin.split('/');
			var zD=t1[2]+'/'+t1[1]+'/'+t1[0];
			var zH=t2[2]+'/'+t2[1]+'/'+t2[0];
			if (zD>zH)	 return false;	
			else return true;
		} else return false; 
	}

	function FechaMenorQueHoy(laFecha){	
		var Hoy=new Date();
		var zHoy=Hoy.getDate()+'/'+(Hoy.getMonth()+1)+'/'+Hoy.getFullYear();

		t1=laFecha.split('/');
		t2=zHoy.split('/');

		if (t1[0].length==1) { t1[0]='0'+t1[0]; }
		if (t1[1].length==1) { t1[1]='0'+t1[1]; }
		
		if (t2[0].length==1) { t2[0]='0'+t2[0]; }
		if (t2[1].length==1) { t2[1]='0'+t2[1]; }

		var zF=t1[2]+'/'+t1[1]+'/'+t1[0];
		var zH=t2[2]+'/'+t2[1]+'/'+t2[0];
		if (zF<zH)	{ return true;	}
			else	{ return false;	}
	}
	// """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

	function es_mail(mail){
		if (mail.indexOf('@')==-1) return false;
		else{
			mail_tmp=mail.substring(mail.indexOf('@'),mail.length);
			if (mail_tmp.indexOf('.')==-1) return false;
			else return true;
		}
	}
	
	function es_numerico(texto){
		caracteres_validos="1234567890";
		for (k=0;k<texto.length;k++){
			tmp=texto.substr(k,1);
			if (caracteres_validos.search(tmp)=="-1"){
				return false;
			}
		}
		return true;
	}
		
	function isInteger(s){
		var i;
		for (i = 0; i < s.length; i++){   
			var c = s.charAt(i);
			if (((c < "0") || (c > "9"))) return false;
		}
		return true;
	}

	function stripCharsInBag(s, bag){
		var i;
		var returnString = "";
		for (i = 0; i < s.length; i++){   
			var c = s.charAt(i);
			if (bag.indexOf(c) == -1) returnString += c;
		}
		return returnString;
	}

	var dtCh= "/";
	var minYear=1900;
	var maxYear=2100;

	function isDate(dtStr){
		var pos1=dtStr.indexOf(dtCh)
		var pos2=dtStr.indexOf(dtCh,pos1+1)
		var strDay=dtStr.substring(0,pos1)
		var strMonth=dtStr.substring(pos1+1,pos2)
		var strYear=dtStr.substring(pos2+1)
		strYr=strYear
		if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
		if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
		for (var i = 1; i <= 3; i++) {
			if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
		}
		month=parseVal(strMonth)
		day=parseVal(strDay)
		year=parseVal(strYr)
		if (pos1==-1 || pos2==-1){
			alert("El formato de fecha debe de ser: dd/mm/aaaa")
			return false
		}
		if (strMonth.length<1 || month<1 || month>12){
			alert("Please enter a valid month")
			return false
		}
		if (strDay.length<1 || day<1 || day>31 || (month==2 && day>DiasEnFebrero(year)) || day > DiasEnElMes(month,year)){
			alert("Por favor, introduce un día válido")
			return false
		}
		if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
			alert("Por favor introduce un año válido de cuatro cifras")
			return false
		}
		if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
			alert("Por favor, introduce una fecha válida")
			return false
		}
		return true
	}

	function ultimoDiaMes(fecha){
		var datos=fecha.split("/"); 
		var dia=parseVal(datos[0]);
		var mes=parseVal(datos[1]);
		var ano=parseVal(datos[2]);
		dias=DiasEnElMes(mes,ano);
		return formatearFecha(dia + "/" + mes + "/" + ano);
	}

	function parseVal(val){
		if (val==null) return "0";
		while (val.charAt(0) == '0')
			val = val.substring(1, val.length);
		return parseInt(val);
	}

	function addDiasAFecha(fecha, dias){
		var nDias = parseVal(dias);
		var datos=fecha.split("/"); 
	    
		var dia=parseVal(datos[0]);
		var mes=parseVal(datos[1]);
		var ano=parseVal(datos[2]);
		nDias+=dia;


		while(nDias<1 || nDias>DiasEnElMes(mes,ano)){
			if (nDias<1){
					mes--;
					if (mes<1){ mes=12;ano--; }
					nDias+=DiasEnElMes(mes,ano);
			}
			if (nDias>DiasEnElMes(mes,ano)){
					nDias-=DiasEnElMes(mes,ano);
					mes++;
					if (mes>12){ mes=1;ano++; }
			}
		}
		return formatearFecha(cerosIzquierda(nDias,2) + "/" + 
						cerosIzquierda(mes,2) + "/" + 
						cerosIzquierda(ano,4));
	}

	function addMesAFecha(fecha, meses){
		var datos=fecha.split("/"); 
		var dia=parseVal(datos[0]);
		var mes=parseVal(datos[1]);
		var ano=parseVal(datos[2]);
		mes+=meses;
		while (mes<1) { mes+=12;ano--; }
		while (mes>12) { mes-=12;ano++; }
		if (dia>DiasEnElMes(mes,ano)) dia=DiasEnElMes(mes,ano);
		return formatearFecha(dia + "/" + mes + "/" + ano);
	}

	function ValidateForm(){
		var dt=document.frmSample.txtDate;
		if (isDate(dt.value)==false){
			dt.focus()
			return false;
		}
		return true;
    }

	function lanzarURL(id, url){ 
		lanzarURLConPregunta(id,url,"");
	}

	function lanzarURLConPregunta(id, url, pregunta){ 
		var bIr=true;
		if (pregunta!=""){
			bIr=confirm(pregunta);
		}
		if (bIr){
			var obj = document.getElementById(id);
			obj.action=url;
			obj.submit();
		}
	}

	function controlarTamano(id, maximo){
		var obj=document.getElementById(id);
		if (obj!=null){
			if (obj.value.length>maximo){
				alert("La longitud maxima de este campo es " + maximo);
				obj.value=obj.value.substring(0,maximo);
			}
		}else{
			alert("El id " + id + " no ha sido encontrado");
		}
	}
 
	function formatearFecha(fecha){
		aFecha = fecha.split("/");
		if(aFecha[0].length==1){aFecha[0]="0"+aFecha[0];}
		if(aFecha[1].length==1){aFecha[1]="0"+aFecha[1];}
		fecha=aFecha[0]+"/"+aFecha[1]+"/"+aFecha[2];
		return fecha;
	}

	function test(){
		alert("Funciones.js se ha incluido correctamente");
	}
	
	function cerosIzquierda(sTexto, tamTotal){
		while (sTexto.length<tamTotal){
			sTexto = "0" + sTexto;
		}
		return sTexto;
	}
	
	function formatearFechaDMA(dia, mes, ano){
		while (dia<1) dia++;
		while (mes<1) { mes+=12;ano--; }
		while (mes>12) { mes-=12;ano++; }
		if (dia>DiasEnElMes(mes,ano)) dia=DiasEnElMes(mes,ano);
		return formatearFecha(cerosIzquierda(dia,2) + "/" + 
							cerosIzquierda(mes,2) + "/" + 
							cerosIzquierda(ano,4));
	}

	function setVisible(id, visible){
		var obj=document.getElementById(id);
		if (visible)
			obj.style.display="";
		else
			obj.style.display="none";
	}

	function CopiarAlPortapapeles(texto){
		window.clipboardData.setData('Text',texto);
	}
	
	function PegarDelPortapapeles(obj){
		obj.value=window.clipboardData.getData('Text');
		window.clipboardData.clearData();
	}
	
	//===============================================================================================
	// Controla los caracteres introducidos en una caja de texto
	//===============================================================================================

	function tipoDatos(tipo, control){
		if(tipo=="numero"){ //SOLO NÚMEROS. SUSTITUYE LA COMA POR UN PUNTO
			//Punto por coma
			if(event.keyCode==46){
				event.keyCode=44;
			}
			if((event.keyCode<48 || event.keyCode>57) && (event.keyCode!=44) && (event.keyCode!=45)){
				event.keyCode=0;
			}
			//sólo permitimos una coma en todo el número
			if(event.keyCode==44 && control.value.indexOf(",")>=0){
				event.keyCode=0;
			}
			//sólo permitimos signo - en todo el número
			if(event.keyCode==45 && control.value.indexOf("-")>=0){
				event.keyCode=0;
			}
		}else if(tipo=="numeroE"){ //SOLO NÚMEROS ENTEROS.
			if((event.keyCode<48 || event.keyCode>57)){
				event.keyCode=0;
			}
		}else if(tipo=="lower"){ //SOLO LETRAS MINÚSCULAS
			if(event.keyCode<97 || event.keyCode>122){
				event.keyCode=0;
			}
		}else if(tipo=="upper"){ //SOLO LETRAS MINÚSCULAS
			if(event.keyCode<65 || event.keyCode>90){
				event.keyCode=0;
			}
		}
		else if(tipo=="letra"){ //SOLO LETRAS
			if(!((event.keyCode>=65 && event.keyCode<=90) || (event.keyCode>=97 && event.keyCode<=122))){
				event.keyCode=0;
			}
		}
	}	

	//===============================================================================================
	// Fuerza en envío de un CheckBox para el formulario
	//		obj - control CheckBox
	//		valorTrue - Valor que se asignará cuando el CheckBox esté seleccionado
	//		valorTrue - Valor que se asignará cuando el CheckBox no esté seleccionado
	//		cadenaControles - cadena donde se encuentran los id de los CheckBox a forzar
	//===============================================================================================
	function forzarEnvioCheckBox(obj,valorTrue,valorFalse){	
		if(obj.checked){
			obj.value=valorTrue;
		}else{
			obj.value=valorFalse;
		}
		if(controlesCB.indexOf("," + obj.id + ",")<0){
			controlesCB += obj.id + ",";
		}
	}