// ***********************************************************
// *       FUNCIONES PARA LA VALIDACION DE FORMULARIOS       *
// ***********************************************************

// *****************************************************
// * Funciones Generales para el manejo de formularios *
// *****************************************************

function handleEnter(field, event)
{
	var keyCode = document.all ? event.keyCode : event.which;
    if (keyCode == 13)
	{
    	var i;
		for (i = 0; i < field.form.elements.length; i++)  if (field == field.form.elements[i]) break;
	    i = (i + 1) % field.form.elements.length;
    	field.form.elements[i].focus();
      	return false;
    }
    else
	return true;
}


// *************************************
// * Funciones Generales de Validación *
// *************************************

// Validación numérica 
function val_num(str_num)
{
	var checkOK = "0123456789"; 
	var checkStr = str_num; //formulario.edad.value; 
	var swValid = true; 
	var decPoints = 0; 
	var allNum = ""; 
	for (i = 0; i < checkStr.length; i++)
	{ 
		ch = checkStr.charAt(i); 
		for (j = 0; j < checkOK.length; j++)  if (ch == checkOK.charAt(j)) break; 
		if (j == checkOK.length)
		{	swValid = false; 
			break; 
		} 
		allNum += ch; 
	} 
	return(swValid);
}


// Validar números dado un intervalo
function val_rango_num(str_num, n_min, n_max)
{
	var chkVal = str_num; 
	var prsVal = parseFloat(str_num); 
	var sw_valid = true;
	
	if (chkVal == "") sw_valid = false;
	
	if (sw_valid)
	{
		if (chkVal != "" && !(prsVal >= n_min && prsVal <= n_max)) sw_valid = false;
	}
	
	return (sw_valid);
}


// *********************************
//   FUNCIONES PARA VALIDAR FECHAS
// *********************************
     
// Funcion para comprobar si un año es bisiesto
// argumento anyo > año extraido de la fecha introducida por el usuario
function anyoBisiesto(anyo)
{   // si el año introducido es de dos cifras lo pasamos al periodo de 1900. Ejemplo: 25 > 1925
	if (anyo < 100)  var fin = anyo + 1900;
	else var fin = anyo ;
	// primera condicion: si el resto de dividir el año entre 4 no es cero > el año no es bisiesto
    // es decir, obtenemos año modulo 4, teniendo que cumplirse anyo mod(4)=0 para bisiesto
	if (fin % 4 != 0)  return false;
	else
	{   if (fin % 100 == 0)
		{
        	// si el año es divisible por 4 y por 100 y divisible por 400 > es bisiesto
			if (fin % 400 == 0)  return (true); 
            // si es divisible por 4 y por 100 pero no lo es por 400 > no es bisiesto
            else return (false);
		}
			// si es divisible por 4 y no es divisible por 100 > el año es bisiesto
			else return (true);
    }
}
    
// funcion principal de validacion de la fecha
// argumento str_fecha > cadena de texto de la fecha introducida por el usuario
function validar_fecha(str_fecha)
{	var a, mes, dia, anyo, febrero;
	// obtenemos la fecha introducida y la separamos en dia, mes y año
	a = str_fecha;
	dia=a.split("/")[0];
	mes=a.split("/")[1];
	anyo=a.split("/")[2];
	if( (isNaN(dia)==true) || (isNaN(mes)==true) || (isNaN(anyo)==true) )
	{	alert("La fecha introducida debe estar en formato dd/mm/aaaa  solo números");
        return (false);
	}
	
	if(anyoBisiesto(anyo))  febrero=29;
	else febrero=28;
    // si el mes introducido es negativo, 0 o mayor que 12 > alertamos y detenemos ejecucion
    if ((mes<1) || (mes>12))
    {   alert("El mes introducido no es valido. Por favor, introduzca un mes correcto");
        return(false);
    }
    // si el mes introducido es febrero y el dia es mayor que el correspondiente 
    // al año introducido > alertamos y detenemos ejecucion
    if ((mes==2) && ((dia<1) || (dia>febrero)))
    {   alert("El dia introducido no es valido. Por favor, introduzca un dia correcto");
        return(false);
    }
	// si el mes introducido es de 31 dias y el dia introducido es mayor de 31 > alertamos y detenemos ejecucion
    if (((mes==1) || (mes==3) || (mes==5) || (mes==7) || (mes==8) || (mes==10) || (mes==12)) && ((dia<1) || (dia>31)))
    {   alert("El dia introducido no es valido. Por favor, introduzca un dia correcto");
        return (false);
    }
    // si el mes introducido es de 30 dias y el dia introducido es mayor de 30 > alertamos y detenemos ejecucion
    if (((mes==4) || (mes==6) || (mes==9) || (mes==11)) && ((dia<1) || (dia>30)))
    {  alert("El dia introducido no es valido. Por favor, introduzca un dia correcto");
       return (false);
    }
    // si el  año introducido es menor que 1900 o mayor que 2010 > alertamos y detenemos ejecucion
    // NOTA: estos valores son a eleccion vuestra, y no constituyen por si solos fecha erronea
    if ((anyo<1900) || (anyo>2009))
    {   alert("El año introducido no es valido. Por favor, introduzca un año entre 1900 y 2030");
		return (false);
    } 
    // en caso de que todo sea correcto > enviamos los datos del formulario
    // para ello debes descomentar la ultima sentencia
    else
	{  // La fecha introducida es correcta
	   return (true);
	}
}    


