/***************************************************
 Función que Valida que un Texto tenga el formato 
 dddddddd,dddd
***************************************************/
function validaNumeroFormato(elemento)
{
  var numero="";
  var parteEntera="";
  var parteDecimal="";
  var valid = "0123456789,";  
  var ok = "yes";
  var temp;  
  
  	if(elemento.type=="text"){
  		numero=AllTrim(elemento.value);
  		if(numero=="" || numero.length==0)
       		return false;
		for (var i=0; i<numero.length; i++) {
			temp = "" + numero.substring(i, i+1);
			if (valid.indexOf(temp) == "-1") 
				ok = "no";
		}
		if (ok == "no") {
			return false;
		}
	   	//El número es entero
	   	if(numero.indexOf(",")==-1){
			if(numero.length>8)
				return false;
		//El número tiene decimales 	
	  	}else{
			parteEntera=numero.substring(0,numero.indexOf(","));
			parteDecimal=numero.substring(numero.indexOf(",")+1);
			if(parteEntera.length>8 || parteDecimal.length>4)
				return false;
		}
	}
	return true;
}

/***************************************************
 Función que Valida que un Texto no sea vacío.
***************************************************/
function validaTexto(elemento)
{
  if(elemento.type=="text"){
    if(elemento.value=="" || AllTrim(elemento.value).length==0)
       return false;
  }
  return true;
}

/***************************************************
 Función que elimina los espacios en Blanco a la 
 Izquierda y a la Derecha del elemento.
***************************************************/
function AllTrim(elemento)
{
   return RTrim(LTrim(elemento));
}

/***************************************************
 Función que elimina los espacios en Blanco a la 
 Izquierda del elemento.
***************************************************/
function LTrim(elemento)
{
  while(''+elemento.charAt(0)==' ')
     elemento=elemento.substring(1,elemento.length);
  return elemento;
}

/***************************************************
 Funcion que elimina los espacios en Blanco a la 
 Derecha del elemento.
***************************************************/
function RTrim(elemento)
{
  while(''+elemento.charAt(elemento.length-1)==' ')
     elemento=elemento.substring(0,elemento.length-1);
  return elemento;
}

/***************************************************
 Funcion que verifica que el valor ingresado sea de 
 tipo INT.
***************************************************/
function checkInt(objName) {
var numfield = objName;
if (chkInt(objName.value) == false) {
	numfield.select();
	alert("Este número es inválido. Coloque números solamente. Inténtelo de nuevo.");
	numfield.value="";
	numfield.focus();
	return false;
}
else {
	return true;
}
}

/***************************************************
 Funcion que verifica que el valor ingresado sea de 
 tipo FLOAT.
***************************************************/
function checkFloat(objName) {
var numfield = objName;
if (chkFloat(objName.value) == false) {
	numfield.select();
	alert("Este número es inválido. Inténtelo de nuevo.");
	numfield.value="";
	numfield.focus();
	return false;
}
else {
	return true;
}
}

/***************************************************
 Funcion que verifica que el valor ingresado sea de 
 tipo INT.
***************************************************/
function chkInt(num)
{
var parsednum;
var pat;
var res = new Array();
pat = /(\.)/g;
res = num.match(pat);
if(res!=null)
	if(res.length>0)
		return false;
pat=/(\D)/g;
res=num.match(pat);
if(res!=null)
	if(res.length>1)
		return false;
	else
		if(res[0]=='-')
		{
			parsednum=parseInt(num);
			if(parsednum==num)
				return true;
			else
				return false;
		}
		else
			return false;
else
	return true;
}

/***************************************************
 Funcion que verifica que el valor ingresado sea de 
 tipo FLOAT.
***************************************************/
function chkFloat(num)
{
var parsednum;
var pat;
var res = new Array();
pat = /(\.)/g;
res = num.match(pat);
if(res!=null)
	if(res.length>1)
		return false;
pat=/(\D)/g;
res=num.match(pat);
if(res!=null)
	if(res.length>2)
		return false;
	else
		if(res.length==1)
			if(res[0]=='-' || res[0]==',')
				return true;
			else
				return false;
		else //res.length es 2
			if(res[0]=='-' && res[1]==',')
			{
				parsednum=parseFloat(num.replace(",","."));
				if(parsednum==num)
					return true;
				else
					return false;
			}
			else
				return false;
else
	return true;
}

