// ---------------------------------------------------------------------- //
//           FormCheq.js (c) ChaTo 1998,1999 [www.chato.cl]
//                           Basado en:
//           FormChek.js (c) Eric Krock (c) 1997 Netscape              
// ---------------------------------------------------------------------- //
// 18 Feb 97 creado por Eric Krock (c) 1997
//   Netscape Communications Corporation
// 18 Ago 98 modificado por Carlos Castillo (c) 1998 ChaTo
//   Los principales cambios son: esta version es simplificada, para
//   propositos de ensennanza y validacion basica de formularios, y esta
//   adaptada para recibir caracteres del alfabeto espannol (acentos, etc.)
// 20 Oct 99 modificado por Carlos Castillo (c) 1999 ChaTo
//   Se agrega la funcion isNice que ayuda a evitar comillas simples
//   o dobles que causan problemas con muchos CGIs
// 
// ---------------------------------------------------------------------- //
//                             RESUMEN                                    //
// ---------------------------------------------------------------------- //
// 
// El objetivo de las siguientes funciones en JavaScript es
// validar los ingresos del usuario en un formulario antes
// de que estos datos vayan al servidor.
//
// Varias de ellas toman un parametro opcional E.O.K (eok) (emptyOK
// - true si se acepta que el valor este vacio, false si no
// se acepta). El valor por omision es el que indique la
// variable global defaultEmptyOK definida mas abajo.
//
// ---------------------------------------------------------------------- //
//                      SINTAXIS DE LAS FUNCIONES                         //
// ---------------------------------------------------------------------- //
//
// FUNCION PARA CHEQUEAR UN CAMPO DE INGRESO:
//
// checkField (theField, theFunction, [, s] [,eok])
//        verifica que el campo de ingreso theField cumpla con la
//        condicion indicada en la funcion theFunction (que puede ser
//        una de las descritas en "FUNCIONES DE VALIDACION" o cualquier
//        otra provista por el usuario). En caso contrario despliega el
//        string "s" (opcional, hay mensajes por default para las
//        funciones de validacion provistas aqui).
//
// FUNCIONES DE VALIDACION:
//
// isInteger (s [,eok])                s representa un entero
// isNumber (s [,eok])                 s es entero o tiene punto decimal
// isAlphabetic (s [,eok])             s tiene solo letras
// isAlphanumeric (s [,eok])           s tiene solo letras y/o numeros
// isPhoneNumber (s [,eok])            s tiene solo numeros, (,),-
// isEmail (s [,eok])                  s es una direccion de e-mail
//
// 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 REFORMATEAR DATOS:
//
// stripCharsInBag (s, bag)            quita de s los caracteres en bag
// stripCharsNotInBag (s, bag)         quita de s los caracteres NO en bag
// stripWhitespace (s)                 quita el espacio dentro de s
// stripInitialWhitespace (s)          quita el espacio al principio de s
//
// FUNCIONES PARA PREGUNTARLE AL USUARIO:
//
// statBar (s)                         pone s en la barra de estado
// warnEmpty (theField, s)             indica que theField esta vacio
// warnInvalid (theField, s)           indica que theField es invalido
//
// ---------------------------------------------------------------------- //
//                     TEXTOS PARA LOS MENSAJES                           //
// ---------------------------------------------------------------------- //


var defaultEmptyOK = false

var digits = "0123456789";

var lowercaseLetters = "abcdefghijklmnopqrstuvwxyzáéíóúñü"

var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZÁÉÍÓÚÑ"

var whitespace = " \t\n\r";

var phoneChars = "()-+ ";

var mMessage = "Error: no puede dejar este espacio vacio"

var pPrompt = "Error: ";

var pAlphanumeric = "Ingrese un texto que contenga solo letras y/o números";

var pAlphabetic   = "Ingrese un texto que contenga sólo letras";

var pInteger = "Ingrese un número entero";

var pNumber = "Ingrese un número";

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, números o espacios";

var pPass = "Las claves no coinciden";



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 isPass(s, m)

{   return ((s == m) ) }



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 isNotWhitespace (s)

{

    if (isWhitespace(s)) 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 (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);
   
    // is s whitespace?
    if (isWhitespace(s)) return false;
    
    // there must be >= 1 character before @, so we
    // start looking at character position 1 
    // (i.e. second character)
    var i = 1;
    var ii = 0;

    var sLength = s.length;

 while ((ii < sLength) )
    { 
		if (s.charAt(ii) ==' ') return false;
		ii++;
    }

    // look for @
    while ((i < sLength) && (s.charAt(i) != "@"))
    { 
		if (s.charAt(i) ==' ') return false;
		i++;
    }

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

    // look for .
    while ((i < sLength) && (s.charAt(i) != "."))
    { 		if (s.charAt(i) ==' ') return false;
		i++;

    }

    // there must be at least one character after the .
    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,msg)

