
//
// FUNCIONES DE VALIDACION:
//
// isAlphanumeric (s [,eok])           s tiene solo letras y/o numeros
// isEmail (s [,eok])                  s es una direccion de e-mail
// isUsername (s [,eok])                  s es un username valido
// isNumber (s [,eok])                  s tiene solo numeros

//
// FUNCIONES INTERNAS:
//
// isWhitespace (s)                    s es vacio o solo son espacios
// isLetter (c)                        c es una letra
// isDigit (c)                         c es un digito
// isLetterOrDigit (c)                 c es letra o digito
//
// FUNCIONES PARA PREGUNTARLE AL USUARIO:
//
// warnEmpty (theField, s)             indica que theField esta vacio
// warnInvalid (theField, s)           indica que theField es invalido
//

// PREGUNTA IDIOMA DE LA COOKIE
function GetCookie (name, InCookie) {
	var prop = name + "="; // propiedad buscada
	var plen = prop.length;
	var clen = InCookie.length;
	var i=0;
	if (clen>0) { // Cookie no vacío
		i = InCookie.indexOf(prop,0); // aparición de la propiedad
		if (i!=-1) { // propiedad encontrada
			// Buscamos el valor correspondiente
			j = InCookie.indexOf(";",i+plen);
			if(j!=-1) // valor encontrado
				return unescape(InCookie.substring(i+plen,j));
			else //el último no lleva ";"
				return unescape(InCookie.substring(i+plen,clen));
		}
		else
			return "";
	}
	else
		return "";
}
var idioma=GetCookie("IDIOMA",document.cookie);




// ---------------------------------------------------------------------- //
//                                VARIABLES                               //
// ---------------------------------------------------------------------- //

// Esta variable indica si está bien dejar las casillas
// en blanco como regla general
var defaultEmptyOK = false

// Esta variable indica si se debe verificar la presencia de comillas
// u otros símbolos extraños en un campo, por omisión no, porque
// siempre crea problemas con las bases de datos o programas CGI
var checkNiceness = true;

// listas de caracteres
var digits = "0123456789";
var lowercaseLetters_conacentos = "abcdefghijklmnopqrstuvwxyzáéíóúñü"
var uppercaseLetters_conacnetos = "ABCDEFGHIJKLMNOPQRSTUVWXYZÁÉÍÓÚÑ"
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyz"
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var username_extracaracters = ".-_"
var whitespace = " \t\n\r";

// ---------------------------------------------------------------------- //
//                     TEXTOS PARA LOS MENSAJES                           //
// ---------------------------------------------------------------------- //

// m abrevia "missing" (faltante)
if (idioma=="INGLES"){
    var mMessage = "Error: it cannot make this field empty "
    var pPrompt = "Error";
    var pAlphanumeric = "Can enter only numbers and letters";
    var pUsername = "Can enter only numbers and letters";
    var pInteger = "It must enter whole numbers";
    var pReal = "It must enter a number";
    var pNumber = "It must enter only numbers";
    var pEmail = "Enter a valid email";
    var pNocero = "It must select an option";
    var pNice = "it cannot use strange characters";
    var pBadDate = "No puede consultar más de un mes de registros";
} else
   if (idioma=="PORTUGUES"){
     var mMessage = "Error: não pode deixar vazio este campo"
     var pPrompt = "Error";
     var pAlphanumeric = "Pode incorporar somente números e letras";
     var pUsername = "Pode incorporar somente números e letras";
     var pInteger = "Deve incorporar números inteiros";
     var pReal = "Deve incorporar somente números";
     var pNumber = "Deve incorporar somente números";
     var pEmail = "incorpora um email válido";
     var pNocero = "Deve selecionar uma opção";
     var pNice = "Não pode usar caráteres estranhos";
     var pBadDate = "No puede consultar más de un mes de registros";
   } else {
     var mMessage = "Error: no puede dejar vacio este campo"
     var pPrompt = "Error";
     var pAlphanumeric = "Puede ingresar solo letras y numeros";
     var pUsername = "Puede ingresar solo letras y numeros";
     var pInteger = "Debe ingresar solo numeros enteros";
     var pReal = "Debe ingresar sólo numeros";
     var pNumber = "Debe ingresar solo numeros";
     var pEmail = "Ingrese un e-mail valido";
     var pNocero = "Debe seleccionar una opcion";
     var pNice = "No puede utilizar caracteres extra~nos";
     var pBadDate = "No puede consultar mas de un mes de registros";
   }


