// ----------------------------------------------------------------------

//           FormCheq.js (c) ChaTo (i.am/chato) 1998

//              basado en FormChek.js (c) Eric Krock 1997 Netscape Corp.

//		Modificado por QbErT! (Ricardo@Lemus.com)

// ----------------------------------------------------------------------

// Rutinas para verificacion de formularios, basado en FormChek.js

// ---------------------------------------------------------------------- 



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 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 o espacios";



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 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 (isAlphanumeric.arguments[1] == true);

    return( isAlphanumeric( 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 sLength = s.length;



    // look for @

    while ((i < sLength) && (s.charAt(i) != "@"))

    { i++

    }



    if ((i >= sLength) || (s.charAt(i) != "@")) return false;

    else i += 2;



    // look for .

    while ((i < sLength) && (s.charAt(i) != "."))

    { 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()

    //alert(mMessage)

    alert(msg)

    statBar(mMessage)

    return false

}



function warnInvalid (theField, s)

{   theField.focus()

    //theField.select() // Para que funcione en Explorer hay que comentarlo

    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 ((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 simbolos extranos ni comillas aqui");



if (theFunction(theField.value) == true) 

	return true;

else

	return warnInvalid(theField,msg);

}



function checkSelect (theField,s)

{

	if( theField.selectedIndex <= 0 )

	{

          if (s) warnInvalid(theField, s);

          return(false);

	}

	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;

if (oTxt.value != ""){

bOk = bOk && (valAno(oTxt));

bOk = bOk && (valMes(oTxt));

bOk = bOk && (valDia(oTxt));

bOk = bOk && (valSep(oTxt));

if (!bOk){

alert("Fecha inv\u00e1lida");

oTxt.value = "";

oTxt.focus();

}

}

}



function verifyrut(rut, dv)

{

  var dvr = '0'

  var midv= dv.toUpperCase()

  suma = 0

  mul  = 2

 for (i= rut.length-1; i >= 0; i--)

    {

      suma = suma + parseInt(rut.charAt(i)) * mul

        if (mul == 7)

          mul = 2

        else

          mul++

   }

  res = suma % 11

  if (res==1 || midv=="K")

  dvr = 'k'

  else if (res==0)

    dvr = '0'

 else

    {

      dvi = 11-res

      dvr = dvi + ""

    }

  if ( dvr != midv.toLowerCase() )

    { 

	alert("Verifique que el R.U.T. este correcto");

	return false; }

  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);

//}