// **************************************************
// Reemplazar Caracteres de la cadena entry, c por r
// **************************************************
function replaceChars(entry,c,r)
{
	out = c; // reemplazar la letra c
	add = r; // por la letra r
	temp = "" + entry;

	while (temp.indexOf(out)>-1)
	{   pos= temp.indexOf(out);
		temp = "" + (temp.substring(0, pos) + add + 
		temp.substring((pos + out.length), temp.length));
	}	
    return(temp); 
}

// ******************************************************************
// Función para elimiar caracteres en blaco de la izquierda
// ******************************************************************
function TrimLeft( str )
{	var resultStr = "";
	var i = len = 0;
	// Return immediately if an invalid value was passed in
	if (str+"" == "undefined" || str == null)	
	return null;
	// Make sure the argument is a string
	str += "";
	if (str.length == 0) resultStr = "";
	else
	{	
  		// Loop through string starting at the beginning as long as there
  		// are spaces.
		//	  	len = str.length - 1;
		len = str.length;
  		while ((i <= len) && (str.charAt(i) == " ")) i++;
		// When the loop is done, we're sitting at the first non-space char,
		// so return that char plus the remaining chars of the string.
 		resultStr = str.substring(i, len);
  	}
  	return (resultStr);
}

// *******************************************************
// Función para elimiar caracteres en blaco de la derecha
// *******************************************************
function TrimRight( str )
{
	var resultStr = "";
	var i = 0;

	// Return immediately if an invalid value was passed in
	if (str+"" == "undefined" || str == null)	
		return null;

	// Make sure the argument is a string
	str += "";
	
	if (str.length == 0) 
		resultStr = "";
	else
	{
  		// Loop through string starting at the end as long as there
  		// are spaces.
  		i = str.length - 1;
  		while ((i >= 0) && (str.charAt(i) == " "))	i--;
 			
 		// When the loop is done, we're sitting at the last non-space char,
 		// so return that char plus all previous chars of the string.
  		resultStr = str.substring(0, i + 1);
  	}
  	
  	return (resultStr);  	
}

function Trim(str)
{
	var resultStr = "";

	resultStr = TrimLeft(str);
	resultStr = TrimRight(resultStr);
	
  	return (resultStr);  	
}

function devuelve_fecha(fecha)
{
	fecha = fecha.replace(/[-]/g, "/");
	fecha = new Date(fecha);
	return fecha
}

function comp_fechas(fecha1, fecha2)
{
	var fec1 = devuelve_fecha(fecha1);
	var fec2 = devuelve_fecha(fecha2);

	if(fec1 < fec2) return -1;
	
	if(fec1 = fec2) return 0;
	if(fec1 > fec2) return 1;



}

