// JavaScript Document
// ----------------------------------------------------------------------
//           FormCheq.js (c) ChaTo [www.chato.cl] 1998
//           basado en FormChek.js (c) Eric Krock 1997 Netscape Corp.
// ----------------------------------------------------------------------
// Rutinas para verificacion de formularios, basado en FormChek.js
// Parte del curso "TEJEDORES DEL WEB" http://www.TejedoresDelWeb.com/
// ---------------------------------------------------------------------- 

var defaultEmptyOK = false
var checkNiceness = true;
var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyzáéíóúñü"
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZÁÉÍÓÚÑ"
var whitespace = " \t\n\r";
var whitespace_y_otros = " \t\n\r.,:;-";
var phoneChars = "()-+abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ";
var mMessage = "Error: no puede dejar este espacio vacio"
var pPrompt = "Error: ";
var pAlphanumeric = "ingrese un texto que contenga solo letras y/o numeros";
var pAlphabetic   = "ingrese un texto que contenga solo letras";
var pInteger = "ingrese un numero entero";
var pNumber = "ingrese un numero";
var pPhoneNumber = "ingrese un número de teléfono";
var pEmail = "ingrese una dirección de correo electrónico válida";
var pName = "ingrese un texto que contenga solo letras, numeros y/o espacios,  puntos, comas ";
var pFecha = "Ingrese una fecha valida";
var pNice = "no puede utilizar comillas aqui";




function Pulsada(DnEvents)
{
K = navigator.appName=="Netscape" ? DnEvents.which : DnEvents.keyCode
if (K==13) // Pulsada ?
Ayuda(); }
if (navigator.appName=="Netscape" && navigator.appVersion.charAt(0)>=4) // Para Netscape
{
document.onkeydown = Pulsada
document.captureEvents(Event.KEYDOWN)
}
function Ayuda()
{
history.go(1);

}




function makeArray(n) {
   for (var i = 1; i <= n; i++) {
      this[i] = 0
   } 
   return this
}

function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}

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 stripCharsInBag (s, bag)
{   var i;
    var returnString = "";

    // Buscar por el string, si el caracter no esta en "bag", 
    // agregarlo a returnString
    
    for (i = 0; i < s.length; i++)
    {   var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }

    return returnString;
}


function stripCharsNotInBag (s, bag)
{   var i;
    var returnString = "";
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (bag.indexOf(c) != -1) returnString += c;
    }

    return returnString;
}


function stripWhitespace (s)
{   return stripCharsInBag (s, whitespace)
}

function charInString (c, s)
{   for (i = 0; i < s.length; i++)
    {   if (s.charAt(i) == c) return true;
    }
    return false
}

function stripInitialWhitespace (s)
{   var i = 0;
    while ((i < s.length) && charInString (s.charAt(i), whitespace))
       i++;
    return s.substring (i, s.length);
}

function isLetter (c)
{
    return( ( uppercaseLetters.indexOf( c ) != -1 ) ||
            ( lowercaseLetters.indexOf( c ) != -1 ) )
}

function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}

function isLetterOrDigit (c)
{   return (isLetter(c) || isDigit(c))
}

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;
}


function isNumber (s)
{   var i;
    var dotAppeared;
    dotAppeared = false;
    if (isEmpty(s)) 
       if (isNumber.arguments.length == 1) return defaultEmptyOK;
       else return (isNumber.arguments[1] == true);
    
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if( i != 0 ) {
            if ( c == "." ) {
                if( !dotAppeared )
                    dotAppeared = true;
                else
                    return false;
            } else     
                if (!isDigit(c)) return false;
        } else { 
            if ( c == "." ) {
                if( !dotAppeared )
                    dotAppeared = true;
                else
                    return false;
            } else     
                if (!isDigit(c) && (c != "-") || (c == "+")) return false;
        }
    }
    return true;
}

function isAlphabetic (s)
{   var i;

    if (isEmpty(s)) 
       if (isAlphabetic.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 (!isLetter(c)) 
        return false;
    }
    return true;
}

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;
}


function isName (s)
{
    if (isEmpty(s)) 
       if (isName.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);
    
    return( isAlphanumeric( stripCharsInBag( s, whitespace_y_otros ) ) );
}

function isTextspace (s)
{
    if (isEmpty(s)) 
       if (isName.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphabetic.arguments[1] == true);
    
    return( isAlphabetic( stripCharsInBag( s, whitespace) ) );
}



function isPhoneNumber (s)
{   var modString;
    if (isEmpty(s)) 
       if (isPhoneNumber.arguments.length == 1) return defaultEmptyOK;
       else return (isPhoneNumber.arguments[1] == true);
    modString = stripCharsInBag( s, phoneChars );
    return (isInteger(modString))
}

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 = 1;
        var sLength = s.length;
        var b = 1;
        while(i<sLength) {
                if( (s.charAt(i) == "\"") || (s.charAt(i) == "'" ) ) b = 0;
                i++;
        }
        return b;
}

function statBar (s)
{   window.status = s
}

function warnEmpty (theField)
{   //theField.focus()
    //alert(mMessage)
    //statBar(mMessage)
    return false
}

