﻿// FUNCIONES UTILITARIAS EN JAVASCRIPT 

// Función para eliminar un registro de los catalogos
function  Eliminar(formName,id, mensaje) {
    if(confirm(mensaje)) {
	    document.forms[formName].hdfKey.value=id;
		document.forms[formName].submit();
	}
}
// Función para ver un item de los datagrid
function  VerItem(frmNombre,CodItem) {
    document.forms[frmNombre].hdfVer.value=CodItem;
	document.forms[frmNombre].submit();
}
// Función para editar un item de los datagrid
function  EditarItem(frmNombre,CodItem) {
    document.forms[frmNombre].hdfEditar.value=CodItem;
	document.forms[frmNombre].submit();
}
// Función para borrar un item de los datagrid
function  BorrarItem(frmNombre,CodItem,Mensaje) {
    if(confirm(Mensaje)) {
	    document.forms[frmNombre].hdfBorrar.value=CodItem;
		document.forms[frmNombre].submit();
	}
}
// Función para validar que los caracteres ingresados en un input
// sean sólo números.
function SoloNumeros(e) 
{ 
tecla = (document.all)?e.keyCode:e.which; 
if (tecla==8) return true; 
patron = /[1234567890]/;
te = String.fromCharCode(tecla); 
return patron.test(te);
}
// Función para validar que los caracteres ingresados en un input 
// sean números y puntos.
function NumerosDecimales(e) 
{ 
tecla = (document.all)?e.keyCode:e.which; 
if (tecla==8) return true; 
patron = /[1234567890.]/;
te = String.fromCharCode(tecla); 
return patron.test(te);
}
// Función para validar que los caracteres ingresados en un input 
// sean sólo números positivos.
function SoloPositivos(CampoForm)
{
 if (CampoForm.value <=0)
	{
 		alert('El valor del campo debe ser mayor que cero !!!');
 		CampoForm.value="";
 		CampoForm.focus();
 		return false;
 	}
}
// Función para validar que los caracteres ingresados en un input
// sean sólo números y comas
function SoloNumerosyComa(e) 
{ 
tecla = (document.all)?e.keyCode:e.which; 
if (tecla==8 || tecla==44) return true; 
patron = /[1234567890]/;
te = String.fromCharCode(tecla); 
return patron.test(te);
}

// Función para validar que los caracteres ingresados en un input
// sean sólo números y guiones
function SoloNumLetyGuion(e) 
{ 
tecla = (document.all)?e.keyCode:e.which; 
if (tecla==8 || tecla==45) return true; 
patron = /[1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]/;
te = String.fromCharCode(tecla); 
return patron.test(te);
}

// Función para validar que los caracteres ingresados en un input
// sean sólo letras y espacio en blanco
function SoloLetrasyEspacio(e) 
{ 
tecla = (document.all)?e.keyCode:e.which; 
if (tecla==8 || tecla==32) return true; 
patron = /[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]/;
te = String.fromCharCode(tecla); 
return patron.test(te);
}

// Funciones para validar el formato de las fechas
// Formato Europeo: (dd/mm/yyyy)
function EW_checkeurodate(source, args)
    {
    var object_value = args.Value;
    if (args.Value.length == 0){
        args.IsValid =  true;
		return true;
    }

	var isplit = object_value.indexOf('/');

	if (isplit == -1)
	{
		isplit = object_value.indexOf('.');
	}

	if (isplit == -1 || isplit == args.Value.length){
		args.IsValid =  false;
		return false;
	}
    var sDay = object_value.substring(0, isplit);

	var monthSplit = isplit + 1;

	isplit = object_value.indexOf('/', monthSplit);

	if (isplit == -1)
	{
		isplit = object_value.indexOf('.', monthSplit);
	}

	if (isplit == -1 ||  (isplit + 1 )  == args.Value.length){
		args.IsValid =  false;
		return false;
	}
    var sMonth = object_value.substring((sDay.length + 1), isplit);

	var sYear = object_value.substring(isplit + 1);

	if (!EW_checkint(sMonth)) {
		args.IsValid =  false;
		return false;
	}
	else
	if (!EW_numberrange(sMonth, 1, 12)) {
		args.IsValid =  false;
		return false;
	}
	else
	if (!EW_checkint(sYear)) {
		args.IsValid =  false;
		return false;
	}
	else
	if (!EW_numberrange(sYear, 0, null)) {
		args.IsValid =  false;
		return false;
	}
	else
	if (!EW_checkint(sDay)) {
		args.IsValid =  false;
		return false;
	}
	else
	if (!EW_checkday(sYear, sMonth, sDay)) {
		args.IsValid =  false;
		return false;
	}
	else{
		args.IsValid =  true;
		return true;
	}
    }

