//=======================================================================
//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 DiasEnElMes = CrearTablaVacia(12);
	var fechaActual = new Date();
	
	DiasEnElMes[1] = 31;	
	DiasEnElMes[2] =(fechaActual.getYear()  % 4==0 && (!(fechaActual.getYear()  % 100==0) || (fechaActual.getYear()  % 400==0)) ? 29 : 28);
	DiasEnElMes[3] = 31;	DiasEnElMes[4] = 30;
	DiasEnElMes[5] = 31;	DiasEnElMes[6] = 30;	DiasEnElMes[7] = 31;	DiasEnElMes[8] = 31;
	DiasEnElMes[9] = 30;	DiasEnElMes[10] = 31;	DiasEnElMes[11] = 30;	DiasEnElMes[12] = 31;

	var Df='';	
	var Hf='';
	var wDF=''; 
	var wHF='';

	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])				{ 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.getYear();

		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;
	}

	function daysInFebruary (year){
		// February has 29 days in any year evenly divisible by four,
		// EXCEPT for centurial years which are not also divisible by 400.
		return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
	}

	function DaysArray(n) {
		for (var i = 1; i <= n; i++) {
			this[i] = 31
			if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
			if (i==2) {this[i] = 29}
		} 
		return this;
	}

	var dtCh= "/";
	var minYear=1900;
	var maxYear=2100;

	function isDate(dtStr){
		var daysInMonth = DaysArray(12)
		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>daysInFebruary(year)) || day > daysInMonth[month]){
			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]);
		dia=DiasEnElMes[mes];
		if (mes==2 && ano%4!=0){
			dia=28;
		}
		return formatearFecha(dia + "/" + mes + "/" + ano);
	}

	function parseVal(val){
		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]){
			if (nDias<1){
				mes--;
				if (mes<1){ mes=12;ano--; }
				nDias+=DiasEnElMes[mes];
			}
			if (nDias>DiasEnElMes[mes]){
				nDias-=DiasEnElMes[mes];
				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]) dia=DiasEnElMes[mes];
		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]) dia=DiasEnElMes[mes];
		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=0;
		}
		//sólo permitimos una coma en todo el número
		if(event.keyCode==44 && 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;
		}
	}
}	
	/*function CopiarAlPortapapeles(obj){
		obj.focus();
		obj.select(); 
		CopiedTxt = document.selection.createRange();
		CopiedTxt.execCommand("Copy");
	}
	
	function PegarDelPortapapeles(obj){
		obj.focus();
		PastedText = obj.createTextRange();
		PastedText.execCommand("Paste");
	}*/