function warnInvalid (theField, s)
{   theField.focus()
    theField.select()
    alert(s)
    statBar(pPrompt + s)
    return false
}


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 == isAlphabetic ) msg = pAlphabetic;
        if( theFunction == isAlphanumeric ) msg = pAlphanumeric;
        if( theFunction == isInteger ) msg = pInteger;
        if( theFunction == isNumber ) msg = pNumber;
        if( theFunction == isEmail ) {
			msg = pEmail;
			 
		}
        if( theFunction == isPhoneNumber ) msg = pPhoneNumber;
        if( theFunction == isName ) msg = pName;
        if( theFunction == isFecha ) msg = pFecha;
    }
    
    //if ((emptyOK == true) && (isEmpty(theField.value))) {
     if ((emptyOK == true) && (isEmpty(theField.value))) {
    return true;
	}

    if ((emptyOK == false) && (isEmpty(theField.value))) 
        return warnEmpty(theField);

    if ( checkNiceness && !isNice(theField.value))
        return warnInvalid(theField, pNice);

    if (theFunction(theField.value) == true) 
        return true;
    else
        return warnInvalid(theField,msg);

}




//---------------------------------------------------------
	// 	/*  document.forms.yourformname.yourinputfield.focus(); */
    //   	document.ficha.elements[elemento].focus(); 





/* Valida  la estructura del email*/
function validarEmail(valor) {
  if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(valor)){
    return true;
  } 
  else 
    return false;
}

/*** funciones para quitar espacios ***/
function ltrim ( s )
{
	return s.replace(/^\s*/, "");
}

function rtrim ( s )
{
	return s.replace(/\s*$/, "");
}



function trim ( s )
{
	return rtrim(ltrim(s));
}






/* Función para validar la fecha */
  function validarfecha_nacim(Dia,Mes,Anyo)  {
    var Error = "La fecha introducida es inválida.\n"
      + "Revísela, por favor.";
    var Dia, Mes, Anyo, Dia_Mes_Mal = false;
     if( Dia == ""  || Mes == "" || Anyo == "" ){
	    /*  alert("Debes  capturar la fecha de nacimiento");*/

 	      return false;
		  }
    else {
      Dia = parseInt(Dia);
      Mes = parseInt(Mes);
      Anyo = parseInt(Anyo);

      if( !isNaN(Dia) && !isNaN(Mes) && !isNaN(Anyo)&& Dia >= 1 && Anyo >= 1900)  {
        /* Los meses de Enero, Marzo, Mayo, Julio, Agosto,Octubre y Diciembre tienen 31 días */

        if( 
           (   Mes == 1 || Mes == 3 || Mes == 5 || Mes == 7
            || Mes == 8 || Mes == 10 || Mes == 12
           )
          && Dia > 31
          )   Dia_Mes_Mal = true;
        /* Los meses de Mayo, Junio, Septiembre y Noviembre tienen 30 días */

        if(
           (Mes == 4 || Mes == 6 || Mes == 9 || Mes == 11)&& Dia > 30)   Dia_Mes_Mal = true;
    /* Febrero tiene 28 ó 29 días, dependiendo de si es bisiesto o no. Un año es bisiesto si es 
	múltiplo de 4 pero no de  100 salvo que sea múltiplo de 400. Por ejemplo, 12 y 400
   son bisiestos, pero 100 y 700 no. */

        if( Mes == 2 && 
            ( Dia > 29 ||
              ( Dia == 29 &&
                ( 
                  (Anyo % 400 != 0)
                  && (
                     (Anyo % 4 != 0) || (Anyo % 100 == 0)
                     )
                )
              )
            )
           )  Dia_Mes_Mal = true;

        if(Dia_Mes_Mal)  {
          /*alert(Error);*/
          return false;
          }
        else return true;
        }   /* Si la fecha está fuera del rango razonable... */
      else  {
        /*alert(Error);*/
        return false;
        }
      }
    }




/* Función para validar la fecha */
  function isFecha(Fecha)  {
    var Error = "La fecha introducida es inválida.\n"
      + "Revísela, por favor.";
    var Dia, Mes, Anyo, Dia_Mes_Mal = false;
     Dia   =  Fecha.substring(0,2,3);

     Dia   =  Fecha.substring(0,2);
     Mes  =  Fecha.substring(3,5);   
     Anyo = Fecha.substring(6,10); 


     if( Dia == ""  || Mes == "" || Anyo == "" ){
	    /*  alert("Debes  capturar la fecha de nacimiento");*/

 	      return false;
		  }
    else {
      Dia = parseInt(Dia);
      Mes = parseInt(Mes);
      Anyo = parseInt(Anyo);

      if( !isNaN(Dia) && !isNaN(Mes) && !isNaN(Anyo)&& Dia >= 1 && Anyo >= 1900)  {
        /* Los meses de Enero, Marzo, Mayo, Julio, Agosto,Octubre y Diciembre tienen 31 días */

        if( 
           (   Mes == 1 || Mes == 3 || Mes == 5 || Mes == 7
            || Mes == 8 || Mes == 10 || Mes == 12
           )
          && Dia > 31
          )   Dia_Mes_Mal = true;
        /* Los meses de Mayo, Junio, Septiembre y Noviembre tienen 30 días */

        if(
           (Mes == 4 || Mes == 6 || Mes == 9 || Mes == 11)&& Dia > 30)   Dia_Mes_Mal = true;
    /* Febrero tiene 28 ó 29 días, dependiendo de si es bisiesto o no. Un año es bisiesto si es 
	múltiplo de 4 pero no de  100 salvo que sea múltiplo de 400. Por ejemplo, 12 y 400
   son bisiestos, pero 100 y 700 no. */

        if( Mes == 2 && 
            ( Dia > 29 ||
              ( Dia == 29 &&
                ( 
                  (Anyo % 400 != 0)
                  && (
                     (Anyo % 4 != 0) || (Anyo % 100 == 0)
                     )
                )
              )
            )
           )  Dia_Mes_Mal = true;

        if(Dia_Mes_Mal)  {
          /*alert(Error);*/
          return false;
          }
        else return true;
        }   /* Si la fecha está fuera del rango razonable... */
      else  {
        /*alert(Error);*/
        return false;
        }
      }
    }