function EW_checkday(checkYear, checkMonth, checkDay)
    {

	var maxDay = 31;

	if (checkMonth == 4 || checkMonth == 6 ||
			checkMonth == 9 || checkMonth == 11)
		maxDay = 30;
	else
	if (checkMonth == 2)
	{
		if (checkYear % 4 > 0)
			maxDay =28;
		else
		if (checkYear % 100 == 0 && checkYear % 400 > 0)
			maxDay = 28;
		else
			maxDay = 29;
	}

	return EW_numberrange(checkDay, 1, maxDay); 
    }

function EW_checkinteger(src, args)
	{
	args.IsValid = EW_checkint(args.Value);
	}


function EW_checkint(object_value)
    {
    if (object_value.length == 0)
        return true;
	
	var decimal_format = ".";
	var check_char;

	check_char = object_value.indexOf(decimal_format)
    if (check_char < 1)
	return EW_checknum(object_value);
    else
	return false;
    }

function EW_numberrange(object_value, min_value, max_value)
    {
    if (min_value != null)
	{
        if (object_value < min_value)
		return false;
	}

    if (max_value != null)
	{
	if (object_value > max_value)
		return false;
	}
	
    return true;
    }

function EW_checknumber(src,args)
    {
    if (args.Value.length == 0) {
        args.IsValid = true;
        return true;
        }

	var start_format = " .+-0123456789";
	var number_format = " .0123456789";
	var check_char;
	var decimal = false;
	var trailing_blank = false;
	var digits = false;
	var object_value = args.Value;
	check_char = start_format.indexOf(object_value.charAt(0))
	if (check_char == 1)
	    decimal = true;
	else if (check_char < 1) {
		args.IsValid = false;
		return false;
	}
        
	for (var i = 1; i < args.Value.length; i++)
	{
		check_char = number_format.indexOf(object_value.charAt(i))
		if (check_char < 0) {
			args.IsValid = false;
			return false;
		}
		else if (check_char == 1)
		{
			if (decimal) {
				args.IsValid = false;
				return false;
			}
			else
				decimal = true;
		}
		else if (check_char == 0)
		{
			if (decimal || digits)	
				trailing_blank = true;
		}
	    else if (trailing_blank) {
    		args.IsValid = false;
			return false;
		}
		else
			digits = true;
	}	

    args.IsValid = true;
    return true;
    }
    
function EW_checknum(object_value)
    {
    if (object_value.length == 0) {
        return true;
        }

	var start_format = " .+-0123456789";
	var number_format = " .0123456789";
	var check_char;
	var decimal = false;
	var trailing_blank = false;
	var digits = false;
	
	check_char = start_format.indexOf(object_value.charAt(0))
	if (check_char == 1)
	    decimal = true;
	else if (check_char < 1) {
		return false;
	}
        
	for (var i = 1; i < object_value.length; i++)
	{
		check_char = number_format.indexOf(object_value.charAt(i))
		if (check_char < 0) {
			return false;
		}
		else if (check_char == 1)
		{
			if (decimal) {
				return false;
			}
			else
				decimal = true;
		}
		else if (check_char == 0)
		{
			if (decimal || digits)	
				trailing_blank = true;
		}
	    else if (trailing_blank) {
			return false;
		}
		else
			digits = true;
	}	

    return true;
    }
    
// Función para ver un registro pasando dos parámetros
function  VerItemDosParametros(formName,id, codigo) {
	    document.forms[formName].hdfEditar.value=id;
	    document.forms[formName].hdfCodigoSolicitud.value=codigo;
		document.forms[formName].submit();
}

// Función para eliminar un registro pasando dos parámetros
function  EliminarDosParametros(formName,id, codigo,mensaje) {
    if(confirm(mensaje)) {
	    document.forms[formName].hdfKey.value=id;
	    document.forms[formName].hdfCodigoSolicitud.value=codigo;
		document.forms[formName].submit();
	}
}

// Función para recuperar el objeto que hace referencia al control en el formulario
function RetornarObjControl(nombre, frm){
    for(var i = 0; i < frm.length; i++) {
        var ele = frm.elements[i];    
        
        if (ele.id.indexOf(nombre) != -1) {
            return ele;
        }	              
    }
    return null;
}

// Funcion para convertir fecha al formato dd/mm/aaaa,retornando la fecha
function FormatearFecha(FechaTmp){
   var strdia_mes = ""; 
   var strmes  = ""; 
   var dia_mes = FechaTmp.getDate(); 		        //dia del mes
   if (dia_mes <= 9)
      strdia_mes = "0" + dia_mes 
   else
      strdia_mes = dia_mes
                      
   var mes = FechaTmp.getMonth() + 1;          //Mes
   if (mes <= 9)
      strmes =  "0" + mes
   else
      strmes = mes
                        
   var anio = FechaTmp.getYear();              //Año
      if (anio < 100) anio = "19" + anio			//pasa el año a 4 digitos
      else if ( ( anio > 100 ) && ( anio < 999 ) ) {	//efecto 2000
             var cadena_anio = new String(anio);
             anio = "20" + cadena_anio.substring(1,3);
      }
   return strdia_mes + "/" + strmes + "/" + anio;
}