/***************************************************
 Funcion que verifica que el valor ingresado sea de 
 tipo FECHA.
***************************************************/
function checkdate(objName) {
	var datefield = objName;
	if (!validateCaracteresFecha(datefield)){
		datefield.select();
		alert("La fecha es inválida. Inténtelo de nuevo.");
		datefield.value="";
		datefield.focus();
		return false;	
	}
	if (chkdate(objName) == false) {
		datefield.select();
		alert("La fecha es inválida. Inténtelo de nuevo.");
		datefield.value="";		
		datefield.focus();
		return false;
	}else {
		return true;
	}
}



function chkdate(objName) {

//var strDatestyle = "US";
var strDatestyle = "EU";
var runTime = new Date();
var strCurrentYear = runTime.getYear();
var strDate;
var strDateArray;
var strDay;
var strMonth;
var strYear;
var intday;
var intMonth;
var intYear;
var booFound = false;
var datefield = objName;
var strSeparatorArray = new Array("-"," ","/",".");
var intElementNr;
var err = 0;
var strMonthArray = new Array(12);
/*
strMonthArray[0] = "Ene";
strMonthArray[1] = "Feb";
strMonthArray[2] = "Mar";
strMonthArray[3] = "Abr";
strMonthArray[4] = "May";
strMonthArray[5] = "Jun";
strMonthArray[6] = "Jul";
strMonthArray[7] = "Ago";
strMonthArray[8] = "Sep";
strMonthArray[9] = "Oct";
strMonthArray[10] = "Nov";
strMonthArray[11] = "Dic";
*/
strMonthArray[0] = "01";
strMonthArray[1] = "02";
strMonthArray[2] = "03";
strMonthArray[3] = "04";
strMonthArray[4] = "05";
strMonthArray[5] = "06";
strMonthArray[6] = "07";
strMonthArray[7] = "08";
strMonthArray[8] = "09";
strMonthArray[9] = "10";
strMonthArray[10] = "11";
strMonthArray[11] = "12";
strDate = datefield.value;

	if (strDate.length < 1) {
		return true;
	}
	for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
		if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) {
			strDateArray = strDate.split(strSeparatorArray[intElementNr]);
			if ((strDateArray.length < 2) || (strDateArray.length > 3)) {
				err = 1;
				return false;
			}else {
				strDay = strDateArray[0];
				strMonth = strDateArray[1];
				if (strDateArray.length == 2) 
					strYear = strCurrentYear
				else
					strYear = strDateArray[2];
			}
			booFound = true;
		}
	}

	if (booFound == false) {
		if (strDate.length>5) {
			strDay = strDate.substr(0, 2);
			strMonth = strDate.substr(2, 2);
			strYear = strDate.substr(4);
		}
	}

	if (strYear.length != 4 || parseInt(strYear) < 1900) {
		return false;
	}
	if (strYear == null) {
  		return false;
	}
	if (strYear.length == 1) {
		strYear = '0' + strYear
	}
	if (strYear.length == 2) {
		strYear = '20' + strYear;
	}

	if (strMonth.length == 1) {
		strMonth = '0' + strMonth;
	}

	if (strDay.length == 1) {
		strDay = '0' + strDay;
	}

	if (strDatestyle == "US") {
		strTemp = strDay;
		strDay = strMonth;
		strMonth = strTemp;
	}

	intday = parseInt(strDay, 10);
	if (isNaN(intday)) {
		err = 2;
		return false;
	}

	intMonth = parseInt(strMonth, 10);
	if (isNaN(intMonth)) {
		for (i = 0;i<12;i++) {
			if (strMonth.toUpperCase() == strMonthArray[i].toUpperCase()) {
				intMonth = i+1;
				strMonth = strMonthArray[i];
				i = 12;
			}
		}

		if (isNaN(intMonth)) {
			err = 3;
			return false;
		}
	}

	intYear = parseInt(strYear, 10);
	if (isNaN(intYear)) {
		err = 4;
		return false;
	}

	if (intMonth>12 || intMonth<1) {
		err = 5;
		return false;
	}

	if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1)) {
		err = 6;
		return false;
	}

	if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) {
		err = 7;
		return false;
	}

	if (intMonth == 2) {
		if (intday < 1) {
			err = 8;
			return false;
		}
		if (LeapYear(intYear) == true) {
			if (intday > 29) {
				err = 9;
				return false;
			}
		}else {
			if (intday > 28) {
				err = 10;
				return false;	
			}
		}
	}

	if (strDatestyle == "US") {
		datefield.value = strMonthArray[intMonth-1] + " " + intday+" " + strYear;
	}else {
		if(intday<10)
			intday="0"+intday;
		if(intMonth<10)
			intMonth="0"+intMonth;
		datefield.value = intday + "/" + strMonthArray[intMonth-1] + "/" + strYear;
	}

	return true;
}

