function PorcentajeValido(porcent,maxvalue){
	/*
		Si maxvalue=-1 entonces no hay límite en el porcentaje. Estará bien
	*/
	if (maxvalue==-1)
		return true;
	else {
		var tmpValue;
		
		tmpValue=new String(porcent);
		tmpValue=tmpValue.replace(/\,/g,'.');
		
		if (Number(tmpValue)<0)
			return false;
		else {
			if (Number(tmpValue)<=maxvalue)
				return true;
			else
				return false;
		}
	}
}

function ComprobarNumeroEntero(Numero,SoloPositivo) {
	/* Comprueba si lo que se pasa en el parámetro número en un número entero
	   Opcionalmente puede comprobar si es sólo positivo */
	var answer,i;

	answer=true;
	

	if (Numero=="")
		answer=false;
	else {
		if (SoloPositivo) {
			for (i=0; i<Numero.length; i++) {
				if (Numero.charAt(i)<"0" || Numero.charAt(i)>"9"){
					answer = false;
					break;
				}
			}
		}
		else {
			for (i=0; i<Numero.length; i++) {
				if (Numero.charAt(i)<"0" || Numero.charAt(i)>"9"){
					if (Numero.charAt(i)=="-") {
						if (i==0)
							answer=true;
						else
							answer=false;
						break;
					}
					else
						answer=false;
				}
			}		
		}
	}
		
	return answer;
}

function AnyoEsBisiesto(Anyo) {
	var AnyoNum;
	
	AnyoNum=Number(Anyo);
	
	if ((Anyo%4)!=0)
		return false;
	else {
		if ((Anyo%100)!=0)
			return true;
		else {
			if ((Anyo%400)!=0)
				return false;
			else
				return true;
		}
	}
}

function FechaCorrecta(Fecha) {
	var MiFecha,splitFecha;

	MiFecha=new String(Fecha);
	splitFecha=MiFecha.split("/");
	
	if (splitFecha.length!=3)
		return false;
	else {
		if (isNaN(splitFecha[0]) || isNaN(splitFecha[1]) || isNaN(splitFecha[2]))
			return false;
		else
			if ((Number(splitFecha[0])<1) || (Number(splitFecha[0])>31) || (Number(splitFecha[1])<1) || (Number(splitFecha[1])>12))
				return false;
			else
				if (splitFecha[2].length!=4)
					return false;
				else				
					if (Number(splitFecha[0])==31)
						if (Number(splitFecha[1])==4 || Number(splitFecha[1])==6 || Number(splitFecha[1])==9 || Number(splitFecha[1])==11 || Number(splitFecha[1])==2)
							return false;
						else
							return true;
					else
						if ((Number(splitFecha[0])>28) && (Number(splitFecha[1])==2))
							if ((AnyoEsBisiesto(splitFecha[2])) && (Number(splitFecha[0])==29))
								return true;
							else
								return false;
						else
							return true;
	}
	
	return false;
}

function QuitarPuntosNumero(Num) {
	//Quita los posibles puntos decimales que pueda tener un número
	var Tmp,Valores,i,Res;
	
	Tmp=new String(Num);
	Valores=Tmp.split(".");
	i=0;
	Res="";
	
	while(i<Valores.length) {
		Res=Res+Valores[i];
		i=i+1;
	}
	
	return Res;
}

function ComprobarNum(number) {
	var numComprobacion, contComas, answer;
	
	if (number=='')
		answer=0;
	else {
		answer=1;
		numComprobacion=new String(number);
		numComprobacion.replace(/\./g,'');
		contComas=0;

		for (var i=0; i<numComprobacion.length; i++) {
			if (i==0) {
				if ((numComprobacion.charCodeAt(i)<48 || numComprobacion.charCodeAt(i)>57) && numComprobacion.charAt(i)!="+" && numComprobacion.charAt(i)!="-"){
					answer=0;
					break;
				}
			}
			else {
				//No es el primer caracter. Solo puede haber dígitos o una coma en el caso de que contComas sea 0
				if ((numComprobacion.charCodeAt(i)<48 || numComprobacion.charCodeAt(i)>57) && numComprobacion.charAt(i)!=",") {
					answer=0;
					break;
				}
				else {
					if (numComprobacion.charAt(i)==",") {
						if (contComas==0)
							contComas=contComas+1;
						else {
							answer=0;
							break;									
						}
					}
					else {
						if (numComprobacion.charCodeAt(i)<48 || numComprobacion.charCodeAt(i)>57) {
							answer=0;
							break;				
						}
					}			
				}
			}
		}
	}
	
	return answer;
} 