// ---------------------------------------------------------------------- //
//                FUNCIONES PARA MANEJO DE ARREGLOS                       //
// ---------------------------------------------------------------------- //

// JavaScript 1.0 (Netscape 2.0) no tenia un constructor para arreglos,
// asi que ellos tenian que ser hechos a mano. Desde JavaScript 1.1 
// (Netscape 3.0) en adelante, las funciones de manejo de arreglos no
// son necesarias.

function makeArray(n) {
//*** BUG: If I put this line in, I get two error messages:
//(1) Window.length can't be set by assignment
//(2) daysInMonth has no property indexed by 4
//If I leave it out, the code works fine.
//   this.length = n;
   for (var i = 1; i <= n; i++) {
      this[i] = 0
   } 
   return this
}

// ---------------------------------------------------------------------- //
//                  CODIGO PARA FUNCIONES BASICAS                         //
// ---------------------------------------------------------------------- //


// s es vacio
function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}

// s es vacio o solo caracteres de espacio
function isWhitespace (s)
{   var i;
    if (isEmpty(s)) return true;
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        // si el caracter en que estoy no aparece en whitespace,
        // entonces retornar falso
        if (whitespace.indexOf(c) == -1) return false;
    }
    return true;
}

function charInString (c, s)
{   for (i = 0; i < s.length; i++)
    {   if (s.charAt(i) == c) return true;
    }
    return false
}

// Quita todos los espacios que antecedan al string
function stripInitialWhitespace (s)
{ 
	  var i = 0;
    while ((i < s.length) && charInString (s.charAt(i), whitespace))
       i++;
    return s.substring (i, s.length);
}


// c es una letra del alfabeto espanol
function isLetter (c)
{
    return( ( uppercaseLetters.indexOf( c ) != -1 ) ||
            ( lowercaseLetters.indexOf( c ) != -1 ) )
}

// c es un digito
function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}

// c es letra o digito
function isLetterOrDigit (c)
{   return (isLetter(c) || isDigit(c))
}

// ---------------------------------------------------------------------- //
//                          FUNCIONES                                     //
// ---------------------------------------------------------------------- //

// s es un numero entero (con o sin signo)
function isInteger (s)
{   var i;
    if (isEmpty(s)) 
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);
    
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if( i != 0 ) {
            if (!isDigit(c)) return false;
        } else { 
            if (!isDigit(c) && (c != "-") || (c == "+")) return false;
        }
    }
    return true;
}

// s es un numero real
function isReal (s)
{   var i;
    var punto;
    punto=0;
    if (isEmpty(s)) 
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);
    
   var punto_array=s.split(".");
   if ( punto_array.length > 2)
     return false;
 
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        // if ( c == "." ) { punto=1; continue; }
        if (!isDigit(c) && (c != ".") ) return false;
    }
    return true;
}

// s tiene solo numeros (Se usa para telefonos)
function isNumber (s)
{   var i;

    if (isEmpty(s)) 
       if (isNumero.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphabetic.arguments[1] == true);
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is letter.
        var c = s.charAt(i);

        if (!isDigit(c))
        return false;
    }
    return true;
}



// s tiene solo letras y numeros
function isNocero (s)
{ 
    if (isEmpty(s)) 
       if (isNocero.arguments.length == 1) return defaultEmptyOK;
       else return (isNocero.arguments[1] == true);
if (s.length>=2) return true;
        var c = s.charAt(0);
     if (c == "0") return false;
     return true;
}