function LeapYear(intYear) {
if (intYear % 100 == 0) {
if (intYear % 400 != 0) { return true; }
}
else {
if ((intYear % 4) == 0) { return true; }
}
return false;
}

/***************************************************
 Funcion que valida si un campo de tipo Texto
 tiene caracteres permitidos o no.
***************************************************/
function validateOnlyChar(field) {
	var valid = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ"+
		    "abcdefghijklmnñopqrstuvwxyz"+
		    " 0123456789"+
		    "áÁéÉíÍóÓúÚöäüÄÖÜ$º()/¿?!¡%#@_-+*~:;'.&";

	var ok = "yes";
	var temp;
	for (var i=0; i<field.value.length; i++) {
		temp = "" + field.value.substring(i, i+1);
		if (valid.indexOf(temp) == "-1") ok = "no";
	}
	if (ok == "no") {
		alert("¡Ingreso inválido! Se han ingresado caracteres no permitidos");
		field.focus();
		field.select();
		return false;
	}
	else{
		field.value = field.value.toUpperCase();
	}
	return true;
}

/***************************************************
 Funcion que valida si un campo de tipo Texto
 tiene caracteres permitidos o no.
***************************************************/
function validateOnlyCharRazonSocialSerie(field) {
	var valid = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ"+
		    "abcdefghijklmnñopqrstuvwxyz"+
		    " 0123456789"+
		    "áÁéÉíÍóÓúÚöäüÄÖÜ$º_-+*&";

	var ok = "yes";
	var temp;
	for (var i=0; i<field.value.length; i++) {
		temp = "" + field.value.substring(i, i+1);
		if (valid.indexOf(temp) == "-1") ok = "no";
	}
	if (ok == "no") {
		alert("¡Ingreso inválido! Se han ingresado caracteres no permitidos");
		field.focus();
		field.select();
		return false;
	}
	else{
		field.value = field.value.toUpperCase();
	}
	return true;
}


/***************************************************
 Funcion que valida si los caracteres del nombre
 de tabla lógica son válidos o no.
***************************************************/
function validateNomTablaLogica(field) {
	var validPrimCaracter="ABCDEFGHIJKLMNÑOPQRSTUVWXYZ"+
		    "abcdefghijklmnñopqrstuvwxyz";

	var valid = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ"+
		    "abcdefghijklmnñopqrstuvwxyz"+
		    "0123456789"+
		    "áÁéÉíÍóÓúÚöäüÄÖÜ$º()/¿?!¡%#@_-+*~:;'.&";

	var ok = "yes";
	var temp;
	temp = "" + field.value.substring(0, 1);
	if (validPrimCaracter.indexOf(temp) == "-1") ok = "no";
	for (var i=1; i<field.value.length; i++) {
		temp = "" + field.value.substring(i, i+1);
		if (valid.indexOf(temp) == "-1") ok = "no";
	}
	if (ok == "no") {
		alert("¡Ingreso inválido! Se han ingresado caracteres no permitidos");
		field.focus();
		field.select();
		return false;
	}
	else{
		field.value = field.value.toUpperCase();
	}
	return true;
}