// Funcion para agregar numero de dias a una fecha, retornando la nueva fecha.
function AgregarDiasaFecha(FechaIni,numDia){
      return addToDate(FechaIni, numDia); 
}

 function addToDate(sFec0, sInc){ 
   var nInc = Math.abs(parseInt(sInc)); 
   var sRes = sFec0; 
   if (parseInt(sInc) >= 0) 
    for (var i = 0; i < nInc; i++) sRes = incDate(sRes); 
   else 
    for (var i = 0; i < nInc; i++) sRes = decDate(sRes); 
   return sRes; 
  } 

 function incDate(sFec0){ 
   var nDia = parseInt(sFec0.substr(0, 2), 10); 
   var nMes = parseInt(sFec0.substr(3, 2), 10); 
   var nAno = parseInt(sFec0.substr(6, 4), 10); 
   nDia += 1; 
   if (nDia > finMes(nMes, nAno)){ 
    nDia = 1; 
    nMes += 1; 
    if (nMes == 13){ 
     nMes = 1; 
     nAno += 1; 
    } 
   } 
   return makeDateFormat(nDia, nMes, nAno); 
  } 
  
  function decDate(sFec0){ 
   var nDia = Number(sFec0.substr(0, 2)); 
   var nMes = Number(sFec0.substr(3, 2)); 
   var nAno = Number(sFec0.substr(6, 4)); 
   nDia -= 1; 
   if (nDia == 0){ 
    nMes -= 1; 
    if (nMes == 0){ 
     nMes = 12; 
     nAno -= 1; 
    } 
    nDia = finMes(nMes, nAno); 
   } 
   return makeDateFormat(nDia, nMes, nAno); 
  } 
  
  function finMes(nMes, nAno){ 
     var aFinMes = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); 
    return aFinMes[nMes - 1] + (((nMes == 2) && (nAno % 4) == 0)? 1: 0); 
  } 

  function makeDateFormat(nDay, nMonth, nYear){ 
    var sRes; 
    sRes = padNmb(nDay, 2, "0") + "/" + padNmb(nMonth, 2, "0") + "/" + padNmb(nYear, 4, "0"); 
    return sRes; 
   } 
  
   function padNmb(nStr, nLen, sChr){ 
    var sRes = String(nStr); 
    for (var i = 0; i < nLen - String(nStr).length; i++) 
     sRes = sChr + sRes; 
    return sRes; 
   }   
  
   // Función para validar que la fecha de inicio sea menor a la fecha final
   // Formato para las fechas dd/mm/yyyy   
   function validarFechasInicioFinal(fechaIni,fechaFin){
    var cad1 = fechaIni.split('/');
    var cad2 = fechaFin.split('/');           
    
    var numFecInicio = cad1[2] + cad1[1] + cad1[0];
    var numFecFinal = cad2[2] + cad2[1] + cad2[0];
    
    if (parseInt(numFecInicio) >= parseInt(numFecFinal)){
        return false;
    }
    return true;
   }

   //Función para verificar si una cantidad digitada es cero
    function verificarCantidadCero(cantidad){        
        var contador = 0;
        
        // Verificar si tiene más de un punto decimal.
        // En javascript, la cadena 0.0.0.00 se convierte
        // en cero para un entero, pero para nuestro 
        // caso es un número inválido y se retorna false.
        for(var i=0;i<cantidad.length;i++){
            if (cantidad.substring(i,i+1) == '.'){
                contador++;
                if (contador > 1){return false;}
            }
        }
        
        // Trata de convertir la cantidad a entero
        var numero = parseInt(cantidad);
        if (!isNaN(numero)){ // Si es un número válido
            // Si es cero, retorna true.
            if (numero == 0){return true;}
        }
        
        // En los demás casos retorna false.
        return false;
    }
  
    //Funcion para validar un numero entero positivo
    function validarEntero(valor){ 
        //intento convertir a entero. 
        //si era un entero no le afecta, si no lo era lo intenta convertir 
        valor = parseInt(valor) 

        //Compruebo si es un valor numérico 
        if (isNaN(valor)) { 
             //entonces (no es numero) devuelvo el valor cadena vacia 
             return false 
        }else if (valor > 0) {
            //En caso contrario (Si era un número) devuelvo el valor 
            return true 
        } 
        else 
            return false  
    } 
 
 