function EsCantidadEuroValida(Cantidad) {
	var SplitCant,MiStr,cant,SumaUno,Redondeo;

	if (ComprobarNum(Cantidad)==1) {
		MiStr=new String(Cantidad);
		SplitCant=MiStr.split(",");
		
		if (SplitCant.length==2) {
			switch (SplitCant[1].length) {
				case 0:
					if (SplitCant[0]=="+" || SplitCant[0]=="-")
						cant=SplitCant[0]+'0,00';
					else
						cant=Cantidad+'00';
					break;
				case 1:
					if (SplitCant[0]=="+" || SplitCant[0]=="-")
						cant=SplitCant[0]+'0,' + SplitCant[1] + '0';
					else
						cant=Cantidad+'0';
					break;
				case 2:
					if (SplitCant[0]=="+" || SplitCant[0]=="-")
						cant=SplitCant[0]+'0,' + SplitCant[1];
					else
						cant=Cantidad;
					break;
				default:
					//Es mayor que 2. Hay que hacer un redondeo
					if (SplitCant[1].charAt(2)>="5") {
						Redondeo=parseInt(SplitCant[1].charAt(0) + SplitCant[1].charAt(1))+1;
						if (Redondeo==100) {
							SumaUno=parseFloat(SplitCant[0])+1;
							cant=new String(SumaUno + ",00")
						}
						else
							if (Redondeo<10)
								cant=new String(SplitCant[0] + ",0" + Redondeo);
							else
								cant=new String(SplitCant[0] + "," + Redondeo);
					}
					else
						cant=new String(SplitCant[0] + "," + SplitCant[1].charAt(0) + SplitCant[1].charAt(1));

					break;
			}
		}
		else {
			if (SplitCant[0]=="+" || SplitCant[0]=="-")
				cant=SplitCant[0]+'0,00'
			else
				cant=Cantidad + ',00';
		}
	}
	else
		cant="X";
	
	return cant;
}

function PonerPuntosCantidad(Cantidad) {
	var Pos,Tmp,Decimales,Resultado,Signo;
	
	Tmp=new String(Cantidad);
	
	if (Izquierda(Tmp,1)=="+" || Izquierda(Tmp,1)=="-") {
		Signo=Izquierda(Tmp,1);
		Tmp=new String(Derecha(Tmp,Tmp.length-1));
	}
	else
		Signo="";

	Pos=Tmp.split(".");

	if (Pos.length>1)
		Tmp=new String(Pos[0] + "," + Pos[1]);

	//Tmp=new String(Cantidad);
	Pos=Tmp.split(",");

	Tmp=Pos[0];

	if (Pos.length==1)
		Decimales="";
	else {
		Decimales= "," + Pos[1];
	}

	//if (Tmp.charAt(0)=="-" || Tmp.charAt(0)=="+") {
	//	Signo=Tmp.charAt(0);
	//	Tmp=Derecha(Tmp,Tmp.length-1);
	//}
	//else
	//	Signo="";
	
	if (Tmp.length>=4) {
		var i;
		
		i=1;
		Resultado="";

		while ((i*3)<=Tmp.length) {
			Resultado= "." + Izquierda(Derecha(Tmp,i*3),3) + Resultado;
			i=i+1;
		}

		if ((i-1)*3<Tmp.length)
			Resultado=Izquierda(Tmp,Tmp.length-((i-1)*3)) + Resultado;

		if (Izquierda(Resultado,1)==".")
			Resultado=Derecha(Resultado,Resultado.length-1) + Decimales;
		else
			Resultado=Resultado + Decimales;

		return Signo + Resultado;
	}
	else
		return Signo + Tmp + Decimales;

}


function Derecha(Cadena,Cars) {
	var Tmp,i,Res,cont;
	
	Tmp=new String(Cadena);
	i=Tmp.length-1;
	Res="";
	cont=0;
	
	if (Cars<=Tmp.length) {
		while (cont<Cars) {
			Res=Tmp.charAt(i)+Res;
			cont+=1;
			i-=1;
		}
	}
	
	return Res;
}

function Izquierda(Cadena,Cars) {
	var Tmp,i,Res;
	
	Tmp=new String(Cadena);
	i=0;
	Res="";
	
	if (Cars<=Tmp.length) {
		while (i<=(Cars-1)) {
			Res=Res + Tmp.charAt(i);
			i+=1;
		}
	}
	
	return Res;
}

function QuitarPuntosNumero(Num) {
	var Tmp,Valores,i,Res;
	
	Tmp=new String(Num);
	Valores=Tmp.split(".");
	i=0;
	Res="";
	
	while(i<Valores.length) {
		Res=Res+Valores[i];
		i=i+1;
	}
	
	return Res;
}