/***************************************************
 Funcion que muestra el calendario.
***************************************************/
function mostrarCalendario(field){
	if(!field.disabled){
		AsignarCampoFecha(field);
		top.newWin = window.open('calendar.html','cal','dependent=yes,width=250,height=260,screenX=200,screenY=300,titlebar=yes');
	}
}
function HacerNada(field){
	if(!field.disabled){
		AsignarCampoFecha(field);
		top.newWin = window.open('/js/calendar.htm','cal','dependent=yes,width=210,height=230,screenX=200,screenY=300,titlebar=yes');
	}
}

/***************************************************
 Funcion valida entero mayor que cero.
***************************************************/
function validaIntMayorCero(objName){
var numfield = objName;
if (objName.value==""){
	numfield.select();
	alert("Debe colocar un número. Inténtelo de nuevo.");
	numfield.focus();
	return false;	
}else if (chkInt(objName.value)==false) {
	numfield.select();
	alert("Este número es inválido. Coloque números solamente. Inténtelo de nuevo.");
	numfield.focus();
	return false;
}else{
	if(parseInt(objName.value,10)<=0){
		numfield.select();
		alert("Este campo debe ser mayor que cero. Coloque números solamente. Inténtelo de nuevo.");
		numfield.focus();
		return false;
	}else{
		return true;
	}
}
}

/***************************************************
 Funcion valida entero mayor o igual que cero.
***************************************************/
function validaIntMayorIgualCero(objName){
var numfield = objName;
if (objName.value==""){
	alert("Debe colocar un número. Inténtelo de nuevo.");
	numfield.value="0";
	return false;	
}else if (chkInt(objName.value)==false) {
	alert("Este número es inválido. Coloque números solamente. Inténtelo de nuevo.");
	numfield.value="0";	
	return false;
}else{
	if(parseInt(objName.value,10)<0){
		alert("Este campo debe ser mayor o igual que cero. Coloque números solamente. Inténtelo de nuevo.");
		numfield.value="0";		
		return false;
	}else{
		return true;
	}
}
}


/***************************************************
 Funcion valida flotante mayor que cero.
***************************************************/
function validaFloatMayorCero(objName){
	var numfield = objName;
	if (objName.value==""){
		alert("Debe colocar un número. Inténtelo de nuevo.");
		return false;	
	}else if (chkFloat(objName.value)==false) {
		alert("Este número es inválido. Coloque números solamente. Inténtelo de nuevo.");
		numfield.value='';
		return false;
	}else{
		if(parseFloat(objName.value)<=0){
			alert("Este campo debe ser mayor que cero. Coloque números solamente. Inténtelo de nuevo.");
			return false;
		}else{
			return true;
		}
	}
}

/***************************************************
 Funcion valida flotante nayor o igual que cero.
***************************************************/
function validaFloatMayorIgualCero(objName){
var numfield = objName;
if (objName.value==""){
	alert("Debe colocar un número. Inténtelo de nuevo.");
	numfield.value="0,0";	
	return false;	
}else if (chkFloat(objName.value)==false) {
	alert("Este número es inválido. Coloque números solamente. Inténtelo de nuevo.");
	numfield.value="0,0";	
	return false;
}else{
	if(parseFloat(objName.value)<0){
		alert("Este campo debe ser mayor o igual que cero. Coloque números solamente. Inténtelo de nuevo.");
		numfield.value="0,0";	
		return false;
	}else{
		return true;
	}
}
}