// s tiene solo letras y numeros
function isAlphanumeric (s)
{   var i;

    if (isEmpty(s)) 
       if (isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);

    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (! (isLetter(c) || isDigit(c) ) )
        return false;
    }

    return true;
}

// s tiene solo letras ,numeros y guiones
function isCodigo (s)
{   var i;

    if (isEmpty(s)) 
       if (isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);

    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (! (isLetter(c) || isDigit(c) || c == '-' ) )
        return false;
    }

    return true;
}


// s tiene solo letras y numeros
function isUsername (s)
{   var i;

    if (isEmpty(s)) 
       if (isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);

    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (! (isLetter(c) || isDigit(c) || username_extracaracters.indexOf( c ) != -1 ) )
        return false;
    }

    return true;
}

// s es una direccion de correo valida
function isEmail (s)
{
    if (isEmpty(s)) 
       if (isEmail.arguments.length == 1) return defaultEmptyOK;
       else return (isEmail.arguments[1] == true);
    if (isWhitespace(s)) return false;
    var i = 1;
    var sLength = s.length;
    while ((i < sLength) && (s.charAt(i) != "@"))
    { i++
    }

    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;

    while ((i < sLength) && (s.charAt(i) != "."))
    { i++
    }

    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}

function isNice(s)
{
        var i = 0;
        var sLength = s.length;
        var b = 1;
        while(i<sLength) {
                if( (s.charAt(i) == "\"") || (s.charAt(i) == "'" ) || (s.charAt(i) == "&") || (s.charAt(i) == "`")) b = 0;
                i++;
        }
        return b;
}

// ---------------------------------------------------------------------- //
//                  FUNCIONES PARA RECLAMARLE AL USUARIO                  //
// ---------------------------------------------------------------------- //

// notificar que el campo theField esta vacio
function warnEmpty (theField)
{   theField.focus()
    alert(mMessage)
    return false
}

// notificar que el campo theField es invalido
function warnInvalid (theField, s)
{   theField.focus()
    theField.select()
    alert(s)
    return false
}

// notificar que el campo theField es invalido
function warnInvalid2 (theField, s)
{   theField.focus()
    alert(s)
    return false
}

// el corazon de todo: checkField
function checkField (theField, theFunction, emptyOK, s)
{   
    var msg;
    if (checkField.arguments.length < 3) emptyOK = defaultEmptyOK;
    if (checkField.arguments.length == 4) {
        msg = s;
    } else {
        if( theFunction == isAlphanumeric ) msg = pAlphanumeric;
        if( theFunction == isUsername ) msg = pUsername;
        if( theFunction == isInteger ) msg = pInteger;
        if( theFunction == isReal ) msg = pReal;
        if( theFunction == isNumber ) msg = pNumber;
        if( theFunction == isEmail ) msg = pEmail;
        if( theFunction == isNocero ) msg = pNocero;
    }
    
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if ((emptyOK == false) && (isEmpty(stripInitialWhitespace(theField.value))))
	     return warnEmpty(theField);
		

		if ( theFunction != isNocero ) {
		    if ( checkNiceness && !isNice(theField.value))
		        return warnInvalid(theField, pNice);
		
		    if (theFunction(theField.value) == true) 
		        return true;
		    else
		        return warnInvalid(theField,msg);
		    }
    else {
		    if ( checkNiceness && !isNice(theField.value))
		        return warnInvalid2(theField, pNice);
		
		    if (theFunction(theField.value) == true) 
		        return true;
		    else
		        return warnInvalid2(theField,msg);
    }

}

  function VerificaRangoFechas(obj1,obj2,obj3,obj4,obj5,obj6){
    var fecha1 = new Date(obj3.value, obj2.value, obj1.value,0,0,0,0);
    var fecha2 = new Date(obj6.value, obj5.value, obj4.value,23,59,59,999);
    var c = fecha2.getTime() - fecha1.getTime();
    if ( c <= 2678399999 && c>= 0){
      return true;
    }
    else {
    	alert (pBadDate);
    	return false;
    }
  }