function CambiarComaAPunto(Cantidad) {
	var Tmp,TmpSplit;
	
	Tmp=new String(Cantidad);
	TmpSplit=Tmp.split(",");
	
	if (TmpSplit.length==1)
		return Cantidad;
	else
		return TmpSplit[0] + "." + TmpSplit[1];
}

function CambiarPuntoAComa(Cantidad) {
	var Tmp,TmpSplit;
	
	Tmp=new String(Cantidad);
	TmpSplit=Tmp.split(".");
	
	if (TmpSplit.length==1)
		return Cantidad;
	else
		return TmpSplit[0] + "," + TmpSplit[1];
}

function FechasFiltroCorrectas(FechaDesde,FechaHasta) {
	var splitFechaDesde, splitFechaHasta;

	splitFechaDesde=new String(FechaDesde).split("/");
	splitFechaHasta=new String(FechaHasta).split("/");
	
	if (Number(splitFechaDesde[2])<=Number(splitFechaHasta[2])) {
		if (Number(splitFechaDesde[2])==Number(splitFechaHasta[2])) {
			if (Number(splitFechaDesde[1])<=Number(splitFechaHasta[1])) {
				if (Number(splitFechaDesde[1])==Number(splitFechaHasta[1])) {
					if (Number(splitFechaDesde[0])<=Number(splitFechaHasta[0]))
						return true;
					else
						return false;
				}
				else
					return true;
			}
			else
				return false;
		}
		else
			return true;
	}
	else
		return false;
}

function Redondear(value, precision)
		{
        value = "" + value //convert value to string
        precision = parseInt(precision);
        var whole = "" + Math.round(value * Math.pow(10, precision));

        var decPoint = whole.length - precision;

        if(decPoint != 0)
        {
                result = whole.substring(0, decPoint);
                result += ".";
                result += whole.substring(decPoint, whole.length);
        }
        else
        {
                result = 0;
                result += ".";
                result += whole.substring(decPoint, whole.length);
        }
        return result;
}

function CaracteresNulos(Obj) {
		var i,Tmp,NoValido;
		
		NoValido=0;
		
		Tmp=new String(Obj.value);
		for (i=0;i<=Tmp.length-1;i++) {
			if ((Tmp.charCodeAt(i)<48) || (Tmp.charCodeAt(i)>57))
 				if ((Tmp.charAt(i)!=".") && (Tmp.charAt(i)!=","))
					NoValido=1;
		}
				
		if (NoValido==0)
			return false;
		else
			return true;
}
	
function FormatearNumero(Numero,Formato) {
	var MiCantidad,SplitCant;

	MiCantidad=new String(Numero);
	SplitCant=MiCantidad.split(".");

	if (SplitCant.length>1)
		Numero=SplitCant[0] + "," + SplitCant[1];

	switch (Formato) {
		case "Normal":
			// Sin decimales		
			MiCantidad=new String(Numero);
			SplitCant=MiCantidad.split(",");
			
			if (SplitCant.length>1)
				if (SplitCant[1].charAt(0)>="5")
					MiCantidad=new String(parseFloat(SplitCant[0])+1);
				else
					MiCantidad=new String(SplitCant[0]);

			break;

		case "Standard":
			// Dos decimales
			MiCantidad=new String(Numero);
			SplitCant=MiCantidad.split(",");
			
			if (SplitCant.length>1)
				if (SplitCant[1].length>2)
					if (SplitCant[1].charAt(2)>="5") {
						var DosDec,Tmp;
						
						DosDec=SplitCant[1].charAt(0)+SplitCant[1].charAt(1);
						Tmp=parseInt(DosDec)+1;
						
						if (Tmp<10)
							MiCantidad=new String(SplitCant[0] + ",0" + Tmp);
						else
							if (Tmp<100)
								MiCantidad=new String(SplitCant[0] + "," + Tmp);
							else
								MiCantidad=new String(parseInt(SplitCant[0])+1 + ",00");
					}
					else
						MiCantidad=new String(SplitCant[0] + "," + SplitCant[1].charAt(0) + SplitCant[1].charAt(1));
				else
					if (SplitCant[1].length==2)
						MiCantidad=new String(SplitCant[0] + "," + SplitCant[1]);
					else
						MiCantidad=new String(SplitCant[0] + "," + SplitCant[1] + "0");
			else
				MiCantidad=new String(SplitCant[0] + ",00");
			break;		
	}			
	
	return (MiCantidad);
}



function RepeatChar(car,repeats) {
	var i,retval;
	
	retval="";
	
	for (i=1;i<=repeats;i++)
		retval=retval+car;
	
	return retval;
}