{  // theField.focus()
	 theField.style.borderColor="red";
 	jError(msg, 'Error', function(r) {});   ///  levando alerta linda
 //   alert("ahora axca" + msg)

    statBar(mMessage)

    return false

}



function warnInvalid (theField, s)

{   //theField.focus()

	 theField.style.borderColor="red";
    //theField.select() // Para que funcione en Explorer hay que comentarlo
	jError(s, 'Error', function(r) {});
   // alert("aqui toy" + s)
	
    statBar(pPrompt + s)

    return false

}



function checkField (theField, theFunction, emptyOK, s)

{   
	 theField.style.borderColor="";
	 
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 ((emptyOK == true) && (isEmpty(theField.value))) return true;

if ((emptyOK == false) && (isEmpty(theField.value))) 

	return warnEmpty(theField,msg);



if ( !isNice(theField.value)) 

	return warnInvalid(theField, "No puede utilizar símbolos extranos ni comillas aqui");

if (theFunction(theField.value) == true) 
					return true;
			else  	return warnInvalid(theField,msg);


}



function checkSelect (theField,s)

{	 theField.style.borderColor="";


	if( theField.selectedIndex <= 0 )

	{

          if (s) warnInvalid(theField, s);

          return(false);

	}

	return true;	

}

function checkPass (theField,theField2, s)

{	 theField.style.borderColor="";

var c = theField.value

if(c.length<6) 	return warnInvalid(theField,"La contraeña debe tener 6 caracteres");

	if (isPass(theField.value,theField2.value ) == true) 
				return true;
			else  	
				return warnInvalid(theField2,s);
		
	return true;	

}




function checkRadio (theField,s)

{ 

  for (var i = 0; i < eval(theField.length); i++) 
  {
    if (eval(theField[i].checked))
    {
      return true;
    }
  }
  eval(theField[0].focus);
  return warnInvalid(eval(theField[0]), s);
}



function retorna_radio (theField)

{

  var retorno='';

  for (var i = 0; i < eval(theField.length); i++)

  {

    if (eval(theField[i].checked))

    {

      retorno=eval(theField[i].value);

      break;

    }

  }

  return retorno;

}

function esDigito(sChr){

var sCod = sChr.charCodeAt(0);

return ((sCod > 47) && (sCod < 58));

}



function valSep(oTxt){

var bOk = false;

bOk = bOk || ((oTxt.value.charAt(2) == "-") && (oTxt.value.charAt(5) == "-"));

bOk = bOk || ((oTxt.value.charAt(2) == "/") && (oTxt.value.charAt(5) == "/"));

return bOk;

}



function finMes(oTxt){

var nMes = parseInt(oTxt.value.substr(3, 2), 10);

var nRes = 0;

switch (nMes){

case 1: nRes = 31; break;

case 2: nRes = 29; break;

case 3: nRes = 31; break;

case 4: nRes = 30; break;

case 5: nRes = 31; break;

case 6: nRes = 30; break;

case 7: nRes = 31; break;

case 8: nRes = 31; break;

case 9: nRes = 30; break;

case 10: nRes = 31; break;

case 11: nRes = 30; break;

case 12: nRes = 31; break;

}

return nRes;

}



function valDia(oTxt){

var bOk = false;

var nDia = parseInt(oTxt.value.substr(0, 2), 10);

bOk = bOk || ((nDia >= 1) && (nDia <= finMes(oTxt)));

return bOk;

}



function valMes(oTxt){

var bOk = false;

var nMes = parseInt(oTxt.value.substr(3, 2), 10);

bOk = bOk || ((nMes >= 1) && (nMes <= 12));

return bOk;

}



function valAno(oTxt){

var bOk = true;

var nAno = oTxt.value.substr(6);

bOk = bOk && ((nAno.length == 2) || (nAno.length == 4));

if (bOk){

for (var i = 0; i < nAno.length; i++){

bOk = bOk && esDigito(nAno.charAt(i));

}

}

return bOk;

}



function valFecha(oTxt){

var bOk = true;

oTxt.style.borderColor="";

if (oTxt.value != ""){

bOk = bOk && (valAno(oTxt));

bOk = bOk && (valMes(oTxt));

bOk = bOk && (valDia(oTxt));

bOk = bOk && (valSep(oTxt));

if (!bOk){
oTxt.style.borderColor="red";
//alert("Fecha Inválida /n Formato dd-mm-aaaa");
	jError("Fecha Inválida <br> Formato dd-mm-aaaa", 'Error', function(r) {});


return false;
oTxt.focus();
} else return true;

}

}





// Devuelve Unix timestamp de una fecha MySQL en formato YYYY-MM-DD

//function mysqldate_to_unix_timestamp($date) {



//list($year, $month, $day) = explode('-', format_date( $date) );

//return mktime(0, 0, 0, $month, $day, $year);

//}