/***************************************************
 Funcion valida email.
***************************************************/
function validaEmail(objName){
  var email = objName.value;

 if(!email=="" && !AllTrim(email).length==0){
  if( email.indexOf('@',0) <= 0  || email.indexOf(';',0) != -1
   || email.indexOf(' ',0) != -1 || email.indexOf('/',0) != -1
   || email.indexOf(';',0) != -1 || email.indexOf('<',0) != -1
   || email.indexOf('>',0) != -1 || email.indexOf('*',0) != -1
   || email.indexOf('|',0) != -1 || email.indexOf('`',0) != -1
   || email.indexOf('&',0) != -1 || email.indexOf('$',0) != -1
   || email.indexOf('!',0) != -1 || email.indexOf('"',0) != -1
   || email.indexOf(':',0) != -1 ){
	objName.select();
	alert("Dirección de correo no valida. Inténtelo de nuevo.");
	objName.focus();
	return false;
  }
  else return true;
 }
}

/***************************************************
 Funcion que saca puntos, espacios y guiones a un Rut
***************************************************/
function dejaSoloNumeros(rut){
  var tmpstr = "";
  for ( i=0; i < rut.length ; i++ )
    if ( rut.charAt(i) != ' ' && rut.charAt(i) != '.' && rut.charAt(i) != '-' )
      tmpstr = tmpstr + rut.charAt(i);
  rut = tmpstr;
  return rut;
}
/***************************************************
 Funcion que compara fechaDesde con fechaHasta
***************************************************/
function validaFechas(objFechaDesde,objFechaHasta){   
   //Recupera cadena de string dd/mm/yyyy
   var fechaDesde = objFechaDesde.value;
   var fechaHasta = objFechaHasta.value;
   //Genera fecha absoluta yyyymmdd
   var fecDesde  = fechaDesde.substring(6,10) + fechaDesde.substring(3,5) + fechaDesde.substring(0,2);
   var fecHasta  = fechaHasta.substring(6,10) + fechaHasta.substring(3,5) + fechaHasta.substring(0,2);      
   //Compara fechas absoluta
   if(fecDesde > fecHasta)
		return false
   else
		return true;
}

/***************************************************
 Funcion que valida que fecha nacimiento no sea 
 posterior a hoy
***************************************************/
function verificaFechaNacimiento(objFechaDesde){   

   if(!checkdate(objFechaDesde))
   		return false;
   //Recupera cadena de string dd/mm/yyyy
   var fechaDesde = objFechaDesde.value;
   var hoy = new Date();
   var fechaHasta ="";
   if(parseInt(hoy.getDate(),10)<10)
	   fechaHasta = "0"+hoy.getDate()+"/";
   else
	   fechaHasta = hoy.getDate()+"/";
   if(parseInt(hoy.getMonth()+1,10)<10)
	   fechaHasta = fechaHasta+"0"+(hoy.getMonth()+1)+"/";
   else
	   fechaHasta = fechaHasta+(hoy.getMonth()+1)+"/";
   fechaHasta = fechaHasta+(hoy.getYear());
   
   //Genera fecha absoluta yyyymmdd
   var fecDesde  = fechaDesde.substring(6,10) + fechaDesde.substring(3,5) + fechaDesde.substring(0,2);
   var fecHasta  = fechaHasta.substring(6,10) + fechaHasta.substring(3,5) + fechaHasta.substring(0,2);      
   
   //Compara fechas absoluta
   if(fecDesde > fecHasta){
   		alert("La fecha de nacimiento no puede superar a la fecha actual");
   		objFechaDesde.value="";
		return false
   }else
		return true;
}


/***************************************************
 Funcion que valida si los caracteres de la fecha
 son válidos o no.
***************************************************/
function validateCaracteresFecha(field) {
	var valid = "0123456789/";

	var ok = "yes";
	var temp;
	for (var i=0; i<field.value.length; i++) {
		temp = "" + field.value.substring(i, i+1);
		if (valid.indexOf(temp) == "-1") ok = "no";
	}
	if (ok == "no") {
		return false;
	}
	else{
		field.value = field.value.toUpperCase();
	}
	return true;
}

