function trim(s) {
  while (s.substring(0,1) == ' ') {
    s = s.substring(1,s.length);
  }
  while (s.substring(s.length-1,s.length) == ' ') {
    s = s.substring(0,s.length-1);
  }
  return s;
}
function FechaValida (DateToCheck){
	if (DateToCheck=="") return true;
	var m_strDate = DateToCheck //FormatearFecha(DateToCheck);
		if(m_strDate=="") return false;
		
	var m_arrDate = m_strDate.split("/");
	var m_DAY = m_arrDate[0];
	var m_MONTH = m_arrDate[1];
	var m_YEAR = m_arrDate[2];
	
	if (m_YEAR.length > 4) return false;
	m_strDate = m_MONTH + "/" + m_DAY + "/" + m_YEAR;
	var testDate=new Date(m_strDate);
	if (testDate.getMonth()+1==m_MONTH) 
		return true;
	else
		return false;
}//end function

function FormatearFecha (DateToFormat,FormatAs){
	if (DateToFormat=="") return"";
	if (!FormatAs) FormatAs="dd/mm/yyyy"; //Formato por defecto

	var strReturnDate;
	FormatAs = FormatAs.toLowerCase();
	DateToFormat = DateToFormat.toLowerCase();
	var arrDate
	var arrMonths = new Array("enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre");
	var strMONTH;
	var Separator;

	while(DateToFormat.indexOf("st")>-1)
		DateToFormat = DateToFormat.replace("st","");
	while(DateToFormat.indexOf("nd")>-1)
		DateToFormat = DateToFormat.replace("nd","");
	while(DateToFormat.indexOf("rd")>-1)
		DateToFormat = DateToFormat.replace("rd","");
	while(DateToFormat.indexOf("th")>-1)
		DateToFormat = DateToFormat.replace("th","");

	if(DateToFormat.indexOf(".")>-1) 	Separator = ".";
	if(DateToFormat.indexOf("-")>-1)	Separator = "-";
	if(DateToFormat.indexOf("/")>-1)	Separator = "/";
	if(DateToFormat.indexOf(" ")>-1) 	Separator = " ";

	arrDate = DateToFormat.split(Separator);
	DateToFormat = "";
		for(var iSD = 0;iSD < arrDate.length;iSD++){
			if(arrDate[iSD]!=""){
			DateToFormat += arrDate[iSD] + Separator;
			}
		}
	DateToFormat = DateToFormat.substring(0,DateToFormat.length-1);
	arrDate = DateToFormat.split(Separator);

	if(arrDate.length < 3) return "";

	var DAY = arrDate[0];
	var MONTH = arrDate[1];
	var YEAR = parseFloat(arrDate[2]);

	if(parseFloat(arrDate[1]) > 12){
		DAY = arrDate[1];
		MONTH = arrDate[0];
		if (MONTH > 12) return ""
	}

	if(parseFloat(DAY) && DAY.toString().length==4){
		YEAR = arrDate[0];
		DAY = arrDate[2];
		MONTH = arrDate[1];
	}
	
	if (parseFloat(YEAR).toString().length < 4) return ""

	for(var iSD = 0;iSD < arrMonths.length;iSD++){
		var ShortMonth = arrMonths[iSD].substring(0,3).toLowerCase();
		var MonthPosition = DateToFormat.indexOf(ShortMonth);		
		if(MonthPosition > -1){
			MONTH = iSD + 1;
			if(MonthPosition == 0){
				DAY = arrDate[1];
				YEAR = arrDate[2];
			}
		break;
		}
	}

	var strTemp = YEAR.toString();
	if(strTemp.length==2){
		if(parseFloat(YEAR)>40)
			YEAR = "19" + YEAR;
		else
			YEAR = "20" + YEAR;
	}

	if(parseInt(MONTH)< 10 && MONTH.toString().length < 2)
		MONTH = "0" + MONTH;
	if(parseInt(DAY)< 10 && DAY.toString().length < 2)
		DAY = "0" + DAY;
	
	var sRetorno
	switch (FormatAs){
		case "dd/mm/yyyy":
			sRetorno =  DAY + "/" + MONTH + "/" + YEAR;
			break;
		case "mm/dd/yyyy":
			sRetorno =  MONTH + "/" + DAY + "/" + YEAR;
			break;
		case "dd/mmm/yyyy":
			sRetorno =  DAY + " " + arrMonths[MONTH -1].substring(0,3) + " " + YEAR;
			break;
		case "mmm/dd/yyyy":
			sRetorno =  arrMonths[MONTH -1].substring(0,3) + " " + DAY + " " + YEAR;
			break;
		case "dd/mmmm/yyyy":
			sRetorno = DAY + " " + arrMonths[MONTH -1] + " " + YEAR;	
			break;
		case "mmmm/dd/yyyy":
			sRetorno =  arrMonths[MONTH -1] + " " + DAY + " " + YEAR;
			break;
		default:
			sRetorno = DAY + "/" + strMONTH + "/" + YEAR;
			break;
	}

	if (!FechaValida(sRetorno)) return ""
	return sRetorno
} //End Function	