// --------------------------------------------------------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------------------------------------------------------
// <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
// FUNCIONES ESPECIFICAS PARA VALIDAR CAMPOS DE LOS FORMULARIOS
// <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
//
// ***************************************************************
// Validación del formulario (SIGNOS DISTINTIVOS) Consulta por SM 
// ***************************************************************
function valid_cons_sm(formulario)
{   
	// numero SM
	if(!val_num(formulario.txt_nrosm.value))
	{
		alert("Error: " + formulario.txt_nrosm.value + "\n" + "Ingrese solamente números en \"SM\".");
	    formulario.txt_nrosm.focus(); 
		return (false);
	}
	
	// intervalo en numero SM
    if(!val_rango_num(formulario.txt_nrosm.value,1,99999))
	{
	    alert("Error: " + formulario.txt_nrosm.value + "\n" + "El número de solicitud no es Válido");		
		formulario.txt_nrosm.focus();
		return (false);
	}
	
	// gestión SM
	if(!val_num(formulario.txt_gessm.value))
	{
		alert("Error: " + formulario.txt_gessm.value + "\n" + "Ingrese solamente números en \"SM\".");
	    formulario.txt_gessm.focus();
		return (false);
	}
	
	// intervalo de la Gestion
	fecha_actual = new Date(); 
	gestion_actual = fecha_actual.getFullYear(); 

	if(!val_rango_num(formulario.txt_gessm.value,1900,gestion_actual))
	{
	    alert("Error: " + formulario.txt_gessm.value + "\n" + "Gestión incorrecta, intervalo válido 1900 - " + gestion_actual);		
		formulario.txt_gessm.focus();
		return (false);
	}

	return (true);
}

// *************************************************************************************
// Validación del campo criterio de Busqueda del Formulario Busqueda de Marcas y clases
// *************************************************************************************
function val_CritBus(str_value)
{   var cad_val;
    cad_val = str_value;
	cad_val = TrimLeft(cad_val);
	cad_val = TrimRight(cad_val);
	cad_val = replaceChars(cad_val,"'","%");
	document.form_busmarclas.txt_critbus.value = cad_val;
	return;
}

// ****************************************************
// Validación del formulario Busqueda de Marca y Clase
// ****************************************************
function val_form_mar_clas(formulario)
{   
	// verificar que solo se ingresen números
	if(!val_num(formulario.txt_clase.value))
	{
		alert("Escriba sólo números en el campo \"Clase\".");
	    formulario.txt_clase.focus(); 
		return (false);
	}
	// Verificar que el valor de la clase sea entre 0 y 45 según la clasificación internacional
	if(!val_rango_num(formulario.txt_clase.value,0,45))
	{
	    alert("Si desea especificar la clase debe estar en el intervalo de 0 a 45");		
		formulario.txt_clase.focus();
		return (false);
	}
	return(true);	
}

// *********************************************
// Validación del formulario Solicitud de Marca
// *********************************************
function val_form_solic_mar(formulario)
{   
	// Validar los campos prioridad extranjera
	if(formulario.txt_nroprio.value != "")
	{
		if(!validar_fecha(formulario.txt_fechaprio.value))
		{
			formulario.txt_fechaprio.focus(); 
			return (false);
		}
	}
	return (true);
}

// <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
// ************************************************************************************
//     Funciones de Validación para formularios de Consulta de Patentes de Invención
// ************************************************************************************
// <><><> Validar Formulario Consulta por SP
function valid_cons_sp(formulario)
{   
	// numero SP
	if(!val_num(formulario.txt_nrosp.value))
	{
		alert("Escriba sólo números en la casilla número (SP)");
	    formulario.txt_nrosp.focus(); 
		return (false);
	}
	
	// intervalo del numero SP
    if(!val_rango_num(formulario.txt_nrosp.value,1,999999))
	{
	    alert("El número de Solicitud de Patente no es Válido");		
		formulario.txt_nrosp.focus();
		return (false);
	}
	// gestion SP
	if(!val_num(formulario.txt_gessp.value))
	{
		alert("Escriba sólo números en la casilla gestion (SP)");
	    formulario.txt_gessp.focus(); 
		return (false);
	}

    // intervalo de la Gestion
	fecha_actual = new Date(); 
	gestion_actual = fecha_actual.getFullYear(); 

	if(!val_rango_num(formulario.txt_gessp.value,1900,gestion_actual))
	{
	    alert("El dato de la gestión está fuera del intervalo 1900 - " + gestion_actual + " (" + formulario.txt_gessp.value + ")");		
		formulario.txt_gessp.focus();
		return (false);
	}
	
	return (true);
}

// <><><> Validar Formulario Busqueda individualizada
function valid_cons_bus_ind(formulario)
{  

	replaceChars(formulario.txt_crit_bus.value,"'","%");
	return (true);
}

function valid_cons_registrab(formulario)
{
		var fecha = formulario.txt_fecha.value
		if(!validar_fecha(fecha))
		{
		   	formulario.txt_fecha.focus(); 
			return (false);
		}
	return (true);	
}