//******************************************************************/
//*Corta un numero en un string con decimales a gusto
//*
//*
function truncar(numero,digitos)
	{
		var pos = 0;
		var entero;
		var decimal;
		var largoDecimal;
		

		
		pos = numero.indexOf(".");  // Primera ocurrencia del ".", parte de cero
		
		if (pos != -1)
		{
			entero  = numero.substr(0,pos);
			decimal = numero.substr(pos+1,digitos);
		
			largoDecimal = decimal.length;
		
			if (largoDecimal < digitos)
			{
				for (i=0;i<(digitos-largoDecimal);i++)
				{
					decimal = decimal + "0";
				}
			}
		}
		else
		{
			entero = numero;
			decimal = "00000000000".substring(0,digitos);
		}

		return(AllTrim(entero) + "." + AllTrim(decimal));
	} 
//*********************************************************
// Desformatea
//***************************************************************************
// recibe un numero en formato 999.999.999,9999 o 999,999,999.9999
// desformatea(StringNumerico,formato)
// Formato 'E'spañol o 'I'ngles


function  desformatea(StrNume,formato)
{

   if (formato=='E') 
   {
 	var punto=",";
 	var coma=".";
   }	
   else
   {
 	var punto=".";
 	var coma=",";
  }

  while (StrNume.indexOf(coma) !=-1)
  {
  	StrNume=StrNume.replace(coma,'');

 
  }
  StrNume=StrNume.replace(punto,'.');
  
  return StrNume;
}

//***************************************************************************
// Funcion FormateaNumeros(numero, mascara)
//***************************************************************************
/*
 * Enmascara un dato de tipo numerico. La mascara solo debe contener
 * numeros ('9') y puntos ('.'). Ej: '9999.99'
 * El numero debe estar normalizado (sin caracteres no numericos)
 * numero  : dato a enmascarar
 * mascara : mascara a aplicar a numero
 * formato del numero, ingles español, el numero debe venir en formato español y la mascara tambien
 */
function FormateaNumeros2(numero, mascara,idioma) {

    var largoNumero = numero.length;
    var largoMascara = mascara.length;
    var numeroFormateado = "";
    var posicion = largoNumero - 1;

// busqueda cuantos decimales
   if (idioma=="I")
   {
   punto=".";
   coma=",";
   }
   else
   {
   punto=",";
   coma=".";
   }
   var pos=mascara.indexOf(punto);
//   alert(pos);
   if (pos >-1)
   {
    decimales = largoMascara - pos-1;
    numero=truncar(numero,decimales);
    numero=AllTrim(numero);
    largoNumero = numero.length;
    posicion = largoNumero - 1;
    //alert(numero);
   }
   else
   {
       decimales = 0;
       numero=truncar(numero,decimales);
       numero=AllTrim(numero);
       largoNumero = numero.length;
       posicion = largoNumero - 1;
   }




    // Formatear numero con respecto a la mascara recibida.
    for (var i = largoMascara - 1; i >= 0; --i) {
        var caracterMascara = mascara.charAt(i);
        var caracterTemporal = "";
        caracterTemporal ='';
        
        switch (caracterMascara) {
            case '9' :
                if (posicion >= 0) {
                    
                    caracterTemporal = numero.charAt(posicion--);
                } else {
                    caracterTemporal = '';
                }
                break;
            case punto :
                caracterTemporal = ( posicion-- >= 0 ? punto : '');
                break;

            default :
                caracterTemporal = ( posicion >= 0 ? caracterMascara : '');
                break;
        }
        numeroFormateado = caracterTemporal + numeroFormateado;
    }

	// retornar el numero ya formateado
    return numeroFormateado;
}

function validaMail(txt){
	
	//expresion regular
    var b=/^[^@\s]+@[^@\.\s]+(\.[^@\.\s]+)+$/
    
    //alert("Email " + (b.test(txt)?"":"no ") + "válido.")
   
    return b.test(txt)
}