/*****************************************************************************************/
//Función qie valida el rango de dos fechas:
//Valida que el parámetro FDesde sea menor o igual que el parametro FHasta
//	FDesde:Fecha inicial.
//	FHasta:Fecha final.
function EsRangoFechas(FDesde,FHasta){
	patron = /^\d\d\/\d\d\/\d\d\d\d-\d\d\/\d\d\/\d\d\d\d$/;
	var cadena = FDesde + '-' + FHasta;
	cadenaEncontrada = cadena.match(patron);
	if(cadenaEncontrada != null){
		var dia1 = FDesde.substring(0, 2);
		var mes1 = FDesde.substring(3, 5);
		var anio1 = FDesde.substring(6, 10);
		var dia2 = FHasta.substring(0, 2);
		var mes2 = FHasta.substring(3, 5);
		var anio2 = FHasta.substring(6, 10);
		if (anio1>anio2){
			return false
		}
		if (anio1==anio2){
			if (mes1>mes2){
				return false;
			}else{
				if (mes1==mes2){
					if (dia1>dia2){
						return false;
					}
				}
			}
		}
		return true;
	}
	return false;
}
function DeshabilitaTeclas(CadenaAscii){
	// Recibe por parámetro una lista de números (representando códigos Ascii de letras, separados por comas)
	//	Si cualquiera de esos valores coincide con el código Ascii de la tecla seleccionada, desactiva la pulsación de tecla y devuelve false
	var ArrayCodigos = CadenaAscii.split(",")
	var tecla = event.keyCode
	for (i=0; i < ArrayCodigos.length; i++)
		if (tecla == parseInt(ArrayCodigos[i])){
			event.returnValue = null;
			return
		}
}
function RecibeFoco(campo)
{	
	campo.value=SinPuntos(campo.value);
	campo.focus();
	campo.select();
}

function PierdeFoco(campo)
{	
	campo.value = ConPuntos(campo.value);
}
function SinPuntos(cadena)
{
	var regExp=/\./g;
	cadena=cadena.replace(regExp,"");
	return cadena;
}
function EsEntero(ConSigno)
{
	tecla=event.keyCode;
	haySignoSelect=((document.selection.createRange().text).indexOf("-")!=-1);
	
	if ((tecla>=48) & (tecla<=57))
	{
		return true;
	}
	else if ((ConSigno=="True") & (tecla==45) & (((event.srcElement.value).indexOf("-")==-1) | (haySignoSelect)))
	{
		return true;
	}
	else
	{
		event.returnValue=null;
		return false;
	}
}
function FormatearNumero(Numero,LongParteEntera,decimals,blanco) 
{
	if ((blanco == 0) | (Numero != ''))
	{
		var LongEntero;
		var pos=Numero.indexOf(",");
		
		if (pos == -1)
			LongEntero=Numero.length;
		else
			LongEntero=(Numero.substring(0,pos)).length;
		
		if ((LongParteEntera != 0 ) & (LongEntero > LongParteEntera))
		{
			if (Numero.charAt(0)=="-")
			{
				Numero=Numero.substring(LongEntero - LongParteEntera,Numero.length);
				Numero="-" + Numero;
			}
			else
				Numero=Numero.substring(LongEntero - LongParteEntera,Numero.length);
		}
		
		pnumber=ToFloat(Numero);

		if ((isNaN(pnumber)) | (pnumber==''))
		{
			var cad="0";
			if (decimals>0)
			{
				cad+=",";
				for (var i=0;i<decimals;i++)
					cad=cad + "0";
			}
			return cad;
		}
		
		var result=new String(Math.round(pnumber * Math.pow(10, decimals)) / Math.pow(10, decimals));
		
		if (decimals>0)
		{
			if (result.indexOf(".")==-1)
				result+=".";
			for (var i=(result.substring(result.indexOf(".") + 1,result.length)).length;i<decimals;i++)
				result+="0";
		}
	}
	else
		result = '';

	return ToString(result);
} 
function ToFloat(cadena)
{
	cadena=SinPuntos(cadena);
	var regExp=/\,/g;
	cadena=cadena.replace(regExp,".");
	return parseFloat(cadena);
}
function ToString(cadena)
{
	var regExp=/\./g;
	cadena=String(cadena).replace(regExp,",");
	return cadena;
}

function ConPuntos(cadena)
{
	var posicion=cadena.indexOf(",");
	if (posicion==-1)
		posicion=cadena.length

	var subcadena;
	if (cadena.charAt(0)=="-")
		subcadena=cadena.substring(1,posicion);
	else
		subcadena=cadena.substring(0,posicion);
		
	var Resultado="";
	var cont=0;
	
	for (var i=subcadena.length - 1;i>0;--i)
	{
		cont++;
		Resultado=subcadena.charAt(i) + Resultado;
		if (cont==3)
		{
			cont=0;
			Resultado="." + Resultado;
		}
	}
	Resultado=subcadena.charAt(0) + Resultado + cadena.substring(posicion,cadena.length);
	
	if (cadena.charAt(0)=="-")
		Resultado="-" + Resultado;
	
	return Resultado;
}