function Exp(base, exp) {
	var fbase = base;
	var fexp = exp;
	var count = 1;
	var fequals;

	if(fexp < 0) {fexp = -1 * fexp; } else {fexp = fexp; }

	while(count < fexp) {
		fbase = fbase * base;
		count = count + 1;

		if(count > 600) { break; } else { continue; }
	}

	if(exp < 0) {fequals = 1 / fbase; } else if (exp == 0) {fequals = 1; } else {fequals = fbase; }

	return fequals;
}		

function FormatearNumeroDecimales(Numero,Decimales) {
	var MiCantidad,SplitCant;

	MiCantidad=new String(Numero);
	SplitCant=MiCantidad.split(".");

	if (SplitCant.length>1)
		Numero=SplitCant[0] + "," + SplitCant[1];


	// Tratar decimales
	MiCantidad=new String(Numero);
	SplitCant=MiCantidad.split(",");
	
	if (SplitCant.length>1)
		if (SplitCant[1].length>Decimales)
			if (SplitCant[1].charAt(Decimales)>="5") {
				var VariosDec,Tmp;
				
				VariosDec=Izquierda(SplitCant[1],Decimales);
				Tmp=parseInt(VariosDec)+1;
				
				if (Tmp<Exp(10,Decimales)){
					var TmpStr;
					
					TmpStr=new String(Tmp);
					MiCantidad=new String(SplitCant[0] + "," + RepeatChar("0",Decimales-TmpStr.length) + Tmp);
				}
				else
					MiCantidad=new String(parseInt(SplitCant[0])+1 + "," + RepeatChar("0",Decimales));				
			}
			else
				MiCantidad=new String(SplitCant[0] + "," + Izquierda(SplitCant[1],Decimales));
		else
			if (SplitCant[1].length==Decimales)
				MiCantidad=new String(SplitCant[0] + "," + SplitCant[1]);
			else
				MiCantidad=new String(SplitCant[0] + "," + SplitCant[1] + RepeatChar("0",Decimales-SplitCant[1].length));
	else
		MiCantidad=new String(SplitCant[0] + "," + RepeatChar("0",Decimales));
	
	return (MiCantidad);
}

function tooltip(id,vis){
	var capa;
	if(document.all)
	{capa=document.all[id].style;
	if (capa)
	capa.visibility = vis ? "visible":"hidden";
	}
	else
	if(document.layers)
	{capa=document.layers[id];
	if (capa)
	capa.visibility = vis ? "show":"hide";
	}
	else
	if(document.getElementById)
	{capa=document.getElementById(id).style;
	if (capa)
	capa.visibility = vis ? "visible":"hidden";
	}
	return false;
}

function DateAdd(TipoIntervalo,Cuantos,Fecha){
    var anio=Number(Fecha.split("/")[2]);
    var mes=Number(Fecha.split("/")[1]);
    var dia=Number(Fecha.split("/")[0]);
    
    if (Number(Cuantos)==0){
        return Fecha;
    }else{    
        switch(TipoIntervalo){
            case "mes":
                var cantidad =mes+Number(Cuantos);
                anio+=(cantidad-(cantidad%12))/12;
                mes=cantidad%12;
                break;
        }
        var FechaFinal=dia+"/"+mes+"/"+anio;
        
        while(!FechaCorrecta(FechaFinal)){
            dia=dia-1;
            FechaFinal=dia+"/"+mes+"/"+anio;
        }
    }
    
    return FechaFinal;
}

function Reemplazar_Caracteres_Especiales (s) {

    s = s.replace(/[à|á|ä|â|ã|æ|å]/,"a");
    s = s.replace(/[è|é|ë|ê]/,"e");     
    s = s.replace(/[ì|í|î|ĩ|ï]/,"i");     
    s = s.replace(/[ò|ó|ô|õ|ö]/,"o");     
    s = s.replace(/[ù|ú|û|ü]/,"u");     
    s = s.replace(/[ć|ĉ|ċ|č|Ç|ç]/,"c");     
    s = s.replace("ñ","n");     
    s = s.replace("ğ","g");     
    s = s.replace("ň","n");     
    s = s.replace("ŵ","w");     
    s = s.replace("ŷ","y");     
    s = s.replace("ž","z");     
    s = s.replace(/[ª|º|\|!|·|#|$|%|&|/|(|)|=|?|¿|^|*|+|-|{|}]/,"");     
    
   
    return s;
}   

function Validar_Email(valor) {
    
  if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(valor)){    
        return true;
  } else {                
        return false;
  }

}